我有带 AOSP ROM 4.4.4 的 Nexus 5。
我正在尝试从设备中“拉取”boot.img,将其解压缩,编辑“init.rc”,将其重新打包为 boot.img 并将其闪存到设备。
我遵循了许多指南,但没有一个与我有相同的场景:
(http://droidcore.blogspot.co.il/2012/12/how-to-edit-initrc-in-android.html 和 http://www.digitalinternals.com/mobile/android-mmc-mmcblk-partition-layout/259/)
- 设备分区是 mmcblck 所以从
ls -l/dev/block/platform/msm_sdcc.1/by-name/
我得到引导是/dev/block/mmcblk0p19
:
lrwxrwxrwx root root 1971-02-28 21:30 boot -> /dev/block/mmcblk0p19
我使用以下命令创建了 boot.img:
cat/dev/block/mmcblk0p19 >/mnt/sdcard/boot.img
并将此 boot.img 拉到我的电脑上。这个 boot.img 大约有 23 MB。我使用 http://droidcore.blogspot.co.il/2012/12/how-to-edit-initrc-in-android.html 中的工具
unmkbootimg
boot.img并获得 2 个文件:initramfs.cpio.gz
约为 500 KB 和kernel.gz
约为 8.4 MB。我得到的详细信息是:
Kernel size 8405280
Kernel address 0x8000
Ramdisk size 498992
Ramdisk address 0x2900000
Secondary size 0
Secondary address 0xf00000
Kernel tags address 0x2700000
Flash page size 2048
Board name is ""
Command line "console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1"
Extracting kernel.gz
... Extracting initramfs.cpio.gz ...
All done.
To recompile this image, use:
mkbooting --kernel kernel.gz --ramdisk initramfs.cpio.gz --base 0x26fff00 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1' -o new_boot.img
我使用以下命令解压缩
initramfs.cpio.gz
:gunzip -c initramfs.cpio.gz | sudo sh -c 'cd ../&& cpio -i'
(来自 http://www.wiki.xilinx.com/Build+and+Modify+a+Rootfs )并得到许多文件,其中有 init.rc。我编辑了这个文件。我使用以下命令重新打包
initramfs.cpio.gz
:sh -c 'cd ../&& sudo find 。 |须藤 cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz
并得到这个文件~500KB。现在我使用命令
mkbootimg
这 2 个文件:./mkbooting --kernel kernel.gz --ramdisk initramfs.cpio.gz --base 0x26fff00 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1' -o new_boot.img
我得到的 boot.img 大约 8.5 MB现在刷机到设备,设备卡在第一个屏幕(无法启动)
我的问题是:
怎么了?
我的新 boot.img 只有 8.5 MB 而不是 23 MB(原来的),这正常吗?
谢谢大家!
*************** 我发现了问题 *************
解决方案是:
我从这里使用了 unmkbootimg
:http://whiteboard.ping.se/Android/Unmkbootimg
在我运行 unmkbootimg 之后,我得到了这条评论:
*** 警告 **** 此镜像是使用非标准 mkbootimg 构建的! OFF_KERNEL_ADDR 是 0xFD908100 OFF_RAMDISK_ADDR 是 0x00200100 OFF_SECOND_ADDR 是 0xFE800100 请使用上述值修改 mkbootimg.c 以构建您的图像。
所以我按照此处的说明进行操作:https://gist.github.com/jberkel/1087757
现在可以使用了!!!
最佳答案
第一个问题我无法给出答案,但如果我是你我会跳过步骤 4&5 并验证 unmkbootimg/mkbootimg 过程是否正确。只有在验证通过后,我才会处理 cpio 进程,最后是 init.rc 编辑。
第二个问题,google官方的boot.img是8.64MB,估计大小没有问题。
关于android - 重新打包 boot.img 时出错 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889621/