1. init 進程是Android 啟動後由內核啟動的第一用戶級進程,init 進程是系統的守護進程,init進程有四個作用依次為:子進程終止處理,生成設備驅動節點,分析及運行init.rc 文件和init.*.rc 文件, 初始化屬性服務。init 進程源碼位於android_root_dir/system/core/init/init.c 內。
2.init 進程執行流程:
注冊與子進程相關的SIGCHLD信號處理器,
創建並掛載啟動所需的文件目錄,
解析init.rc 文件,
初始化qemu設備,設置模擬器環境,
解析init.*.rc 文件,
創建進程中已經定義好的設備節點文件,生成靜態設備節點,
初始化屬性服務,
顯示logo 在LCD屏幕上,只支持rle565格式的圖片,
設置系統初始值,
執行與action_list 相關的init區塊的命令,
啟動屬性服務,
創建套接字,因為子進程若要修改屬性值必須向Init申請,故生成“dev/socket/property_service" 套接字,以接收申請,
執行與action_list 相關的init區塊的命令,
設置事件處理循環的監聽事件,
循環處理事件,
2. init.rc 是init進程啟動後執行的啟動腳本,定義android系統通用的環境設置及與記錄進程相關設置,Init.*.rc 是定義android 在不同平台下的特定進程和環境設置,與Init.rc類似。init.rc 主要包括以On開頭的 action list和以service開頭的service list, action list 創建所需目錄,指定特定文件的權限,service list 記錄初始化程序需要啟動的程序。
on init 部分:設置環境變量,掛載文件系統,
主要設置根文件系統目錄,以及編譯時所需的庫目錄, android 采用NAND FLASH 所以掛載文件系統格式為yaffs2 , 主要掛載 /system /data 兩個目錄,
/system/bin 存放shell 命令集, app- 基本應用, framework- java lib, lib- bionic lib , /data 及其子目錄存放user data.
on boot 部分:設置應用程序終止條件以及驅動目錄和文件權限等,
在應用程序終止條件中為各應用指定了OOM 的調整值,值越大,終止優先級越高
service部分 記錄 init 進程啟動的進程,
一般是一次性程序或運行在後台的deamon 進程