rc配置实际上也就是安卓初始化语言(android init language),其中的内容最终被init进程解析并执行。
1.AIL(Android Init Language)
AIL的内容主要由五部分组成,其分别是动作(Actions)、命令(Commands)、服务(Services)、选项(Options)、导入(Imports),这AIL中的五个成分的中文翻译是非官方的哦,大家还是记英文版较好^_^。其编写风格大致如下
1.上面提到的五个大类,在init进程中都是以行首开始分析的。
2.一行中的参数则以空格作为间隔标志。
3.注释以`#`开始。
4.支持android属性的值解析功能,例如获取属性property.name的值的写法如下。
${property.name}
//可以支持动态根据属性值来导入对应的rc文件
import /init.recovery.${ro.hardware}.rc
5.Actions和Services代表一个新段(section),即一个描述的整体,另外三个则是这两个段的组成部分。
6.Services的名字必须唯一,如果同时存在则以init进程第一次解析到的为准。例如
//file 1.rc
service ser1 /syste/bin/foo1
//file 2.rc
service ser1 /syste/bin/foo2
如果1.rc先于2.rc被init进程解析的话,那么ser1被触发启动的时候,可执行程序/syste/bin/foo1将被执行而不是 /syste/bin/foo2。
2.供Init进程解析的 .rc 文件
AIL的文件大都以.rc作为后缀。其中/init.rc则是系统启动时,init进程主要解析的rc文件。rc文件的遍布如下
1./system/etc/init/ is for core system items such as
SurfaceFlinger, MediaService, and logd.
2./vendor/etc/init/ is for SoC vendor items such as actions or
daemons needed for core SoC functionality.
3./odm/etc/init/ is for device manufacturer items such as
actions or daemons needed for motion sensor or other peripheral
functionality.
3.Services
服务是init启动并(可选)在退出时重新启动的程序。服务的格式如下
service <name> <pathname> [ <argument> ]*
<option>
<option>
...
4.Options
选项是服务的修饰符。它们影响init运行服务的方式和时间。
至此和本章相关的rc知识已盘完,如果想深入了解AIL的,可以参考android团队的官方文档,其路径如下
flagstaff@flagstaff-pc:~/aosp_r.lns/system/core/init$ ls README.md
README.md
5.flagstaff.hardware.custom_hardware@1.0-service.rc
5.1 碎片rc文件的编译
Android R推荐将service的rc文件放置在其同级目录,这样能很好的解藕AIL。所以这里也是用这种做法。
//file:test/flagstaffTest/hardware/interfaces/custom_hardware/1.0/default/Android.bp
cc_binary {
name: "flagstaff.hardware.custom_hardware@1.0-service",
...
init_rc: ["flagstaff.hardware.custom_hardware@1.0-service.rc"],
}
编译成功后,碎片的rc文件也会被android编译系统放置到对应位置,此处对应的路径如下。
flagstaff@flagstaff-pc:~/aosp_r.lns$ ls out/target/product/generic_x86_64/vendor/etc/init/flagstaff.hardware.custom_hardware@1.0-service.rc
out/target/product/generic_x86_64/vendor/etc/init/flagstaff.hardware.custom_hardware@1.0-service.rc
5.2 配置解析
完整的配置如下
service flagstaff.custom_hardware-hal-1-0 /vendor/bin/hw/flagstaff.hardware.custom_hardware@1.0-service
class hal
user system
group system
class hal:
该服务属于类hal,在init启动hal类服务的时候,该服务也会被启动,hal类的启动点则在init.rc文件中
file:/system/etc/init/hw/init.rc
class_start hal
user&&group:
以system的用户和组的身份来运行该服务。
另外如果有问题,欢迎留言或者email(836190520@qq.com)我,技术升级在于交流~~