日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Binder的点点滴滴(二)

發(fā)布時間:2023/11/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Binder的点点滴滴(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://www.linuxidc.com/Linux/2011-07/39271p2.htm

4、Binder協(xié)議 Binder協(xié)議基本格式是(命令+數(shù)據(jù)),使用ioctl(fd, cmd, arg)函數(shù)實現(xiàn)交互。其中cmd傳遞命令,arg傳遞參數(shù),不同的命令需要傳遞的參數(shù)不同。 4、1 Binder所有命令及其所對應(yīng)的數(shù)據(jù)BINDER_WRITE_READ: (S: 向Binder寫入或讀取數(shù)據(jù),參數(shù)分兩部分,讀和寫,先寫后讀。 )該命令向Binder寫入或讀取數(shù)據(jù)。參數(shù)分為兩段:寫部分和讀部分。如果write_size不為0就先將write_buffer里的數(shù)據(jù)寫入 Binder;如果read_size不為0再從Binder中讀取數(shù)據(jù)存入read_buffer中。write_consumed和 read_consumed表示操作完成時Binder驅(qū)動實際寫入或讀出的數(shù)據(jù)個數(shù)。參數(shù):struct binder_write_read {?
? ? ? ? signed long write_size;
? ? ? ? signed long write_consumed;
? ? ? ? unsigned long write_buffer;
? ? ? ? signed long read_size;
? ? ? ? signed long read_consumed;
? ? ? ? unsigned long read_buffer;
? ? ? };BINDER_SET_MAX_THREADS:該命令告知Binder驅(qū)動接收方(通常是Server端)線程池中最大的線程數(shù)。由于Client是并發(fā)向Server端發(fā)送請求的,Server端必須開辟線程池為這些并發(fā)請求提供服務(wù)。告知驅(qū)動線程池的最大值是為了讓驅(qū)動在線程達(dá)到該值時不要再命令接收端啟動新的線程
參數(shù):int max_threads;BINDER_SET_CONTEXT_MGR:將當(dāng)前進(jìn)程注冊為SMgr。系統(tǒng)中只能存在一個SMgr。只要當(dāng)前的SMgr沒有調(diào)用close()關(guān)閉Binder驅(qū)動就不能有別的進(jìn)程可以成為SMgr。?BINDER_THREAD_EXIT?:通知Binder驅(qū)動當(dāng)前線程退出了。Binder會為所有參與Binder通信的線程(包括Server線程池中的線程和Client發(fā)出請求的線程)建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。這些線程在退出時必須通知驅(qū)動釋放相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。
BINDER_VERSION:獲得Binder驅(qū)動的版本號
其中常用的命令是BINDER_WRITE_READ。該命令的參數(shù)包括兩部分?jǐn)?shù)據(jù):一部分是向Binder寫入的數(shù)據(jù),一部分是要從 Binder讀出的數(shù)據(jù),驅(qū)動程序先處理寫部分再處理讀部分。這樣安排的好處是應(yīng)用程序可以很靈活地處理命令的同步或異步。例如若要發(fā)送異步命令可以只填入寫部分而將read_size置成0;若要只從Binder獲得數(shù)據(jù)可以將寫部分置空即write_size置成0;若要發(fā)送請求并同步等待返回數(shù)據(jù)可以將兩部分都置上
4.2 BINDER_WRITE_READ 之寫操作
Binder寫操作的數(shù)據(jù)時格式同樣也是(命令+數(shù)據(jù))。這時候命令和數(shù)據(jù)都存放在binder_write_read結(jié)構(gòu)write_buffer域指向的內(nèi)存空間里多條命令可以連續(xù)存放。數(shù)據(jù)緊接著存放在命令后面,格式根據(jù)命令不同而不同。Binder寫操作支持的命令(cmd)
BC_TRANSACTION & BC_REPLY:BC_TRANSACTION用于寫入請求數(shù)據(jù);BC_REPLY用于寫入回復(fù)數(shù)據(jù)。其后面緊接著一個 binder_transaction_data結(jié)構(gòu)體表明要寫入的數(shù)據(jù)。
arg:struct binder_transaction_data
BC_FREE_BUFFER釋放一塊映射的內(nèi)存。Binder接收方通過mmap()映射一塊較大的內(nèi)存空間,Binder驅(qū)動基于這片內(nèi)存采用最佳匹配算法實現(xiàn)接收數(shù)據(jù)緩存的動態(tài)分配和釋放,滿足并發(fā)請求對接收緩存區(qū)的需求。應(yīng)用程序處理完這片數(shù)據(jù)后必須盡快使用該命令釋放緩存區(qū),否則會因為緩存區(qū)耗盡而無法接收新數(shù)據(jù)。
BC_INCREFS & BC_ACQUIRE & BC_RELEASE & BC_DECREFS這組命令增加或減少Binder的引用計數(shù),用以實強指針或弱指針功能。
arg:32位Binder引用號

轉(zhuǎn)載于:https://blog.51cto.com/1881577/1093272

總結(jié)

以上是生活随笔為你收集整理的关于Binder的点点滴滴(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。