第二节 init.rc解析
init.rc
是 Android 系统中 init
进程的配置文件,它定义了系统启动时的初始化步骤、服务和属性。下面是对 init.rc
文件结构及其关键部分的解析:
文件结构
init.rc
文件包含如下主要部分:
-
配置部分:
- 设置系统属性,定义环境变量等。
-
动作部分:
- 定义在特定事件发生时执行的命令。
-
服务部分:
- 定义系统服务,描述如何启动和管理这些服务。
配置部分
配置部分通常包含 on boot
和 on property
触发的动作。例如:
on boot
# 设置环境变量
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
# 设置系统属性
setprop ro.secure 1
setprop ro.debuggable 0
setprop persist.sys.usb.config mtp
动作部分
动作是指特定事件发生时执行的一系列命令。动作部分的格式是 on <trigger>
,后跟一系列命令。例如:
on boot
# 挂载文件系统
mount ext4 /dev/block/platform/soc/1d84000.ufshc/by-name/system /system ro
# 启动服务
start servicename
# 创建目录并设置权限
mkdir /data 0771 system system
服务部分
服务部分定义了系统中的守护进程和服务,描述了如何启动和管理这些服务。每个服务的定义包括服务名、启动的可执行文件以及相关参数和选项。例如:
service servicename /system/bin/executable
class main
user root
group system
oneshot
服务定义中的关键字:
class <class-name>
:指定服务所属的类,服务启动和停止可以基于类进行控制。user <username>
:指定运行服务的用户。group <groupname>
:指定运行服务的用户组。disabled
:标记服务为禁用状态,需显式启动。oneshot
:服务在启动后不会自动重启。seclabel <label>
:设置服务的 SELinux 安全标签。
示例解析
以下是一个示例 init.rc
文件的解析:
on early-init
# SELinux early setup
start ueventd
on init
# 挂载虚拟文件系统
mount tmpfs tmpfs /dev
mount proc proc /proc
on boot
# 设置环境变量
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
# 启动关键服务
start servicename
service servicename /system/bin/executable
class main
user root
group system
oneshot
on early-init
:在早期初始化阶段,启动ueventd
服务。on init
:初始化阶段,挂载/dev
和/proc
文件系统。on boot
:系统引导阶段,设置环境变量并启动servicename
服务。service servicename
:定义名为servicename
的服务,指定运行的可执行文件为/system/bin/executable
,属于main
类,运行用户为root
,用户组为system
,且只启动一次。
总结
init.rc
文件是 Android 启动过程中 init
进程的配置文件,定义了系统初始化时的各个步骤和服务。通过解析 init.rc
文件,可以理解系统启动时执行的命令、启动的服务以及设置的系统属性。这对于定制和调试 Android 系统非常重要。