为什么需要early -init? fs又是什么 post-fs是什么 post给谁?pst-fs-data是干嘛的? early-init → fs / post-fs → boot → post-fs-data → boot_completed ↑ ↑ ↑ 最早写persist 应在这里 USB 已启动 你提议的位置偏晚 为什么需要early -init? fs又是什么 post-fs是什么post给谁pst-fs-data是干嘛的这里面涉及到了 Linux / Android 开机启动的英语命名规则与时间线顺序。把这些英文缩写翻译成大白话你就瞬间秒懂了一、 词源拆解“fs” 和 “post-” 到底是什么意思fs是什么fs是FileSystem 的缩写中文叫“文件系统分区”。在 Android 里主要指存储系统代码的只读分区/system和/vendor分区。post-是什么意思“post给谁”英文前缀post-的意思就是“在……之后”After不是“发送/给”的意思。post-fsPost-FileSystem“在挂载完/system和/vendor系统分区之后”。post-fs-dataPost-FileSystem-Data“在挂载完/data用户数据分区之后”。二、 Android 开机时间线全景图从早到晚我们把 Android 开机的这几个阶段按时间的先后顺序排个队【开机上电】 │ ▼ 1. early-init (极早期啥都还没挂载适合“抢先”改变量) │ ▼ 2. fs (FileSystem正在挂载 /system 和 /vendor 系统分区) │ ▼ 3. post-fs (在挂载完系统分区“之后”初始化 Log 和 ConfigFS 目录) │ ▼ 4. boot (USB 初始化的黄金时刻正式读取 persist 属性并启动 USB) │ ▼ 5. post-fs-data (在挂载完 /data 数据分区“之后”解密数据库太晚了) │ ▼ 6. boot_completed (进入桌面开机彻底完成)三、 逐个阶段详细解答你的问题1. 为什么需要early-init最早期作用这是 Android 进程 PID 1init刚启动的第一毫秒。此时没有任何硬盘分区被挂载任何驱动都还没跑。为什么 USB 需要它正因为它最早所以在这个阶段写入setprop persist.sys.usb.config acm,adb就像抢先下达圣旨这样当系统过几秒钟走到后面的第 4 阶段boot去初始化 USB 时读取到的就绝对是你抢先写好的acm,adb而不是系统默认的adb2.fs是什么文件系统挂载作用专门负责把存储芯片里的/system.img和/vendor.img分区解压并挂载到内存目录里。只有过了这个阶段系统才能读取到/system/bin/sh或/vendor/etc/init/里的脚本文件。3.post-fs是什么挂载系统分区之后作用在/system和/vendor分区挂载完毕后立马执行。做的事情建立/config/usb_gadget目录挂载 ConfigFS、启动logd日志服务、设置系统基础权限。4.post-fs-data是干嘛的挂载 /data 分区之后作用专门处理手机的/data用户数据分区存储你安装的 App、APP数据、加密数据库的地方。为什么它对 USB 来说“太晚了”因为解密并挂载/data分区非常耗时需要 2~5 秒。而在它之前的第 4 阶段boot系统早已经把 USB 驱动启动过了如果在post-fs-data里才去改变量属于“生拉硬扯”USB 第一次启动必然会跑错路径死锁 总结early-init抢先下达圣旨的地方抢在 USB 启动前把变量改好。fs读取系统文件挂载/system和/vendor。post-fs挂载完系统文件后创建 ConfigFS 目录。bootUSB 驱动正式根据圣旨启动。post-fs-data读取用户个人数据对 USB 启动来说黄花菜都凉了。