init可執(zhí)行程序的結構都有哪些
init可執(zhí)行程序是系統(tǒng)運行的第一個用戶控件的程序
它已守護進程的方式運行,它是從linux啟動標準自動進入Android系統(tǒng)的入口
init可執(zhí)行成程序的代碼路徑為:system/core/init
由于是init本身一個可執(zhí)行程序,而不是庫,因此沒有給其他部分使用的頭文件。
init的目錄中的文件結構比較清晰,各個核心文件如下所示。
init.c:主入口,包含了main()函數(shù)
parser.h和parser.c:底層的解析功能
init_parser.h和init_parser.c:init腳本解析的功能。
keywords.h和builtins.c:關鍵字的定義和init腳本中命令的處理。
util.h和util.c工具函數(shù)
logo.h和logo.c:處理開始畫面
property_service.h和property_service.c屬性方面的處理
signal_handler h c :信號方面的處理
keychords.c:keychord方面的處理
ueventd.c設備管理分支的入口
devices.c:設備管理的設備和興處理功能
ueventd_parser.c:設備管理的腳本解析功能
編譯結果為可執(zhí)行文件,安裝在TARGET_ROOT_OUT
靜態(tài)庫鏈接
init可執(zhí)行程序將解析同樣位于根目錄中的init腳本,執(zhí)行腳本中的那功能,采用這種方式的原因在于讓init可執(zhí)行程序的功能基本保持固定,定制的工作通過init腳本來執(zhí)行。
init腳本位于根目錄中,腳本被解析后將放入隊列執(zhí)行,在較新的Android版本中,init腳本有兩個,第一個是init.rc,第二個是init.
雖然理論上建議使用設備相關的init腳本中處理設備相關的工作,但是真正實現(xiàn)一個設備時,主init腳本還需要修改。
關于init腳本的處理,實際上init_parse_config_file()構建一個序列
真正執(zhí)行的是execute_one_command()中執(zhí)行
系統(tǒng)默認的主init腳本的路徑為system/core/rootdir/init.rc
根據rootdir中的Android.mk文件,init.rc將被安裝在根文件系統(tǒng)中。