BInder原始碼分析

2021-09-28 10:50:31 字數 1430 閱讀 5873

什麼叫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...