项目场景:
使用 瑞星微RK3399 android8.1系统 linux4.4版本内核平台做可视化终端
包含双目摄像头(mipi接口),显示屏,fm1288声卡。
目录
一、关于开机启动脚本的添加
因为好多引脚是通过手动拉高的,因此添加了一个开机启动脚本做初始化。
1.找到脚本init.rc
在当前的系统中,开机启动过程会调用 init.rc等相关初始化内容, init.rc 类似于 linux启动过程中的 rcS
源码目录为: system/core/rootdir/init.rc
1> 然后添加启动服务项,如下:
service ais_service /system/bin/ais //启动服务名,执行 /system/bin/ais
class main
user root //root用户执行,程序权限
group root
oneshot //只执行一次
seclabel u:r:ais_service:s0 //服务权限,下文会讲到
on property:sys.boot_completed=1 //启动服务的触发条件
chmod 0755 /system/bin/ais
start ais_service
2> 然后在 device/rockchip/rk3399下创建 ais
device/rockchip/rk3399/rk3399.mk中添加脚本拷贝:
PRODUCT_COPY_FILES += device/rockchip/rk3399/ais:system/bin/ais
ais脚本内容同linux类似,但shell调用不同,如下:
#!/system/bin/sh
echo "111111111111"
2.添加相关启动权限
1> 配置file_contexts
打开 device/rockchip/common/sepolicy/file_contexts 添加如下:
/system/bin/ais u:object_r:ais_service_exec:s0
//对应init.rc中添加的 seclabel u:r:ais_service:s0
2> 添加相关 te文件
在 device/rockchip/common/sepolicy/ 下 添加 ais_service.te
ais_service.te 文件对应 ais脚本相关的启动权限问题
type ais_service,domain,coredomain;
type ais_service_exec,exec_type,file_type;
permissive ais_service; // 这两句是打开 ais服务debug权限,可以注释
init_daemon_domain(ais_service) //
allow ais_service system_file:file { read open getattr }; //权限内容
allow ais_service shell_exec:file { read open getattr };
3.te文件权限内容格式
系统打印日志:
avc: denied { read write } for pid=410 comm="light@2.0-servi" name="brightness" dev="sysfs" ino=25578 scontext=u:r:baipess:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=0
配置为:
allow baipess system_file:file { read write }
规则: allow <scontext> <tcontext>:<tclass> <operation>
scontext :对应日志bug中的 baipess
tcontext :对应日志bug中的system_file
tclass :对应日志bug中的file
operation :对应日志bug中的{ read write }