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