【发布时间】:2015-03-09 11:44:35
【问题描述】:
我有带有 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 开机-> /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 中的工具
unmkbootimgboot.img 并获得2 个文件:initramfs.cpio.gz约为500 KB 和kernel.gz约为8.4 MB。我得到的详细信息是:
内核大小 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
我用命令:
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。我编辑了这个文件。我使用以下命令重新打包
initramfs.cpio.gz:sh -c 'cd ../ && sudo find . | sudo cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz,得到了这个文件 ~500KB。现在我使用命令
mkbootimg这两个文件:./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,然后我得到了大约 8.5 MB 的 boot.img现在将启动闪存到设备,设备卡在第一个屏幕上(未启动)
我的问题是:
怎么了?
我的新 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 现在它可以工作了!!!
【问题讨论】:
-
我也想这样做,但只在 Windows (!) 上使用 imgutil.exe 时成功。
标签: android linux build linux-kernel boot