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

时间:2015-01-11 16:54:52

标签: android linux build linux-kernel boot

我有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/

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

    lrwxrwxrwx root root 1971-02-28 21:30 boot - >   的/ dev /块/ mmcblk0p19

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

    2. 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。我得到的细节是:

    3.   

      内核大小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

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

      2. 我使用命令sh -c 'cd ../ && sudo find . | sudo cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz重新打包mkbootimg并获得此文件~500KB。

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

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

      5. 我的问题是:

        1. 出了什么问题?

        2. 我的新boot.img只有8.5 MB而不是23 MB(原始版本),这是正常的吗?

        3. 谢谢你们!

          *************我发现了问题*************

          解决方案是: 我从这里使用了http://whiteboard.ping.se/Android/Unmkbootimghttps://gist.github.com/jberkel/1087757 在我运行unmkbootimg后,我收到了这条评论:

          ***警告**** 此图像使用非标准mkbootimg构建! OFF_KERNEL_ADDR为0xFD908100 OFF_RAMDISK_ADDR是0x00200100 OFF_SECOND_ADDR是0xFE800100 请使用上述值修改mkbootimg.c以构建您的图像。


          所以我按照这里的说明进行操作:{{1}}现在它可以工作!!!

2 个答案:

答案 0 :(得分:1)

我无法回答第一个问题,但如果我是你,我会跳过第4步和第5步并验证unmkbootimg / mkbootimg进程是否正确。只有经过验证,我才能解决cpio进程,最后是init.rc编辑。

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

答案 1 :(得分:0)

Ubuntu的abootimg为我工作。我使用了更新(-u)选项。