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...