本讲是android camera native framework专题的第3讲,我们介绍cameraserver.rc详解(上),包括如下内容:
- android init语言简介
- cameraserver.rc详解
- service
- user选项
- group选项
- ioprio选项
- task_profiles选项
- rlimit选项
更多资源:
资源 | 描述 |
---|---|
在线课程 | |
知识星球 | 星球名称:深入浅出android camera 星球id: 17296815 |
极客笔记圈 |
android init语言简介
rc文件官方文档
- /system/core/init/readme.md
- 在线中文版:
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 [ ]*
- 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 [ * ]
- 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
-
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 [ * ]
- 当设置了多个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/
验证/status