多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

MagiskBoot 两条命令拆包 boot.img:改内核参数不伤砖

MagiskBoot 两条命令拆包 boot.img:改内核参数不伤砖 MagiskBoot 两条命令拆包 boot.img改内核参数不伤砖【免费下载链接】MagiskThe Magic Mask for Android项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk从官方固件包里抠出一颗boot.img想加个内核参数手改十六进制又不敢下刀。magiskboot就是专门干这个的把 boot.img 解包成普通文件改完再按原头部原样重打包不用自己写解析器。30 秒跑通magiskboot是 Magisk 四个核心二进制之一另三个是magisk、magiskinit、magiskpolicy可以当成启动镜像Android 启动镜像的拆装工具箱解包镜像、直接操作 ramdisk初始文件系统里的 cpio 归档、修补设备树还内置 gzip、lz4、xz 等压缩解压全程不依赖外部工具。Magisk 发布包里能找到这个可执行文件Linux、Windows 版本都有从源码构建的话对应 native/src/boot/ 下的产物。镜像一般从官方固件包或自定义 ROM 的 zip 里提取文件名通常是boot.img部分新设备是init_boot.img。动手前先确认 ramdisk 在 boot 里Magisk 首页的Ramdisk一项显示Yes说明改的就是boot.img显示No要解的镜像是recovery.img。各设备启动方式的差异见 启动机制说明。解包把镜像里各个区段导出成独立文件-h会额外把头部信息导成文本# 解包 boot.imgkernel、ramdisk.cpio、dtb 等区段导出为文件头部信息落到 header ./magiskboot unpack -h boot.img解完当前目录会多出一批组件文件各自对应镜像的一个区段文件内容常见改动kernel已解压的内核基本不动ramdisk.cpio初始文件系统注入脚本、打 root 补丁header头部信息文本-h才导出改内核 cmdlinedtb/recovery_dtbo设备树不是每台设备都有移除 verity 校验second/extra少见区段按需出现不动压缩格式全自动每个区段按原镜像里的格式就地解压、压回你不用关心是 gzip 还是 lz4。重打包把改过的组件按原镜像当模板装回去# 原样重打包第一个参数必须是原始镜像输出默认 new-boot.img ./magiskboot repack boot.img手上只有 OTA 的payload.bin不用手拆直接把 boot 分区抠出来自动在boot和init_boot之间选输出文件按分区名命名# 从 OTA payload 中提取 boot 分区 ./magiskboot extract payload.bin返回值也有讲究0正常2表示识别为 ChromeOS 格式的镜像属正常现象1才是出错。它内部在干嘛解包是先看目录再取货boot.img头部的 header 记着每个区段的起始位置和大小工具照着头部把 kernel、ramdisk 等逐个抠出来检测到压缩就顺带解压。有点像拆快递再封箱把内容掏出来换掉想换的那件再用同一个箱子、同一道胶带封回去只更新外头的面单。这就是它安全的原因头部结构、页大小、压缩格式全沿用原镜像只更新组件大小、校验和这类必须变的字段刷回设备后的引导流程和原版一致。完整命令与参数细节看 官方文档magiskboot 全命令清单。按任务来下面三个改动覆盖了绝大多数日常需求。每个都单独产出一个带名字的新镜像出问题好回滚。给内核 cmdline 加参数想加consolettyMSM0,115200或者把loglevel调大方便调试二进制一个字节都不用碰# 怎么给内核加参数unpack -h 后在 header 文件 cmdline 行末尾追加参数 ./magiskboot unpack -h boot.img # 编辑完 header 再重打包输出命名体现改动内容 ./magiskboot repack boot.img cmdline-boot.imgheader里除了cmdline其余都是给你参考的区段大小这些条目会在重打包时按实际组件自动回填。⚠️kernel_size、ramdisk_size、page_size、header_version这些条目别手改改了反而容易出坏镜像。往 ramdisk 塞个开机脚本想让某个脚本开机自动跑cpio子命令直接在归档上原地增删每条命令算一个参数、用引号包住# 先看看 ramdisk 里都有什么 ./magiskboot cpio ramdisk.cpio extract # 把脚本以 0755 权限加进 ramdiskadd 权限 目标路径 本地文件 ./magiskboot cpio ramdisk.cpio add 0755 init.d/00_my_script.sh my_script.sh ./magiskboot repack boot.img myscript-boot.img路径和权限要贴合设备 init 的习惯init.d是常见目录rm、mkdir、ln、mv同样支持用法一致。⚠️repack会把当前目录的组件文件全部打进镜像目录里混进无关文件就会产出坏镜像。先./magiskboot cleanup清空再重做。从 DTB 移除 verity/AVB 校验部分设备把完整性校验写在设备树的 fstab 节点里重打包后会被 verity 拦下。dtb子命令直接在文件上打补丁# 只看 fstab 节点确认确实有 verity 相关属性 ./magiskboot dtb dtb print -f # 原地打补丁从 fstab 里移除 verity/avb 条目 ./magiskboot dtb dtb patch ./magiskboot repack boot.img noavb-boot.imgfstab 里没有 verity 条目的设备这步可以跳过print -f就是打补丁前的确认手段。⚠️dtb patch是原地修改动手前先给dtb文件备个份设备没有独立 dtb 区段的直接略过。翻车了先查这里高频翻车就三类参照镜像错了、目录有残留、刷错对象。对号入座症状大概率原因一行解法重打包的镜像起不来第一个参数不是当初解包的那个原始镜像repack换回你实际解包用的boot.img镜像损坏、panic 或校验不过当前目录混着上次的残留文件./magiskboot cleanup后重做刷完卡 logoA/B 设备刷错槽位或 vbmeta 没关校验刷当前启动槽位vbmeta 加--disable-verity --disable-verificationunpack返回非 0返回值 2 是 ChromeOS 镜像正常1 才是解析失败返回 2 照常继续返回 1 先确认镜像来源extract提不出分区OTA payload 版本过旧换新固件包或手动拆 payload各厂商镜像口味不一工具大多自动处理但你要知道该解哪个分区格式识别方式你要做的AOSP 标准头部魔数ANDROID!无特殊处理MTKkernel/ramdisk 内多一层 MTK 头自动识别并原样保留不用管vendor_bootramdisk 在独立分区解vendor_boot别解bootinit_boot新设备有独立init_boot分区解init_boot.img刷回对应分区关 vbmeta 校验时部分设备会因此清数据动手前备份。回滚的话把原始镜像刷回对应分区即可Magisk 应用里也有内置入口一开始怕的手改十六进制现在只是挑个文件改一行。刷之前cp boot.img boot.img.bak留个后路每个改动单独命名输出翻车也能一步装回原版。【免费下载链接】MagiskThe Magic Mask for Android项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表