什麼叫binder,從不角度理解有不同含義:
從ipc層:binder是安卓跨程序通訊的方式。
從安卓driver層:binder是虛擬的物理裝置。
從安卓native層:binder是建立 service manager 以及bpbinder和bbinder模型,搭建binder驅動層的橋梁。
從安卓framework層: binder是activitymanager,windmanager等些manager對應的activitymanagerservice,windmanagerservice等service;他們之間的橋梁。
//binder在不同層扮演角色不同,我們先從driver層原始碼分析
//driver層版本:kernel_3.18
通過原始碼分析核心方法知道binder在驅動層的工作流程
例如通過 binder_init 方法 初始化binder;
binder_open 方法 開啟binder裝置;
binder_mmap 方法 資料對映;
binder_ioctl 方法 binder資料操作;
//native層
說道native層就不得不分析下service manager了,作為binder的大管家,在整個binder中起到中心樞紐作用
service manger的原始碼我可以從四個方面分析
啟動: service manager 通過呼叫binder_open開啟binder裝置,
呼叫binder_become_context_manager 把service manager提公升為binder大管家
呼叫binder_loop 無限迴圈, 處理客戶端發來的訊息。
原始碼:
獲取: 通過呼叫iservicemanager 的defaultservicemanager函式 獲取service manger
原始碼:
註冊服務 :呼叫do_add_service 註冊服務
原始碼:
查詢服務 :呼叫do_find_service 查詢服務
原始碼:
bbinder負責把service註冊到service manager;bpbinder負責從service manager獲取需要的service ,呼叫service的服務。
//framework層
初始化;安卓系統在開機過程,zygote啟動過程會註冊虛擬機器,呼叫jni層的androidruntime ::startreg函式註冊服務
呼叫jni的android_util_binder 獲取服務 binderporxy
從Android原始碼理解Binder
最近在看android原始碼,看到了binder部分,雖然對於這部分的內容感覺只理解了一小部分,但是畢竟還是看懂了小部分內容,所以想寫篇部落格記錄下自己的理解。在圖中,對於使用者空間,不同程序之間彼此是不能共享的,而核心空間卻是可共享的。在編寫應用程式時,如果想要實現binder機制,就需要以上四個...
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
思科VPP原始碼分析(dpo機制原始碼分析)
vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...