Android中init进程的工作

在最后的循环中,监听三个事件,一个是热插拔事件,一个是修改属性服务,几个重要进程的状态.

    init.rc文件在Android文件系统运行过程中用于通用的环境设置及进程相关的定义.init.{hardware}.rc用于定义Android在不同平台下的特定进程和环境设置等.

init.rc中的属性值 由执行中的多种进程调用property_get() 来访问
/dev/socket/property_service 进程修改属性值,必须向套接字提交申请
on开头的动作列表 和 以service开头的服务列表
on设置环境变量 挂载根文件系统 NAND闪存采用yaffs2文件系统
58 动作列表和服务列表
关键字symbol  组flags 参数个数args 映射函数func    section 0x01 command 0x02  option 0x04
动作列表 on  服务列表 service开头   option运行命令 选项
服务列表和动作列表分别保存到全局变量service_list与action_list中
service_list    service
        console adbd  servicemanager
action_list     action
        init
socket  创建一个/dev/socket/name
user    执行服务钱改变用户名      group 改变组
oneshot 服务退出后不再启动
创建设备节点文件        通过设备驱动来访问硬件设备   设备节点文件 是设备驱动的逻辑文件
连接已定义的文件 冷插拔  udev自动创建设备节点
系统运行时,某个设备被插入,内核会加载设备相关的驱动程序,驱动程序会调用启动函数probe将主次设备号和设备类型保存到/sys文件系统中,然后出发
uevent,并传递给udev守护进程 而后在/dev目录相应位子创建设备节点文件
使用init进程来扮演udev守护进程的角色  binder驱动程序是冷插拔,一个应用程序若想使用binder,需要通过/dev/binder 设备节点来访问binder驱动程序.
binder驱动程序应该由用户级进程init创建设备节点文件
如果想为用户定义的新设备创建节点文件,需要将驱动相关的信息添加到devperms结构体中
Devices.c (system\core\init)
 { "/dev/cam",           0660,   AID_ROOT,       AID_CAMERA,     0 }
 Devices.c (system\core\init)   device_init
 /dev/virtual/misc/binder  major 10 minor 62 储存设备是block 创建目录是 /dev/block
 handle_device_fd创建设备节点 为热插拔  poll函数监听自驱动程序的uevent后调用handle_device_fd函数.创建设备节点文件
 vold管理USB存储设备    子进程终止的时候,init会接收传递过来的SIGCHLD信号.并调用相应的处理函数sigchld_handler  套接字对接受的是信号编号9
 waitpid   wait_for_one_process标记SVC_RESTART函数执行完毕后restart_processes
 init进程可以修改属性值 init进程会先检查各属性的访问权限  触发器 记录在on property关键字后的命令即被执行  是共享内存
 修改必须向init进程提交属性变更请求 1024个字节作为属性域头property_get 和property_set
 /data/property目录中的  属性变更handle_prope_set_fd  ctl开头的消息并非是请求系统更改属性值的消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值