如何在init.rc中添加dev字符设备节点创建权限

如何在init.rc中添加dev字符设备节点创建权限,第1张

int main(int argc,char**argv){...... INFO("reading config file\n")parse_config_file("/init.rc")/* pull the kernel commandline and ramdisk properties file in */ qemu_init()import_kernel_cmdline(0)get_hardware_name()snprintf(tmp,sizeof(tmp),"/init.%s.rc", hardware)parse_config_file(tmp)// 需要在on early-init加入device// 这样下面的device_init()创建节点动作// 才会根据这里的对device设备的描述创建出相应权限的节点[luther.gliethttp] action_for_each_trigger("early-init", action_add_queue_tail)drain_action_queue()// 因为device_init()将依赖sysfs文件系统提供的uevent机制// 对builtin到kernel中的所有char,block,net等设备,// 在/dev/目录下动态创建出对应的节点,此时会使用到// init.rc中device添加的内容device信息,// 因此device命令必须添加到early-init字段中// 即[luther.gliethttp]// on early-init// device /dev/gpio 644 system wifi// device /dev/snd* 644system audio INFO("device init\n")device_fd = device_init()......}

1.init时设置设备权限

init可执行文件是Android系统运行的第一个用户空间的程序,它以守护进程的方式运行

2. init.rc中的内容

在Android中使用启动脚本init.rc,init启动脚本路径:system/core/rootdir/init.rc可以在系统的初始化过程中进行一些简单的初始化 *** 作,init.rc脚本被直接安装到目标系统的根文件系统中,被init可执行程序解析

init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下的内容:

commands:命令

actions:动作

triggers:触发条件

services:服务

options:选项

properties:属性

init脚本的关键字可以参考init进程的system/core/init/keyword.h文件

commands:命令是一些基本的 *** 作

export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin

mount yaffs2 mtd@system /system

mount yaffs2 mtd@system /system ro remount

mount yaffs2 mtd@userdata /data nosuid nodev

mount yaffs2 mtd@cache /cache nosuid nodev

这些命令在init可执行程序中被解析,然后调用相关的函数来实现

Actions:动作,表示一系列的命令,通常在triggers触发条件中调用,动作和触发条件的形式

on <trigger>

<command>

on init

export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin

init表示一个触发条件初始化过程,在这个触发事件发生后,进行设置环境变量和建立目录的 *** 作称为一个动作

Properties属性是系统中使用的一些值,可以进行设置和读取

在启动脚本中,属性的使用如下所示

setprop ro.FOREGROUND_APP_MEM 2048

setprop ro.VISIBLE_APP_MEM 3072

on property:ro.secure=0

start console

on property可以用于判断属性,这里的属性在整个Android系统运行中都是一致的。

Services服务,通常表示启动一个可执行程序,options选项是服务的附加内容,用于配合服务使用。

例如,启动电话的进程ril-daemon和开机动画的服务

service ril-daemon /system/bin/rild

socket rild stream 660 root radio

socket rild-debug stream 660 radio system

user root

group radio cache inet misc audio sdcard_rw

service bootanim /system/bin/bootanimation

user graphics

group graphics

disabled

oneshot

ril-daemon和bootaim表示服务的名称,/system/bin/rild和system/bin/bootanimation表示服务所需要执行的可执行程序的路径。

oneshot选项表示该服务只启动一次,而如果没有oneshot选项,这个可执行程序会一直存在,如果可执行程序被杀死,则会重新启动,ril-daemon是一个守护进程,如果退出,需要重新启动,因此没有使用oneshotbootaim开机动画,只执行一次,因此加上了oneshot.

本文主要介绍rc 语法,参考官方文档

init.rc 格式文档

init.rc

主要四个点:

1 先介绍action ,on与command 组合使用

在init.target.rc 中写法如下

other 其他举例:

trigger:

commands: 说明,更多可以参考官网

2 service 与options组合使用

在init.target.rc 中service写法如下

options:

3 import

在设计中,可能使用上面的service action 就足够了,如果使用import 就参考官方README.txt


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11617972.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存