Android R(11)为HIDL服务添加rc配置文件(四)

  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)我,技术升级在于交流~~

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值