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" },


你可能感兴趣的:(RK3128系统&驱动开发分享,android系统)