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

标签 android linux build linux-kernel boot

我有带 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.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 :

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

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

  2. 我使用 http://droidcore.blogspot.co.il/2012/12/how-to-edit-initrc-in-android.html 中的工具unmkbootimg boot.img并获得 2 个文件:initramfs.cpio.gz 约为 500 KB 和 kernel.gz 约为 8.4 MB。我得到的详细信息是:

Kernel size 8405280

Kernel address 0x8000

Ramdisk size 498992

Ramdisk address 0x2900000

Secondary size 0

Secondary address 0xf00000

Kernel tags address 0x2700000

Flash page size 2048

Board name is ""

Command line "console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1"

Extracting kernel.gz

... Extracting initramfs.cpio.gz ...

All done.


To recompile this image, use:

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. 我使用以下命令解压缩 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。我编辑了这个文件。

  2. 我使用以下命令重新打包 initramfs.cpio.gz:sh -c 'cd ../&& sudo find 。 |须藤 cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz 并得到这个文件~500KB。

  3. 现在我使用命令 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

  4. 现在刷机到设备,设备卡在第一个屏幕(无法启动)

我的问题是:

  1. 怎么了?

  2. 我的新 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,估计大小没有问题。

关于android - 重新打包 boot.img 时出错 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889621/

相关文章:

android - Flutter:尝试在 Android 上使用 map_view 显示交互式 map 时应用程序崩溃

android - 如何从第二个 Activity 中的第一个 Activity 中获取数组列表的内容

c++ - 使用 init.d 将 C++ 程序作为服务运行

python - 当 python2 native 时在 Linux 中安装 python3

java - 当附加文件已经手动下载时,如何跳过下载附加文件?

tfs - 每晚构建应该是增量的吗?

build - 我想使用 NAnt 的 foreach 来迭代文件夹中的文件,如何强制按字母顺序迭代?

android - 像 GCM 这样的推送通知在内部是如何工作的?

build - 如何清理 TeamCity 中旧的失败构建?

android - 如何使用 PhoneGap 检索设备的屏幕尺寸?