第3讲 Android Camera Native Framework cameraserver.rc详解(上)

本讲是Android Camera Native Framework专题的第3讲,我们介绍cameraserver.rc详解(上),包括如下内容:

  1. Android init语言简介
  2. cameraserver.rc详解
    • service
    • user选项
    • group选项
    • ioprio选项
    • task_profiles选项
    • rlimit选项

视频在线观看:

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815
– Wechat: 极客笔记圈

Android init语言简介

rc文件官方文档

rc文件语法

  • 以行为单位,空格分隔标记,通过反斜杠转义(或双引号)插入空格

  • 注释以#开头

修改rc文件后要重启系统,因为rc文件的解析是在开机启动时解析的

xxxx:/ # dmesg |grep -i cameraserver
[   17.427530] init: Parsing file /system/etc/init/cameraserver.rc...
[   17.434089] init: /system/etc/init/cameraserver.rc: 3: Unable to find UID for 'xxxcameraserverxxx': getpwnam failed: No such file or directory
[   35.306169] init: starting service 'xxxxcameraserver'...

service

Service是一种服务,在开机时启动,退出时自动重启(可选)

  • 语法
service <name> <pathname> [ <argument> ]*
   <option>
   <option>
   ...
  • Cameraserver
service cameraserver /system/bin/cameraserver
    class main
    user cameraserver
    group audio camera input drmrpc
    ioprio rt 4
    task_profiles CameraServiceCapacity MaxPerformance
    rlimit rtprio 10 10
  • 实战(见视频讲解)

    • 知道服务名以后,我们可以手动stop/start 服务名。注: pidof/killall 后面是跟进程名(进程名是bin的名字)

    • 修改cameraserver.rc文件的服务名

class 选项

为该服务指定class名字,用于描述在启动的哪个阶段启动该class相关的服务

  • 语法
class <name> [ <name>* ]
  • Class name可以有:early_hal、hal、core、main、late_start、charger,Class name相同的服务会被一起启动/停止

  • 示例:

    • Cameraserver的class是main,vendor.camera-provider-2-7-google的class是hal,因此第一次启动时, cameraserver的pid比vendor.camera-provider-2-7-google要大(视频讲解演示)

init.rc 总体初始化顺序

user选项

在执行此服务之前,将用户名更改为‘username’,有了UID后,方便对同一个用户名的进程进行权限控制,比如SELINUX权限设置

  • 语法
user <username>
  • Uid的定义(/system/core/libcutils/include/cutils/android_filesystem_config.h)

    • 定义时,已经决定了uid的字符串名字
    /*
     * This file is consumed by build/tools/fs_config and is used
     * for generating various files. Anything #define AID_
     * becomes the mapping for getpwnam/getpwuid, etc. The 
     * field is lowercased.
     * For example:
     * #define AID_FOO_BAR 6666 becomes a friendly name of "foo_bar"
  • 查看某个进程的uid

xxxx:/ # cat /proc/403/status |grep -i uid
Uid:    1047    1047    1047    1047

group选项

在执行此服务之前,将用户组更改为‘groupname’,有了GID后,方便对同一个用户名的进程进行权限控制,比如SELINUX权限设置

  • 语法
group <groupname> [ <groupname>* ]
  • 当设置了多个group时,GID取第一个group的,其他groups是补充
  • gid定义参考(/system/core/libcutils/include/cutils/android_filesystem_config.h)

  • 以cameraserver.rc示例

    group audio camera input drmrpc
    • GID取audio的为1005,补充group有:1006 1004 1026

    • 通过cat /proc/<pid>/status验证

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deepinout_camera

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值