Android : 跟我學Binder --- (3) C程式示例 Android : 跟我學Binder --- (1) 什麼是Binder IPC?為何要使用Binder機制?
目錄:
-
Android : 跟我學Binder --- (1) 什麼是Binder IPC?為何要使用Binder機制?
-
Android : 跟我學Binder --- (2) AIDL分析及手動實現
-
Android : 跟我學Binder --- (3) C程式示例
- 待完善...
一、Binder框架分析
1、IPC、LPC和RPC的概念:
IPC: (Inter Process Communication )跨程序通訊,泛指程序之間任何形式的通訊行為,它不僅包括各種形式的訊息傳遞,還可以指共享資源,以及同步物件;
LPC: (Local Procedure Call )本地過程呼叫,用在多工作業系統中,使得同時執行的任務能互相會話。這些任務共享記憶體空間使任務同步和互相傳送資訊;(IPC的封裝)
RPC:(Reomote Procedure Call )遠端過程呼叫,類似於LPC,只是在網上工作。RPC開始是出現在Sun微系統公司和HP公司的執行UNIX作業系統的計算機中;
2、通訊架構:
Client/Server <---> service manager 互動流程:
server ---------addservice-------> service manager
client ---------getservice--------> service manager
2、原始碼框架:
(1)android_5.0.2_32\frameworks\native\cmds\servicemanager\service_manager.c //管理server註冊的服務(程序)
a. binder_open
b. binder_become_context_manager
c. binder_loop(bs, svcmgr_handler);
c.1 res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
c.2 binder_parse
// 解析
// 處理 : svcmgr_handler
SVC_MGR_GET_SERVICE/SVC_MGR_CHECK_SERVICE : 獲取服務
SVC_MGR_ADD_SERVICE : 註冊服務
// 回覆
②android_5.0.2_32\frameworks\native\cmds\servicemanager\binder.c //封裝好的Binder驅動庫
③android_5.0.2_32\frameworks\native\cmds\servicemanager\bctest.c //client測試程式碼
二、編寫程式
三、測試與總結