我有Nexus 5和AOSP ROM 4.4.4.
我正试图从设备“拉”boot.img,解压缩,编辑“init.rc”,将其重新打包到boot.img并将其刷新到设备.
我遵循了许多指南,但没有一个与我有相同的场景:
>设备分区是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
>我使用以下命令创建了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中的工具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
>我使用以下命令解压缩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找到. | 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我得到了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编辑.
对于第二个问题,google的官方boot.img为8.64MB,所以我猜大小没有问题.
标签:android,linux,linux-kernel,build,boot
来源: https://codeday.me/bug/20190708/1402310.html