Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 4.3 framework之init深入

android 4.3 framework之init深入

編輯:關於Android編程

init.c(system/core/init/init.c)

Linux系統中用戶空間的第一個進程,main函數中主要解析了兩個配置文件,init.rc和硬件相關的配置文件,解析調用的是 init_parse_config_file,在Ueventd_Parser.c的Parse_config進行解析,首先找到配置文件的section,不同的section使用不同的方式去解析, section為當symbol為on或者service的時候表示section,4.3加入了import關鍵字,在init.rc中

on init : on關鍵字,對應的section名字是init

分析init.rc文件

1、section的內容從標識開始,到下一個section結束

2、boot和init在on這個section中,

解析service section:

init.h中使用service結構體,通過Initparse.c中的parse_service和parse_line_service將配置文件的內容填充於service結構體中。

init控制Service:

1、啟動zygote,當init進程執行到do_class_start時,即啟動service,因為zygote的classname為default,因此在init.rc中 #class_start 為 default,在init.c中zygote

通過fork(創建子線程)和execve(執行新的service)共同創建。

2、重啟zygote,在init.rc中 poll事件中有個SVC_RESTARTING標識,設置了它,執行service中的onrestart命令,在init.c的for循環中,執 行restart_processes,重啟所有標識為SVC_RESTARTING的service。


屬性服務(property service),類似於注冊表,重啟後鍵值依然存在

1、屬性服務的初始化,init_property_aera()初始化存儲空間,PA_SIZE 32768個字節,PA_INFO_START(1024)個字節存儲頭部信息

2、由init創建在共享內存上,而共享內存可以跨進程,(init_workspace),客戶端可以直接讀取屬性空間,只有讀權限。

3、客戶端想要設置屬性,需要通過屬性服務器來交互,客戶端通過property_set發送請求,init進程由start_property_service啟動服務,創建 了一個用來接收請求的socket,收到後調用handle_property_set_fd進行處理,檢查是否有權限,如果有,調用property_set修改屬性值。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved