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.html和http://www.digitalinternals.com/mobile/android-mmc-mmcblk-partition -布局/259/)
ls -l /dev/block/platform/msm_sdcc.1/by-name/我得到的引导是/dev/block/mmcblk0p19:lrwxrwxrwx 根根 1971-02-28 21:30 启动 -> /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.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
我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 . | sudo 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,所以我猜这个大小没有什么问题。