安卓init启动流程及rc

最近写一个native services,顺便学习了一下启动流程。看见了这个帖子说的很到位,赶紧分享一下。

​​​​​​android 启动过程及init.rc_init.target.rc_冷眼旁观之气的博客-CSDN博客吧吧

安卓的启动流程

1. 启动电源以及系统启动

 当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。

2.bootloader

引导程序

3.内核启动

内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。

4.init进程

4.1action

格式

on <trigger>
         <command>
         <command> 
        <command>
on early-init设置init进程以及它创建的子进程的优先级,设置init进程的安全环境
on init设置全局环境,为cpu accounting创建cgroup(资源控制)挂载点
on fs挂载mtd分区
on post-fs改变系统目录的访问权限
on post-fs-data改变/data目录以及它的子目录的访问权限
on boot基本网络的初始化,内存管理等等
service servicemanager启动系统管理器管理所有的本地服务,比如位置、音频、Shared preference等等…
service zygote启动zygote作为应用进程

4.2 service

格式

capability
 class <name> //设定service的class 
console 
critical 
disabled 
group <groupname> [<groupname>]* //设定进程 
keycodes 
oneshot //service只执行一次 
onrestart //当service终止时自动重启 
seclabel 
setenv 
socket 
user <username>
 ioprio 

举例,bin 文件为mytest,那么该services的rc 可以这么写

on charger

        wait ***

        start mytest

on boot

        wait ***

        start mytest

service mytest 【mytest路径】

        class mian

        user root

        group system

        seclabel u:r:mytest:s0

        oneshot

        disabled

4.2.1 oneshot与disabled配套使用

在服务配置中,"oneshot"和"disabled"是两个不同的选项,它们可以单独使用,也可以一起使用。
"disabled"选项表示禁用该服务,即系统启动时不会自动运行该服务。
"oneshot"选项表示该服务只会在启动时执行一次,并在执行完毕后立即退出。它通常用于执行一些初始化任务或启动其他服务的操作。
当一个服务配置中同时设置了"oneshot"和"disabled"时,它的含义是这个服务是禁用的(disabled),并且在启动时只会执行一次(oneshot)。这意味着系统启动时不会自动运行该服务,并且该服务会在启动时执行一次特定的任务或操作,然后立即退出。
这种组合常用于执行一些初始化任务或临时性的操作,例如配置文件的生成、系统设置的调整等。一旦服务执行完毕,它将不再运行,直到下次手动触发或重新启动系统。
因此,"oneshot"与"disabled"的配套使用可以让你在需要时执行一次性任务,并且在不需要时将服务保持禁用状态。

4.2.2 service的class

core ueventd、logd、healthd、adbd(disabled)、lmkd(LowMemoryKiller)、servicemanager、vold、debuggerd、surfaceflinger、bootanim(disabled)等
 //core分类中的服务都是一些核心服务,它们不启动,后续的服务或系统启动就可能出问题。比如servicemanager,binder通信大管家,它的启动很靠前,因为,其他服务启动时候需要向servicemanager注册binder服务。vold,负责存储类设备的挂载;还有surfaceflinger,图形显示的核心服务等。
 main debuggerd64、drm、media、ril-daemon、installd、flash_recovery、racoon(disabled)、mtpd(disabled)、keystore、dumpstate(disabled)、mdnsd(disabled)、pre-recovery(disabled)、cmd_services(disabled)、phasecheckserver、zygote等。 
// main分类中的服务是一些系统的基本服务,有了这些服务android系统、Java世界才能正常运行。
 late_start 字面意思是晚些启动。 
///device/中一些硬件厂商的.rc文件中会将一些服务设置为该类
4.2.3 seclabel u:r:mytest:s0

u 表示用户,这个标签是为一个用户分配的。
r 表示角色,这个标签定义了用户的角色或权限组。
mytest 是用户的名称,可能是某个应用程序或服务的标识符。
s0 表示安全级别,通常表示最低的安全级别。

5.添加启动脚本init.target.rc

需要import 对应的rc。

除init.rc外,其他文件都由init.rc中以import语句导入,一般来说init.rc文件存放通用配置,而其他特定模块以及特定硬件的配置则放置在独立的文件中,这样设计可以使init.rc脚本简洁,方便系统维护和升级。

提前将自己的rc设置好 ,然后导入到init.target.rc里面去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值