我有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-layout/259/)
ls -l /dev/block/platform/msm_sdcc.1/by-name/
我得到了引导/dev/block/mmcblk0p19
:lrwxrwxrwx root root 1971-02-28 21:30 boot - > 的/ dev /块/ mmcblk0p19
我使用命令cat /dev/block/mmcblk0p19 > /mnt/sdcard/boot.img
创建了boot.img并将此boot.img拉到我的电脑上。这个boot.img大约是23 MB。
我unmkbootimg
使用http://droidcore.blogspot.co.il/2012/12/how-to-edit-initrc-in-android.html中的工具initramfs.cpio.gz
并获得了2个文件:kernel.gz
,大约500 KB,initramfs.cpio.gz
大约是8.4 MB。我得到的细节是:
内核大小8405280
内核地址0x8000
Ramdisk大小498992
Ramdisk地址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
我使用命令gunzip -c initramfs.cpio.gz | sudo sh -c 'cd ../ && cpio -i'
(来自http://www.wiki.xilinx.com/Build+and+Modify+a+Rootfs)解包initramfs.cpio.gz
并获得了许多文件,其中包含init.rc。我编辑了这个文件。
我使用命令sh -c 'cd ../ && sudo find . | sudo cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz
重新打包mkbootimg
并获得此文件~500KB。
现在我./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
这两个文件的命令为:unmkbootimg
,我得到了boot.img,大约是8.5 MB
现在将启动闪存到设备,设备卡在第一个屏幕上(不启动)
我的问题是:
出了什么问题?
我的新boot.img只有8.5 MB而不是23 MB(原始版本),这是正常的吗?
谢谢你们!
*************我发现了问题*************
解决方案是:
我从这里使用了http://whiteboard.ping.se/Android/Unmkbootimg
:https://gist.github.com/jberkel/1087757
在我运行unmkbootimg后,我收到了这条评论:
***警告**** 此图像使用非标准mkbootimg构建! OFF_KERNEL_ADDR为0xFD908100 OFF_RAMDISK_ADDR是0x00200100 OFF_SECOND_ADDR是0xFE800100 请使用上述值修改mkbootimg.c以构建您的图像。
所以我按照这里的说明进行操作:{{1}}现在它可以工作!!!
答案 0 :(得分:1)
我无法回答第一个问题,但如果我是你,我会跳过第4步和第5步并验证unmkbootimg / mkbootimg进程是否正确。只有经过验证,我才能解决cpio进程,最后是init.rc编辑。
对于第二个问题,google的官方boot.img是8.64MB,所以我猜大小没有问题。
答案 1 :(得分:0)
Ubuntu的abootimg为我工作。我使用了更新(-u)选项。