前文:Android 开机时重设 selinux 规则导致系统开机非常慢
尝试手动补丁修改了系统的 init.rc 文件,发现开机速度大幅度提升了。
从抓取的日志上看开机原本需要 200s 以上才能到启动 Boot completed ,现在只需要 30s 左右即可。
具体文件和说明丢 github:https://github.com/Seshiria/init_accelerator
一句话说明:直接修改 init.rc 文件跳过 /data/media/0 (用户的内置储存)的 selinux context reset ,这样在用户很多文件的情况下,加速开机。
1
SupperMary 2022-03-08 11:30:52 +08:00
github 是私有状态吗,点进去 404 了
|
2
amrnxcdt OP @SupperMary #1 默认是私人的,忘了公开,现在可以了。
|
3
kile 2022-03-08 16:06:57 +08:00
我不理解为什么谷歌不跳过,必须强制 selinux context reset 的意义在哪
|
4
amrnxcdt OP @kile #3 下面是我的看法:
如果说的是 /data 的话,Android 开机时候 init 会在 /data 内放置很多内容,毕竟 /data 才是可以持久化数据的地方,可以看到 init.rc 的 post-fs-data 有不少的 mkdir 操作,为了完整的 context 有必要重置这部分。 然后 /data/data 和 /data/user 这部分可以看具体的实现是跳过了这两个文件夹的 reset ,官方说法是: This method helps in identifying paths that refer to users' app data. Labeling for app data is based on seapp_contexts and seinfo assignments rather than file_contexts and is managed by installd rather than by init. 对应源码: https://cs.android.com/android/platform/superproject/+/master:external/selinux/libselinux/src/android/android_platform.c;drc=master;l=1147 文档是在这里: https://source.android.com/security/selinux/implement?hl=zh-cn 这部分不是很懂,但是应该不是由 init 进程进行处理的。 检查源码之后可以发现类似的操作最早在 5.0 就引入了: https://cs.android.com/android/_/android/platform/system/core/+/refs/tags/android-5.0.0_r1:rootdir/init.rc;drc=7e58899bcfd83152581867b05bb012c5c4ec4b46;l=322 可能的是为了方便就直接一把梭直接 restorecon /data ,在 android 的 issue 发现有针对 /data 下目录的优化: https://issuetracker.google.com/issues/124858106 至于 /data/media/0 这个目录还没有找到有反应的,可能大家比较少在内置储存卡放大量文件 or 少用 WeChat 这样的聊天工具 or 没人在意开机速度。也没看见有类似的反馈就一直没处理这个路径。 |