修改boot.img

http://hi.baidu.com/juicewb/item/fff12d110a23dfa7ffded565

修改boot.img

1、备份boot.img(前提是必须有root权限的手机)

adb shell

su

cat /proc/mtd



备份boot.img命令举例如下(切记手机不同,命令不一定相同,请核对自己手机上一步的显示):

cat /dev/mtd/mtd1 >/sdcard/boot.img

2、挂载主机的一个文件夹到VMware虚拟机(我比较习惯VMware)。

sudo mount -t vmhgfs .host:/ /mnt/hgfs/

例如:挂载主机d:\123文件夹到虚拟机/mnt/hgfs/目录下,虚拟机访问修改/mnt/hgfs/mmm/文件夹下的文件相当于主机访问修改d:\123文件夹下的文件(mmm是d:\123共享到虚拟机的文件名)。这样做的好处就是linux下解开要修改的文件,然后可以很方便的在windows下修改了。若要详细设置挂载可以查看我的另一篇博文。

3、将所需工具放入/bin/目录下并添加执行权限:

mv /mnt/hgfs/mmm/split_bootimg.pl /bin/

mv /mnt/hgfs/mmm/mkbootimg /bin/

mv /mnt/hgfs/mmm/mkbootfs /bin/

chmod +x /bin/split_bootimg.pl

chmod +x /bin/mkbootimg

chmod +x /bin/mkbootfs

4、解开boot.img

mkdir /mnt/hgfs/mmm/boot

cp /mnt/hgfs/mmm/boot.img /mnt/hgfs/mmm/boot/

cd /mnt/hgfs/mmm/boot

split_bootimg.pl boot.img

此时BOOT目录下会多出几个文件,boot.img-ramdisk.gz和boot.img-kernel。

mkdir ramdisk

cd ramdisk

gzip -dc ../boot.img-ramdisk.gz | cpio -i

我们对即将要修改的init.rc也备份一下吧:

cp ./init.rc ../init.rc.backup

5、修改init.rc使含有a2sd功能:

a、搜索class_start default,在这一行之前,加入两行代码:

    start a2sd
    on property:cm.filesystem.ready=1

b、在最末尾加入:

service a2sd /system/bin/logwrapper /system/bin/sh /system/bin/a2sd
    disabled
    oneshot

c、修改system为读写

mount yaffs2 mtd@system /system rw remount

d、修改su的相关代码:

    chown root system /system/bin/su
    chmod 4550 /system/bin/su

改为:

   chown root root/system/bin/su
    chmod 6755 /system/bin/su

6、加入第二屏

要确定到底是那种格式的图片,方法是打开initrd\init文件,搜索logo,就会看到。

a、加入logo.bmp到boot.img\ramdisk.gz\initrd\(官方一般采用这种方法,切记此处的bmp不是一般的bmp)

photoshop制作480*800的图片,然后水平翻转一下,再保存为BMP,BMP保存选项中,选择高级模式:16位 R5 G6 B5,保存

b、加入initlogo.rle到boot.img\ramdisk.gz\initrd\(一般第三方的boot或者recovery都采用这种方式)

一、将rle转换为png:

(1)将rle要转成raw格式:

from565 -rle logo.rle logo.raw

(2)再将raw转成png格式:

convert -depth 8 -size 480x800 rgb:logo.raw logo.png

convert为ImageMagick自带命令,如果没有安装,命令如下:

sudo apt-get install imagemagick

二、将png转换为rle:

(1) 制作当前屏幕像素的图片(模拟器默认为320*480)

 使用PS制作一张320*480的图片,保存时选“保存为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,保存为android_logo.png

 注:好像只支持png-24,其他格式生成的rle文件显示不正常,有兴趣大家可以再验证一下。 

(2) 将图片转换为raw格式

 使用linux下的ImageMagick自带的convert命令,进行raw格式转换,命令为:

  convert -depth 8 android_logo.png rgb:android_logo.raw

 注:ubuntu 10.04 默认已经安装ImgageMagick工具,如果当前系统没有安装,可以执行下面的命令安装:

  sudo apt-get install imagemagick 

(3) 将raw格式转化为rle文件

 需要用到android编译后的rgb2565工具,在android/out/host/linux-x86/bin目录下(android为当前源码所在目录),转换命令如下:

 rgb2565 -rle < android_logo.raw > initlogo.rle

到目前为止,启动需要显示的图像已经做好了,就是initlogo.rle,注意文件名必须是这个,如果想改文件名,需要修改android/system/core/init/init.h中的宏:

 #define INIT_IMAGE_FILE "/initlogo.rle" 

7、使adb具有root权限 :

boot\ramdisk.gz\initrd\default.prop

修改为:

default.prop

ro.secure=0

ro.allow.mock.location=1

ro.debuggable=1

persist.service.adb.enable=1

命令解释:

ro.secure=0 默认开启未知源APK
ro.allow.mock.location=1 开启模拟位置
ro.debuggable=1 调试模式开
persist.service.adb.enable=1 adb远程开

8、打包boot.img:

mkbootfs ramdisk |gzip >ramdisk-new.gz

mkbootimg --kernel boot.img-kernel --ramdisk ramdisk-new.gz --base 0x02600000-o boot-new.img

9、上述命令中的0x02600000为基址(base),手机不同基址不一定相同,确定方法为:




圈一:安卓的boot.img标准的文件头格式:ANDROID!(8字节)    圈二:kernel_size(4字节)圈三:kernel_addr(4字节)

圈四:ramdisk_size(4字节)圈五:ramdisk_addr(4字节)    圈六:second_stage_size(4字节)圈七:second_stage_addr(4字节)

图八:tags_addr(4字节)圈九:page_size(4字节)

kernel地址,应为base+0x00008000

