打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 4555/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要转成raw格式:
from565 -rle logo.rle logo.raw
再将raw转成png格式:
convert -depth 8 -size 480x800 rgb:logo.raw logo.png
convert为ImageMagick自带命令,如果没有安装,命令如下:
sudo apt-get install imagemagick

反向打包:
首先需要制作一个和你手机相同分辨率的图片,保存时使用“保存为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,生成logo.png。
convert -depth 8 logo.png rgb:logo.raw
注:如果没有安装ImageMagick

编译一下android自带的rgb2565工具:gcc -O2 -Wall -Wno-unused-parameter -o rgb2565 to565.c
对raw文件进行rle565格式转换:
to565 -rle < logo.raw > logo.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 关闭保护
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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android boot.img 拆包,修改adb 具有root权限,以i9250为例
android boot.img 结构
split_bootimg.pl
向Flash中烧写uboot和linux操作系统
uboot分析之bootm
如何解包/编辑/打包boot.img文件 - shenhaocn - 博客园
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服