在 Android 系统中,surfaceflinger.rc 作为管理 SurfaceFlinger 服务(负责图形合成与显示管理的核心服务)的配置文件,其加载过程依赖于 init 进程对特定目录下 .rc 文件的自动扫描机制,具体流程如下:
1. surfaceflinger.rc 的存放路径
SurfaceFlinger 是 Android 系统的核心服务(属于系统基础组件),其 .rc 配置文件通常被编译安装到 /system/etc/init/ 目录下。
这一目录是 init 进程启动时自动扫描并加载 .rc 文件的核心路径之一(系统级服务的配置文件默认存放于此)。
2. init 进程对 .rc 文件的扫描与加载逻辑
init 进程启动后,会按固定顺序扫描并加载多个分区下的 .rc 文件目录,其中优先处理 /system/etc/init/ 目录(系统核心服务配置)。具体步骤:
init进程初始化时,会解析主配置文件init.rc(位于根目录/),但主init.rc并不直接importsurfaceflinger.rc。- 随后,
init进程会主动遍历预设的.rc文件目录(包括/system/etc/init/、/vendor/etc/init/等),对目录中所有.rc文件按文件名顺序依次加载(文件名不影响加载,仅按目录优先级处理)。
由于 surfaceflinger.rc 位于 /system/etc/init/ 目录,因此会被 init 进程自动扫描到并加载解析。
3. 加载时机与依赖
surfaceflinger.rc 的加载时机早于 SurfaceFlinger 服务的启动:
init进程在early-init到init阶段之间完成所有.rc文件的加载(包括surfaceflinger.rc)。- 加载后,
surfaceflinger.rc中定义的service块(SurfaceFlinger 服务)和on块(启动触发条件)会被解析并存储到init进程的配置数据库中。 - 当系统启动到特定阶段(如
on post-fs或on boot),满足surfaceflinger.rc中定义的触发条件(如class_start core)时,SurfaceFlinger 服务才会被实际启动。
总结
surfaceflinger.rc 并非通过主 init.rc 的 import 指令显式加载,而是依赖 init 进程对 /system/etc/init/ 目录的自动扫描机制。由于其存放路径属于 init 进程默认扫描的系统级配置目录,因此会在系统启动早期被自动加载解析,为后续 SurfaceFlinger 服务的启动提供配置基础。