91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

binder 機制流程分析

發布時間:2020-08-22 05:48:32 來源:網絡 閱讀:364 作者:上帝之子521 欄目:系統運維

????????前面我們對著代碼分析了整個 test_client 和 test_server 的整個流程,下面我們再來總結下整個流程。

????????假設我們有此種服務場景:test_server 提供 HelloService 服務,還有 GoodbyeService 服務;test_client 來使用服務。

????

????????對于 test_server 來說:

????????????1. addService:

????????????????a. test_server 為每個服務構造 flat_binder_object 結構體。它里面中含有的 binder 指針和 cookie 指針 指向不同服務;

????????????????b. 調用 ioctl 發送數據:

????????????????????b.1 數據中含有 flat_binder_object + 服務名稱;

????????????????????b.2 數據中含有“目的地”:handle = 0,表示發給 SM;

????????????????c. 上面調用 ioctl ,那么驅動程序對每一個 flat_binder_object 構造 binder_node 結構體。它里面中含有的 ptr 和 cookie 指針是來自于 flat_binder_object 結構體里的 binder 和 cookie 指針;

????????????????d. 驅動程序根據 handle = 0 找到 SM,然后把數據發給 SM 并且創建 binder_ref 結構體;

????????????????e. 在 SM 里記錄服務的名稱及 desc 值。

????????對于 test_client 來說:

????????????2. getService:

????????????????a. test_client 構造數據。數據 = 名稱 +“目的(指的是 handle = 0)”;

????????????????b. 調用 ioctl 發送數據;

????????????????c. 那么驅動程序根據 handle = 0 找到 SM 并把數據發給 SM;

????????????????d. SM 從 svclist 鏈表中找到對應項。比如根據名“Hello”找到第一項,handle = 1;

????????????????e. SM 通過 ioctl 返回數據。數據 = flat_binder_object,flat_binder_object 結構體中的 type 表示引用 binder_ref,handle = 1;

????????????????f. 驅動:發現數據中含有 flat_binder_object,且 type 為引用,從 SM 的 binder_ref 鏈表中找到對應項(傳入的 handle == binder_ref.desc),再找到 binder_node,最后為 test_client 建立 binder_ref;

????????對于 SM 來說:

????????????3. 那么 test_client 是怎么使用 HelloService?

????????????????a. 構造數據,數據中含有 code(調用哪個函數),“目的”handle = 1;

????????????????b. 使用 ioctl 發數據;

????????????????c. 驅動:去除 handle = 1,找到 binder_ref,進而找到 binder_node,再找到 test_server;最后把數據傳入給 test_server,并且在數據中設置(ptr 和 cookie) 等于 binder_node 的(ptr 和 cookie);

????????????????d. test_server 根據(ptr 和 cookie)知道調用的是哪個服務;

????????1、那么在 test_server 中,驅動構造出 binder_node 結構體(放在鏈表中)包含有 HelloService 和 GoodbyeService 服務。binder_node 結構體中包含的 ptr 和 cookie 和 proc,proc 結構體指向的就是進程 test_server;

????????2、在 SM 中,驅動同樣也構造出 binder_ref 結構體(也是以鏈表的形式)包含有 HelloService 和 GoodbyeService 服務。binder_ref 結構體中包含的 desc 和 node,此 node 指向的便是前面的 test_server 中的 binder_node 結構體找到對應服務;

????????3、在 test_client 中,驅動同樣也構造出 binder_ref 結構體(也是以鏈表的形式)包含有 HelloService 和 GoodbyeService 服務。binder_ref 結構體中包含的 desc 和 node,此 node 指向的便是前面的 SM 中的 binder_node 結構體;

????????同樣 test_client 根據 desc 找到對應的具體服務名(哪個服務,Hello 或 Goodbye 服務);

????????此時 binder 系統的流程調用已經非常明了了,那么此系統中的最核心的函數是 ioctl;test_client 端中最核心的數據是 handle,test_server 端最核心的數據是 ptr 和 cookie;

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建宁县| 礼泉县| 类乌齐县| 苏尼特右旗| 阳城县| 扶余县| 永清县| 兴业县| 汉寿县| 乐都县| 娄底市| 斗六市| 宁都县| 商南县| 海城市| 嘉鱼县| 陆河县| 蒲江县| 陕西省| 普格县| 黄陵县| 弥勒县| 巴南区| 临夏县| 安岳县| 尉犁县| 旬邑县| 那曲县| 佛山市| 正蓝旗| 隆德县| 辉县市| 乌苏市| 合肥市| 通辽市| 紫金县| 浮山县| 耒阳市| 探索| 杨浦区| 中江县|