在Windows瑞芯微有官方解包工具FwFactoryTool
可用,修改固件比较方便,但为了更好的了解固件的组成,手动来操作一次这个过程还是很有必要的。
下面试试先在ubuntu上尝试该过程,windows下也应该是可以的。
要完成该过程需要这些工具:afptool
, img_unpack
, img_maker
, mkkrnlimg
, simg2img
, make_ext4fs
其中前4个需要自己编译,可从github仓库克隆代码并编译:
git clone https://github.com/TeeFirefly/rk2918_tools.git
cd rk2918_tools
make
为了方便使用,编译后可执行文件放入/usr/local/bin
下:
sudo cp afptool img_unpack img_maker mkkrnlimg /usr/local/bin
而后两个工具可以通过包管理器安装:
sudo apt-get install android-tools-fsutils
上面步骤全部完成后就做好准备了
使用img_unpack
将固件解包:
img_unpack rk3288-firmware.img img
执行完毕后会输出固件基本信息,并在当前目录下应当为出现img
文件夹,cd
进去查看即可发现固件解包后得到的两个文件:loader.img
, update.img
可知,第一个是loader
,而其他部分在undate.img
下,所以仍然需要继续解包。
解包update.img要使用afptool
:
afptool -unpack update.img update
命令执行完毕后,会出现一个update
文件夹,里面存放着各个分区的镜像。
这些镜像一般都是 安卓稀疏镜像(android sparse image) ,这些镜像无法被直接挂载修改,因此需要转换。
也可以通过file
工具来查看镜像格式。
由于稀疏镜像无法挂载,因此要使用simg2img
工具将从update.img取得的分区转换为普通的ext4镜像:
#将system.img转为ext4镜像
simg2img system.img system.img.ext4
然后挂载镜像即可修改
#挂载到/mnt/androidsystem/下
sudo mount system.img.ext4 /mnt/androidsystem/
在修改完毕后,就可以使用make_ext4fs
工具来回包镜像了:
#将/mnt/androidsystem/打包成system.img
make_ext4fs -s -l 1536M system.img /mnt/androidsystem/
其中-s
代表稀疏镜像, -l
指定分区大小,分区大小需要根据parameter
表来,若不修改则应维持与原本一致。
可以通过解包update.img
后得到的parameter.txt
计算出分区大小,因为该文件描述的是扇区,可通过下面方法快速计算:
#利用shell可快速计算,如system分区大小为0x00200000
echo $((0x00200000 * 512 / 1024 / 1024)M)
如果修改过后的镜像超出原本parameter.txt
文件描述的分区大小,则必须对应的修改该文件,修改时注意分区均需4M对齐。
首先要回包成update.img
,这里需要先将parameter.txt
复制为parameter
文件,然后再依次使用afptool
与img_maker
回包:
#回到img目录下,将update中解包的parameter.txt复制到本目录
cp update/parameter.txt parameter
#将update回包
afptool -pack . ../newUpdate.img
#与loader.img一起打包成最终的系统固件, -rk33是平台参数,解包时可见该参数
img_maker -rk33 loader.img newUpdate.img rk3288_firmware.img
一切顺利的话,现在就应该得到一个rk3288_firmware.img
的固件啦。