 init可執行(xing)程(cheng)序的結構
							時間:2018-09-25      來源(yuan):未知(zhi)
							init可執行(xing)程(cheng)序的結構
							時間:2018-09-25      來源(yuan):未知(zhi) 
							init可執行程序(xu)是系統運行的第一(yi)個用戶(hu)控(kong)件的程序(xu)
它已(yi)守護進程的(de)方式運(yun)行,它是從linux啟動(dong)標準自動(dong)進入Android系統的(de)入口
init可執(zhi)行成程(cheng)序的(de)代碼路徑為(wei):system/core/init
由于(yu)是(shi)(shi)init本身(shen)一個可執行程序,而不是(shi)(shi)庫,因此沒有給其他部分使用的(de)頭文件。
init的目錄中的文(wen)(wen)件結構比較(jiao)清晰,各個核心文(wen)(wen)件如下所(suo)示。
init.c:主入口,包含(han)了main()函數
parser.h和parser.c:底層(ceng)的解析(xi)功能
init_parser.h和(he)init_parser.c:init腳(jiao)本解析的功(gong)能。
keywords.h和builtins.c:關鍵字的(de)定義(yi)和init腳本(ben)中命令的(de)處理(li)。
util.h和util.c工(gong)具(ju)函數
logo.h和(he)logo.c:處理開始(shi)畫面
property_service.h和property_service.c屬性方(fang)面(mian)的處理
signal_handler h c :信號方面的處理
keychords.c:keychord方面的(de)處理
ueventd.c設備管理分(fen)支的入(ru)口
devices.c:設(she)備管(guan)理的設(she)備和(he)興處理功能
ueventd_parser.c:設備管理的腳本(ben)解析功能
編(bian)譯(yi)結果為可執行文件,安裝在TARGET_ROOT_OUT
靜態庫鏈接
init可執行(xing)程序將(jiang)解析同(tong)樣位于(yu)根目錄中(zhong)的(de)init腳(jiao)(jiao)本(ben)(ben),執行(xing)腳(jiao)(jiao)本(ben)(ben)中(zhong)的(de)那(nei)功能(neng)(neng),采用這種方式的(de)原因在于(yu)讓(rang)init可執行(xing)程序的(de)功能(neng)(neng)基本(ben)(ben)保持(chi)固定,定制的(de)工(gong)作(zuo)通過init腳(jiao)(jiao)本(ben)(ben)來執行(xing)。
init腳本(ben)(ben)位(wei)于根目錄中,腳本(ben)(ben)被解析后(hou)將(jiang)放入隊列執行,在較新的(de)(de)(de)Android版本(ben)(ben)中,init腳本(ben)(ben)有兩個(ge)(ge)(ge),第一個(ge)(ge)(ge)是init.rc,第二個(ge)(ge)(ge)是init.<設(she)備>.rc,它作為額外的(de)(de)(de)啟動內容,例如(ru)仿真器上使(shi)用(yong)的(de)(de)(de)第二個(ge)(ge)(ge)init腳本(ben)(ben)的(de)(de)(de)文件名(ming)稱(cheng)為init.goldfish.rc。兩個(ge)(ge)(ge)init.rc腳本(ben)(ben)的(de)(de)(de)語法和作用(yong)完全(quan)相(xiang)同,知識(shi)前者(zhe)用(yong)于通用(yong)的(de)(de)(de)工作,后(hou)者(zhe)用(yong)于設(she)備相(xiang)關的(de)(de)(de)工作。
雖(sui)然理(li)論(lun)上建(jian)議(yi)使用設備相關(guan)的(de)init腳本中處理(li)設備相關(guan)的(de)工作,但(dan)是真(zhen)正實現一個設備時(shi),主(zhu)init腳本還需要修改。
關(guan)于init腳本的處理,實際上init_parse_config_file()構建一個(ge)序列
真正執行的是(shi)execute_one_command()中執行
系統默認(ren)的主init腳本的路徑為system/core/rootdir/init.rc
根據rootdir中(zhong)的Android.mk文(wen)件(jian),init.rc將被(bei)安裝在根文(wen)件(jian)系統中(zhong)。

