Android init进程概述
2015-10-22 20:06
302 查看
init进程,其程序位于根文件系统中,在kernle自行启动后,其中的 start_kernel 函数把根文件系统挂载到/目录后,在 rest_init 函数中通过 kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); 建立PID为1的内核进程,随后调用 run_init_process 来加载boot分区中根文件系统里的init程序来跳转到用户空间运行。init是第一个运行在用户空间的进程。之后很多的系统服务都由init进程fork而来,主要的有servicemanager,zygote。zygote又会fork其他进程,主要有systerserver,launcher等apk。systermserver则会以多线程的方式启动其他系统服务,比如PowerManagerService等。
init进程的主要作用如下
创建临时文件系统目录并挂载相依文件系统
管理设备(通过设备文件节点)
初始化属性系统,其类似于Windows系统的注册表
读取bootloader传给kernel的cmdline,并存入相应的ro属性中
设置SELinux相关策略
解析rc文件,执行相应动作,包括启动相依服务
之后进入循环过程,有五个动作
执行action列表中的表头命令
检测系统中是否有进程需要被重启
监听属性系统,处理修改属性的事件
监听chordered keyboard的按键输入事件,其可以启动相依的service,目前不支持
回收僵尸进程
另外,/sbin目录下ueventd和watchdog程序为/init程序的软链接,因为三者有许多东西类似,所以为了方便共享代码减小体积,类似于busybox/toolbox,通过传递过来的argv参数,来决定跑init,ueventd,watchdog中的哪一个。
ueventd守护进程负责监听热插拔事件,类似于udev。
watchdogd守护进程负责定时向 "/dev/watchdog" 设备写1踢狗。
以上即为Android用户空间,第一个运行的用户进程所做的事情,所提供的服务以及所监听的事件。
init进程的主要作用如下
创建临时文件系统目录并挂载相依文件系统
管理设备(通过设备文件节点)
初始化属性系统,其类似于Windows系统的注册表
读取bootloader传给kernel的cmdline,并存入相应的ro属性中
设置SELinux相关策略
解析rc文件,执行相应动作,包括启动相依服务
之后进入循环过程,有五个动作
执行action列表中的表头命令
检测系统中是否有进程需要被重启
监听属性系统,处理修改属性的事件
监听chordered keyboard的按键输入事件,其可以启动相依的service,目前不支持
回收僵尸进程
另外,/sbin目录下ueventd和watchdog程序为/init程序的软链接,因为三者有许多东西类似,所以为了方便共享代码减小体积,类似于busybox/toolbox,通过传递过来的argv参数,来决定跑init,ueventd,watchdog中的哪一个。
ueventd守护进程负责监听热插拔事件,类似于udev。
watchdogd守护进程负责定时向 "/dev/watchdog" 设备写1踢狗。
以上即为Android用户空间,第一个运行的用户进程所做的事情,所提供的服务以及所监听的事件。
相关文章推荐
- Android自定义View
- Android中横竖屏的切换
- android键盘表情流畅切换实现
- 关于Android Studio导入.9图片报错问题
- android路上的点点滴滴
- AndroidL的checkPermission方法详解
- android拍照后图片路径的获取(解决不同手机存在拍照后旋转的问题)
- Android关于String数据的startsWith()和endsWith()函数操作
- Android 操作系统的内存回收机制
- Android CollapsingToolbarLayout:将ActionBar载入Toolbar(2)
- Android 关于@NonNull
- Android逆向之旅---SO(ELF)文件格式详解
- Android 颜色透明度计算
- Android的handler详解
- ANDROID仿淘宝商品浏览滑(拖)动查看详情界面
- Device Compatibility
- Android基础入门教程——8.3.3 Paint API之—— MaskFilter(面具)
- Android Studio下多渠道打包
- Android Studio下多渠道打包
- android屏幕适配