標籤:android io ar 使用 sp 檔案 資料 on cti
以下內容只大概列個提綱,若要明白其中細節,還請看源碼:
申明:本人菜鳥,希望得到大神指點一二,餘心足已
binder 裝置:/dev/binder
binder 處理序間通訊涉及的四個角色:
Client Service ServiceManager Binder驅動程式
一,Binder驅動程式
源碼位置:kernel/[vendor]/[codename]/drivers/staging/android/binder.c
kernel/[vendor]/[codename]/drivers/staging/android/binder.h
等等相關檔案。
1.基礎資料結構
struct binder_work : 描述待處理的工作項目
struct binder_node: 描述一個binder實體物件,每一個Service組件在Binder驅動程式中都對應一個Binder實體物件,用來描述它在核心中的狀態。
struct binder_ref_death: 描述一個Service組件的死亡接收通知
struct binder_ref : 描述一個Binder引用對象,每一個Client組件在Binder驅動程式中都對應有一個Binder引用對象,用來描述它在核心中的狀態。
struct binder_buffer : 描述一個核心緩衝區,用來在進程間傳輸資料。每一個使用Binder處理序間通訊機制的進程,在Binder驅動程式中都有一個核心緩衝區列表,用來儲存Binder驅動程式為它分配的核心緩衝區。
struct binder_proc : 用來描述一個正在使用Binder通訊機制的進程,在進程調用open開啟/dev/binder時,Binder驅動程式為進程建立該該結構體。
struct binder_thread : 描述Binder線程池中的一個線程。
struct binder_transaction : 描述處理序間通訊過程
struct binder_write_read : 描述處理序間通訊過程中傳輸的資料,包括輸入和輸出資料。
enum BinderDriverCommandProtocol : 定義了輸入(Binder驅動)的命令協議代碼,在向Binder寫資料時使用。
enum BinderDriverReturnProctocol: 定義了輸出(Binder驅動)的返回協議代碼,在從Binder讀返回結果時使用。
struct binder_ptr_cookie : 描述一個Binder實體物件或一個Service組件的死亡接收通知。
stuct binder_transaction_data : 描述處理序間通訊過程中所傳輸的資料,會作為命令協議代碼BC_TRANSACTION和BC_REPLY的參數使用。
2.Binder 使用流程:
初始化:binder_init
在目標裝置上建立/proc/binder/proc目錄
每一個使用Binder機制通訊的進程都在該目錄下有對應的檔案,通過該檔案可以讀取到進程的Binder線程池,Binder實體物件,Binder引用對象及核心緩衝區等資訊
還建立了 state states transactions transaction_log failed_taransaction_log 檔案,記錄Binder驅動程式運行情況。
Binder裝置開啟: binder_open
為進程建立binder_proc結構體,並加入到全域hash隊列binder_procs中。
Binder裝置檔案記憶體映射:binder_mmap
為進程分配核心緩衝區,以便它可以用來傳輸處理序間通訊資料。
3. 核心緩衝區的管理:
分配核心緩衝區:binder_alloc_buf
釋放核心緩衝區:binder_free_buf
查詢核心緩衝區:binder_buffer_lookup
android binder 處理序間通訊機制1-binder 驅動程式