ramdisk地址,应为base+0x01000000

secondstage地址,应为base+0x00f00000

tags地址,应为base+0x00000100

page是页长,为1k(1024)的整数倍。此处为0x00000800,十进制为2048。

kernel_size:0030f68c

kernel_addr:02608000

所以基地址=0x02608000-0x00008000=02600000


ramdisk_size:0003742e

ramdisk_addr:03600000

所以基地址=0x03600000-0x01000000=02600000


second_stage_size:00000000

second_stage_addr:03500000

所以基地址=0x03500000-0x00f00000=02600000


tags_addr:02600100

所以基地址=0x02600100-0x00000100=02600000

10、修正addr:

例如有的rom四个基址不一样,可以少数服从多数的原则选择基址,打包完成后手工修正不相同的那个addr。

11、page_size

打包软件默认page_size为800h,而有的rom本身page_size为1000h,如遇到这种情况,可以这样操作:

(1)、手工修正page_size为1000。

(2)、在页长处手工增加2048(十进制)的空数据。

(2)、在kernel和ramdisk之间手工增加2048(十进制)的空数据。

12、手工分割boot.img文件:

(1)头文件=1个页长

(2)kernel:

开始位置:页长结尾的下一个数据

结尾:从开始到kernel大小

例如上述列子中的kernel为:

开始位置:800h

结尾:800+0030F68C-1=30FE8Bh

(3)ramdisk:

开始位置:kernel结尾往下(此处一般为00)第一个数字1F8B(此亦为gz文件的标志)

结尾:从开始到ramdisk的大小

13、刷入a2sd文件,并开启:

a2sd reinstall      安装或者重装a2sd。

a2sd zipalign      这个参数能让apk的访问速度稍微加快。

a2sd remove     移除a2sd

a2sd cachesd    将Dalvik Cache也放入EXT分区。


附:linux下的十六进制编辑器:ghex2。命令如下:apt-get install ghex

 

Windows下可以使用bootimg.exe修改boot.img

D:\temp\boot>bootimg /?
supported arguments:
        --cpio-list
        --repack-565
        --repack-bootimg
        --repack-ramdisk
        --repack-rle
        --unpack-565
        --unpack-bootimg
        --unpack-ramdisk
        --unpack-rle
        --unpack-updata
        --unpack-yafffs
        --unpack-yaffs
        --unpack-yaffs2

1、解开boot.img

bootimg.exe --unpack-bootimg

输出如下:

arguments: [bootimg file]
bootimg file: boot.img
output: kernel[.gz] ramdisk[.gz] second[.gz]
base=0x2600000
page_size=2048
name=""
cmdline="androidboot.hardware=blade console=null"
padding_size=2048

2、解开ramdisk.gz

bootimg.exe --unpack-ramdisk

输出如下:

arguments: [ramdisk file] [directory]
ramdisk file: ramdisk.gz
directory: initrd
output: cpiolist.txt
please remove initrd

添加或删除文件后,必须修改cpiolist.txt中的相应内容

3、打包ramdisk

bootimg.exe --repack-ramdisk

输出如下:

arguments: [cpiolist file]
cpiolist file: cpiolist.txt
output: ramdisk.cpio.gz

4、打包boot

bootimg.exe --repack-bootimg 0x2600000 "" 2048 2048

输出如下:

arguments: [base] [cmdline] [page_size] [padding_size]
kernel: kernel
ramdisk: ramdisk.cpio.gz
second:
base: 0x2600000
cmdline:
page_size: 2048
padding_size: 2048
output: boot.img

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 的 boot.img 和 vendor_boot.img 文件都包含了启动引导和操作系统的核心代码,它们通常存储在 Android 设备的 /boot 分区中。如果你想要拆分这些文件以进行定制化或修改,可以按照以下步骤操作: 1. 首先,你需要从设备中提取原始的 boot.img 或 vendor_boot.img 文件。你可以使用工具像 `adb pull /dev/block/boot` 或 `adb pull /dev/block/by-name/boot` 来提取这些文件。 2. 接下来,你需要安装 Android Image Kitchen 工具,这个工具可以用来解压和重新打包 Android 镜像文件,包括 boot.img 和 vendor_boot.img。 3. 执行以下命令,将 boot.img 或 vendor_boot.img 解压到指定目录中: ```bash $ mkdir unpacked-boot $ ./unpackimg.sh boot.img unpacked-boot ``` 或者 ```bash $ mkdir unpacked-vendor-boot $ ./unpackimg.sh vendor_boot.img unpacked-vendor-boot ``` 4. 解压后,你会得到一个名为 `ramdisk` 的目录,这个目录包含了启动引导需要的文件和脚本。你可以在这个目录中进行修改和定制化。 5. 如果你完成了对文件的修改,可以使用以下命令重新打包 boot.img 或 vendor_boot.img: ```bash $ ./mkbootimg.sh --kernel kernel --ramdisk ramdisk.cpio.gz -o new-boot.img ``` 或者 ```bash $ ./mkbootimg.sh --kernel kernel --ramdisk ramdisk.cpio.gz -o new-vendor-boot.img ``` 其中,`kernel` 是原始 boot.img 或 vendor_boot.img 中的内核文件,`ramdisk.cpio.gz` 是你修改后的 ramdisk 目录打包后的文件,`new-boot.img` 或 `new-vendor-boot.img` 是输出的新镜像文件。 6. 最后,将新的 boot.img 或 vendor_boot.img 上传到设备中,并使用以下命令将其刷入设备: ```bash $ fastboot flash boot new-boot.img ``` 或者 ```bash $ fastboot flash vendor_boot new-vendor-boot.img ``` 注意,这些操作可能会导致设备变砖,因此在进行这些操作之前,请务必备份重要的数据和文件,并小心谨慎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值