• 第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文件的解析是在开机启动时解析的

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

    service

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

    • 语法
    1. service <name> <pathname> [ <argument> ]*
    2. <option>
    3. <option>
    4. ...
    • Cameraserver
    1. service cameraserver /system/bin/cameraserver
    2. class main
    3. user cameraserver
    4. group audio camera input drmrpc
    5. ioprio rt 4
    6. task_profiles CameraServiceCapacity MaxPerformance
    7. 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的字符串名字
      1. /*
      2. * This file is consumed by build/tools/fs_config and is used
      3. * for generating various files. Anything #define AID_
      4. * becomes the mapping for getpwnam/getpwuid, etc. The
      5. * field is lowercased.
      6. * For example:
      7. * #define AID_FOO_BAR 6666 becomes a friendly name of "foo_bar"
    • 查看某个进程的uid

    1. xxxx:/ # cat /proc/403/status |grep -i uid
    2. 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//status验证

  • 相关阅读:
    129页6万字大数据集成服务建设项目可行性分析报告
    BP神经网络参数设置总结
    Hexagon_V65_Programmers_Reference_Manual(30)
    [JavaWeb]—Mybatis入门
    vue3+vite+ts真实项目笔记
    11月3日 OpenCV 实战基础学习笔记——图像基本处理
    报错与解决 | 应用程序无法启动0x7b mysql
    【知识专栏丨python数分实战】电商数据分析案例
    python设置全局代理
    fastjson到底做错了什么?为什么会被频繁爆出漏洞?
  • 原文地址:https://blog.csdn.net/qq_42194101/article/details/128091298