1. 程式人生 > >RK3128系統&驅動開發分享——(四)init.rc及開機啟動指令碼

RK3128系統&驅動開發分享——(四)init.rc及開機啟動指令碼

1、android啟動程式碼/system/core/init/init.c

該啟動程式碼讀取並解析init.rc指令碼程式碼如下:

init_parse_config_file("/init.rc");

然後通過action_for_each_trigger觸發響應的動作。

2、init.rc在/system/core/rootdir目錄下。

init.rc的語法主要分動作命令和服務。

動作命令例子如下:

on property:ro.debuggable=1 //包含觸發條件
    start console  //開啟服務

服務例子如下:

service console /system/bin/sh //程式例程
    class core          //選項配置
    console
    disabled
    user shell
    group shell log
    seclabel u:r:shell:s0

服務相當於是函式,動作命令相當於對函式的呼叫。

3、開機指令碼的新增

首先寫一個shell指令碼,同linux shell指令碼。例如指令碼檔案為test.sh(指令碼內容隨意,此處只做例子展示)

指令碼在原始碼中存放目錄為/device/rockchip/common

修改init.rc檔案新增指令碼服務和動作命令(init.rc檔案修改方法見上一章節)

服務新增語法如下:

service service_test /system/bin/test.sh                 //shell指令碼一般存放在android根檔案系統的system/bin目錄下,這個目錄指的是安卓根檔案系統的目錄,並非指令碼在原始碼中的存放目錄。
    user root     group root     disabled     oneshot 動作命令語法如下:
on property:sys.boot_completed=1         start service_test 然後在/device/rockchip/common/device.mk檔案中新增以下指令(用於編譯時自動拷貝檔案到out目錄下的根檔案系統) PRODUCT_COPY_FILES += \         device/rockchip/common/test.sh:system/bin/test.sh 也可以直接拷貝指令碼檔案到out/target/product/rk312x/root/system/bin目錄,然後重新打包(打包方法見前面章節) 4、許可權問題 若出現許可權問題導致指令碼不能執行,需要新增檔案許可權。 修改system/core/include/private/android_filesystem_config.h static const struct fs_path_config android_files[]陣列中新增以下內容
{ 00550, AID_ROOT,      AID_SHELL,     0, "system/bin/test.sh" },