RK3128系统&驱动开发分享——(四)init.rc及开机启动脚本

本文深入解析Android设备启动过程中的关键文件init.rc的作用及其语法结构,包括如何定义服务和触发动作命令来实现特定功能,如开机启动脚本及解决权限问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值