Android .rc
文件的用途
在 Android 系统中,.rc
文件主要是 init 脚本,用于定义和配置 Android 系统的启动过程。.rc
文件的扩展名通常为 .rc
,例如 init.rc
、init.vendor.rc
、init.hardware.rc
等。这些文件是 Android 的 init
进程(系统的第一个用户态进程)读取和解析的脚本,它们控制系统服务、设备驱动程序、属性初始化等内容。
主要用途
.rc
文件的主要用途可以总结为以下几点:
-
启动服务:
- 定义系统级服务(如
surfaceflinger
、zygote
等)的启动条件、启动方式以及依赖关系。
- 定义系统级服务(如
-
挂载文件系统:
- 挂载必要的文件系统(如
/system
、/data
、/vendor
等),确保操作系统能够正常运行。
- 挂载必要的文件系统(如
-
设置系统属性:
- 初始化和设置系统属性(如
ro.
开头的只读属性和persist.
开头的可持久化属性)。
- 初始化和设置系统属性(如
-
权限管理:
- 设置文件、设备节点的权限,确保系统安全。
-
加载驱动程序:
- 加载特定的内核模块或设备驱动程序。
-
事件触发:
- 定义某些条件(如属性变化、文件出现)下的事件处理逻辑。
.rc 文件的结构
一个 .rc
文件通常由以下几部分组成:
-
命令部分:
- 命令通常用于设置属性、挂载文件系统、启动服务等。
-
服务定义部分:
- 定义服务的启动行为、路径和属性。
-
触发器部分:
- 定义在特定事件发生时执行的操作。
常见的 .rc 文件语法和示例
1. 属性设置
使用 setprop
设置系统属性。
setprop ro.debuggable 1
setprop persist.sys.usb.config adb
2. 挂载文件系统
使用 mount
挂载文件系统。
mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/system /system ro
mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/data /data nosuid nodev noatime
3. 启动服务
定义服务的启动方式。
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
user root
group system readproc
onrestart restart zygote_secondary
说明:
service
:关键字,用于定义服务。class
:指定服务所属的类,服务可以根据类被统一启动或停止。user
:指定服务运行的用户。group
:指定服务运行的用户组。onrestart
:定义服务重启时执行的操作。
4. 触发器
触发器定义系统在特定条件下执行的操作。
on post-fs-data
mkdir /data/misc/my_service 0770 system system
chmod 0700 /data/misc/my_service
说明:
on post-fs-data
:触发器,表示在文件系统初始化完成后执行。mkdir
和chmod
:用于创建目录并设置权限。
常见的 .rc 文件
以下是 Android 系统中常见的 .rc
文件及其用途:
-
init.rc
:- 系统主配置文件,定义了系统服务、属性、挂载点等全局配置。
-
init.hardware.rc
(例如init.qcom.rc
):- 硬件相关的配置文件,包含特定芯片或设备的初始化逻辑。
-
init.vendor.rc
:- 定义供应商相关的服务、属性和其他配置。
-
init.usb.rc
:- 定义 USB 子系统的初始化和配置。
-
init.recovery.rc
:- 定义 Recovery 模式下的服务和行为。
示例:init.rc
以下是一个简化的 init.rc
示例,展示了典型的 .rc
文件内容:
# 定义系统属性
on early-init
setprop ro.boot.hardware qcom
setprop ro.debuggable 1
# 挂载文件系统
on init
mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/system /system ro
mount ext4 /dev/block/platform/soc/1da4000.ufshc/by-name/data /data nosuid nodev noatime
# 启动服务
service surfaceflinger /system/bin/surfaceflinger
class main
user system
group graphics
disabled
oneshot
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
user root
group system
onrestart restart zygote_secondary
# 触发器
on property:sys.boot_completed=1
start my_custom_service
总结
.rc
文件是 Android 系统启动过程中的核心配置文件,用于定义系统服务、挂载点、属性和事件触发器。它们由 init
进程解析并执行,是 Android 平台启动时不可或缺的一部分。通过合理配置 .rc
文件,可以定制系统的启动行为和服务管理逻辑。