本讲是Android Camera Native Framework专题的第3讲,我们介绍cameraserver.rc详解(上),包括如下内容:
- Android init语言简介
 - cameraserver.rc详解 
  
- service
 - user选项
 - group选项
 - ioprio选项
 - task_profiles选项
 - rlimit选项
 
 
视频在线观看:
- 极客笔记:极客笔记在线课程
 
加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815
– Wechat: 极客笔记圈
Android init语言简介
rc文件官方文档
-  
/system/core/init/README.md
 -  
在线中文版:Android Init语言介绍|极客笔记
 
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验证 

 -  
 












![[附源码]计算机毕业设计SpringBoot高血压分析平台](https://img-blog.csdnimg.cn/68acb97b44644a61a0dbd98d5e40ecb4.png)






