MagiskBoot 使用指南:一条命令解包与重打包 Android 启动镜像
【免费下载链接】MagiskThe Magic Mask for Android项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk
你拿到一个 boot.img,想加内核参数、注一个开机脚本,却不知从哪下刀——这正是 MagiskBoot 解包与重打包启动镜像要解决的。
能力地图:解包注入移除
- 解包/重打包 boot 镜像:按头部拆成独立组件,改完再按原结构装回
- 改 CPIO 归档:ramdisk 里增删文件、建目录、建软链,全部原地完成
- 打补丁 DTB 设备树:打印 fstab 节点、移除 verity/avb 校验项
- 压缩/解压文件:gzip、lz4(含 LG 变体)、lzma、xz、bzip2 内置支持,不依赖外部工具
- 从 payload 提取分区:官方 OTA 的 payload.bin 里直接取出 boot.img
完整命令清单见官方文档。
最小可行路径:解包与重打包
准备一个 Linux 环境,把magiskboot(通常在发布包的rootdir或system目录)和boot.img放在当前目录,然后:
# 解包:-h 额外导出 header 文本文件,后面改 cmdline 会用到 ./magiskboot unpack -h boot.img # (改动组件,见下一节) # 重打包:第一个参数必须是原始镜像,输出名缺省为 new-boot.img ./magiskboot repack boot.img test-boot.img解包后当前目录会出现这些组件文件:
| 产物文件 | 含义 | 你是否要动它 |
|---|---|---|
kernel | 已解压的内核镜像 | 否 |
ramdisk.cpio | 初始文件系统,CPIO 格式 | 是,注入脚本在这 |
header | 头部文本(仅-h生成) | 是,改 cmdline 在这 |
dtb | 设备树,非所有设备都有 | 是,移除校验在这 |
second/extra | 少见区段,按需出现 | 否 |
动手改一改:注入与移除
改内核 cmdline
只改header文本文件,不碰任何二进制,引导流程完全不变。
./magiskboot unpack -h boot.img # 编辑 header,在 cmdline= 行末尾追加 loglevel=8 ./magiskboot repack boot.img cmdline-boot.img⚠️header里的kernel_size、ramdisk_size、page_size、header_version别手改,重打包时工具会按实际组件大小自动回填。
向 ramdisk 注入开机脚本
cpio子命令对归档做原地修改,不碰内核,改完重打包刷回不影响引导流程。动手前先确认 ramdisk 在 boot 分区——Magisk 主页里 "Ramdisk: Yes" 表示 ramdisk 在 boot;显示 No 则要去解 init_boot 或 vendor_boot 分区。
# 先看看 ramdisk 里有什么 ./magiskboot cpio ramdisk.cpio extract # 注入开机脚本,0755 表示属主可读写执行,源文件是本地 my_script.sh ./magiskboot cpio ramdisk.cpio "add 0755 init.d/00_my_script.sh my_script.sh" # 用原始镜像作参照重打包,输出独立命名 ./magiskboot repack boot.img myscript-boot.img⚠️ repack 会把当前目录里的组件文件全部打进去,cpio extract后残留的无关文件会产出坏镜像——每次改动用干净目录,或先跑./magiskboot cleanup。
从设备树移除 verity 校验
部分设备把完整性校验写在设备树的 fstab 节点里,dtb patch直接在文件上原地移除,不改内核的校验逻辑。
# 查看 fstab 节点,确认存在 verity 相关属性 ./magiskboot dtb dtb print -f # 原地移除 verity / avb 条目 ./magiskboot dtb dtb patch ./magiskboot repack boot.img noavb-boot.img⚠️patch直接改文件且不留备份,要重做必须从原始镜像重新解包。
底层机制:原位重打包
repack 时 MagiskBoot 把原始镜像当模板:页大小、区段布局、压缩格式全部沿用,只重算区段大小与校验和。它不是"重建"镜像,而是"原位替换"——结构与原版一致、只有内容变了,刷回设备后引导流程与原版相同。
想深入 boot 与 recovery 的启动方式差异,读 docs/boot.md。
翻车自救:装回原版镜像
- 刷入后卡 logo、校验失败:repack 参照镜像与解包镜像不一致,或 A/B 设备刷错槽位、漏刷 vbmeta。→ 装回原版镜像,A/B 细节看 docs/install.md。
- repack 产物是坏镜像:当前目录混入无关文件。→ 跑
./magiskboot cleanup或换干净目录重做。 - unpack 返回 2:镜像被识别为 ChromeOS 格式,不是错误。→ 按该格式另行处理。
- 手里只有 OTA 没有 boot.img:
payload.bin是 OTA 包格式。→./magiskboot extract payload.bin直接提取 boot 分区。
| 格式 | 识别方式 | 你需要知道的事 |
|---|---|---|
| AOSP 标准 | 头部魔数ANDROID! | 最常见,无特殊处理 |
| MTK(联发科) | 内核/ramdisk 内带 MTK 头 | 工具自动识别并在重打包时原样保留 |
| vendor_boot | 独立vendor_boot分区 | ramdisk 在其中,解它而不是 boot |
| ChromeOS | 特定签名结构 | unpack 返回 2 即识别成功 |
新镜像已经刷进去、设备起不来的时候,Magisk 管理端的 "RESTORE IMAGES" 可以直接恢复备份的原始镜像:
MagiskBoot 把"拆启动镜像"这件原本要手写解析器的事,收敛成了两条命令加几次文本编辑。刷新镜像前备份原始boot.img,先在模拟器验证通过,再动主力机。
【免费下载链接】MagiskThe Magic Mask for Android项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考