安卓系統之uevent 機制

2021-10-07 07:21:01 字數 1446 閱讀 2029

uevnet 介紹

uevent是android核心空間與使用者空間進行通訊的一種方式,其本質是通過netlink(通過socket)傳送訊息給使用者程序,使用場景(熱插拔)

uevent 程序的啟動流程

1.system/core/init/init.cpp/main

if (!strcmp(basename(ar**[0]), 「ueventd」))

returnueventd_main(argc, ar**);

2.system/core/init/ueventd.cpp/ueventd_main(有個死迴圈也會呼叫handle_device_fd() )

ueventd_parse_config_file("/ueventd.rc");(參考rc配置檔案為生成的節點設定許可權,並沒有生成節點)

ueventd有兩個相關的rc檔案需要解析,ueventd.rc,ueventd.***.rc(檔案涉及到/dev 或 /sys目錄及子目錄的許可權,使用者如需要更改許可權,可在相關檔案中進行增加和修改許可權等操作)

建立裝置節點的流程

1.uevent在kernel中傳送出來的,通過kobject_uevent_env進行傳送

kobject_uevent_env(&edev->dev.kobj, kobj_change, envp)kobject_uevent()

netlink_broadcast_filtered

2.system/core/init/devices.cpp/device_init中建立netlink socket進行接收

device_fd =uevent_open_socket();uevent的socket handle 本質是建立netlink socket,用於監聽uevent

coldboot("/sys/class");

coldboot("/sys/block");

coldboot("/sys/devices");

3.接著呼叫do_coldboot ->handle_device_fd() ->uevent_kernel_multicast_recv(接收uevent事件)-> handle_device_event->handle_device-> make_device-> mknod 建立節點完成

4.handle_device_event函式會做判斷然後呼叫不用的分支函式再呼叫handle_device

static void handle_device_event(struct uevent *uevent)

else if (!strncmp(uevent->subsystem, 「platform」, 8)) else }

安卓系統之epoll 機制使用

epoll機制 與之相對應的還有select 機制 bionic libc include sys epoll.h define epoll ctl add 1 define epoll ctl del 2 define epoll ctl mod 3 define epoll cloexec o ...

安卓的handler機制

一 定義 handler是訊息處理的機制,很多耗時的操作,如訪問網路 i o操作等不能在主線程中執行,而這些操作又與ui的變化相關聯。常常採用由子執行緒完成操作,傳送訊息使切換到主線程更新ui的辦法。當然也可以用來獲取資料等。與handle相關的類 message 訊息 messagequeue 訊...

180725 安卓 簽名機制

傳送者將公鑰公開,對於傳送資料的資訊摘要用私鑰加密 接受者用公鑰解密該內容,與接收資料的資訊摘要進行對比 從而保證 1.接收到的資料與發布資料相同 2.傳送者是公開公鑰的私鑰持有人 與https相同,公鑰必須可信才有意義 因此簽名也需要攜帶乙個由可信ca機構簽發的證書,證明該公鑰來自可信的傳送者 s...