ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年1月6日 星期四

Android IPC -- Bind

Android把 System V -IPC 拿掉,改用 Binder。

Binder 是 linux kernel 的一個 driver。user program 利用 /proc/binder 與他溝通。

Android 設計 ServiceManager 這個 program,作為 user program 和 binder 間的介面。

Binder 提供的 IPC 和被拿掉的 System V IPC 不一樣。
Android 好像只有用 Binder 實作出一個 IPC 的功能,就是類似 message的 send-reply。

但是不是任意兩個 process 都可以用 Binder 來作 IPC。
一個要是 Service,一個要是 Client。

Service 向 ServiceManager 註冊一個 Service/Interface, ServiceManager 會幫他把 service name, interface pointer 加到 Binder 的資料裡。

Client 向 ServiceManager 要求取得 XXX service (以 service name 為參數)。
ServiceManager 就會由 Binder 找出對應的 Service interface 給 Client。

然後 Client 就可以利用這個 interface 對 Service send msg.



這個 Interface prototype 是固定的,所以就像 IOControl 一樣, interface 的第一個 argument 是 function code,後面是 sendmsg (client to server), 再來是 reply (server reply to client)。

所以 service 在作這個 interface 的時候,就像 IoControl 一樣,依照 function code 對 sendmsg, replymsg 作不同的處置。



有點麻煩..

沒有留言:

標籤

網誌存檔