on post-fs 是系统的什么阶段?
这两个问题问得非常精准直接触及了 Android 系统开机初始化init阶段的核心时序。以下为你详细解答这两个问题一、on post-fs是系统的什么阶段在 Android 系统开机时init进程会按照严格的时间轴顺序依次执行各个阶段。on post-fs是开机极早期开机第 0.5 秒左右的一个阶段开机时间轴从早到晚 1. on early-init -- 极早期初始化 SELinux、创建最基础设备节点 2. on init -- 初始化阶段挂载 /proc, /sys 等虚拟文件系统 3. on post-fs -- 【这里】System 分区/根文件系统刚挂载完成绝大多数服务和 USB 都还没启动 4. on post-fs-data -- Data /用户分区挂载并解密完成 5. on boot -- 系统服务准备启动SurfaceFlinger、Zygote 等 6. on boot_completed -- 整个 Android 系统开机完成显示桌面on post-fs的特点它是系统刚把/system磁盘镜像挂载好的时刻。此时USB 总线还没有初始化任何 USB 设备都还没有向外发车还没写 UDC。二、 为什么要把 1setprop vendor.usb.vid 0x0E8D等加在on post-fs 阶段1.setprop vendor.usb.vid 0x0E81本身是什么意思VIDVendorIDUSB 厂商识别码。0x0E8D是MediaTek联发科官方注册的 USB 厂商 ID。这行代码的意思是把子 设备 的 USB 厂商 ID 明确指定为联发科的 0x0E81。2. 为什么要从后面的on boot提前到on post-fs阶段深层原因注意看你们 diff 代码里删掉的部分第 57~66 行你们原来把setprop vendor.usb.acm_cnt 1和acm_enable 1写在后面的on boot阶段。提前到on post-fs有两大核心好处作用 A防止开机中途 USB 闪断避免 ADB 开机中途掉线如果写在后面的on boot开机头 2 秒系统属性还没设置USB 会先按照“默认纯 ADB 模式”发车等 3 秒后运行到on boot阶段属性突然变成了acm_cnt1系统又强行解绑 UDC 重新按照“三合一模式”发车。结果导致电脑/母 设备看到子 设备在开机中途突然“闪断”重连了一次ADB 中途断开。提前到on post-fs开机第 0.5 秒在 USB 硬件这辈子第一次发车之前就把 VID、ACM 端口数acm_cnt1、开启串口acm_enable1全部预置好结果第一次发车就是完美的ums_adb_acm三合一模式开机过程中一次闪断都没有作用 B确保后续的on property:...规则 100% 成功匹配在文件后面有这样一行规则on property:sys.usb.configadb property:vendor.usb.acm_enable1 ...如果acm_enable放在后面的on boot才设置当sys.usb.configadb触发时acm_enable还是 0导致整段规则直接被跳过提前在on post-fs设置好能保证后续所有的条件判断在触发时acm_enable已经是 1 了100% 必定匹配成功