我有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-layout/259/)

  • 设备分区是mmcblck,所以从ls -l /dev/block/platform/msm_sdcc.1/by-name/我知道引导是/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中的工具对boot.img进行unmkbootimg编码,并得到2个文件:initramfs.cpio.gz约为500 KB,kernel.gz约为8.4 MB。我得到的详细信息是:


  • 我使用以下命令解压缩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编辑。

    对于第二个问题,谷歌的官方boot.img为8.64MB,所以我猜它的大小没有问题。

    08-16 02:18