重新打包 boot.img 时出错(Android)

kan*_*nde 5 linux boot android build linux-kernel

我的 Nexus 5 带有 AOSP ROM 4.4.4。

我试图从设备中“拉出”boot.img,解压它,编辑“init.rc”,将其重新打包为 boot.img 并将其刷新到设备。

我遵循了许多指南,但没有一个与我的情况相同:

http://droidcore.blogspot.co.il/2012/12/how-to-edit-initrc-in-android.htmlhttp://www.digitalinternals.com/mobile/android-mmc-mmcblk-partition -布局/259/

  1. 设备分区是 mmcblck 所以从ls -l /dev/block/platform/msm_sdcc.1/by-name/我得到的引导是/dev/block/mmcblk0p19

lrwxrwxrwx 根根 1971-02-28 21:30 启动 -> /dev/block/mmcblk0p19

  1. 我使用以下命令创建了 boot.img:cat /dev/block/mmcblk0p19 > /mnt/sdcard/boot.img并将此 boot.img 拉到我的电脑上。此 boot.img 约为 23 MB。

  2. 我使用http://droidcore.blogspot.co.il/2012/12/how-to-edit-initrc-in-android.htmlunmkbootimg中的工具创建了 boot.img并得到了 2 个文件:哪个大约 500 KB,哪个约为 8.4 MB。我得到的详细信息是:initramfs.cpio.gzkernel.gz

内核大小 8405280

内核地址0x8000

Ramdisk 大小 498992

虚拟盘地址0x2900000

次要尺寸 0

辅助地址0xf00000

内核标签地址0x2700000

Flash页面大小2048

板名称为“”

命令行“console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1”

提取kernel.gz

...正在提取 initramfs.cpio.gz ...

全做完了。


要重新编译此映像,请使用:

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

  1. 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 。我编辑了这个文件。

  2. initramfs.cpio.gz用命令重新打包:sh -c 'cd ../ && sudo find . | sudo cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz并得到了这个文件~500KB。

  3. 现在我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

  4. 现在将启动闪存到设备,设备卡在第一个屏幕上(未启动)

我的问题是:

  1. 怎么了?

  2. 我的新 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现在它可以工作了!

Wu *_*eng 1

我无法给出第一个问题的答案,但如果我是你,我会跳过步骤 4 和 5 并验证 unmkbootimg/mkbootimg 过程是否正确。只有在验证之后,我才会处理 cpio 过程,最后是 init.rc 编辑。

对于第二个问题,google官方的boot.img是8.64MB,所以我猜这个大小没有什么问题。