在Windows瑞芯微有官方解包工具FwFactoryTool可用,修改固件比较方便,但为了更好的了解固件的组成,手动来操作一次这个过程还是很有必要的。
下面试试先在ubuntu上尝试该过程,windows下也应该是可以的。
工具准备
要完成该过程需要这些工具:afptool, img_unpack, img_maker, mkkrnlimg, simg2img, make_ext4fs
其中前4个需要自己编译,可从github仓库克隆代码并编译:
git clone
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
解包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的固件啦。
在Windows瑞芯微有官方解包工具FwFactoryTool可用,修改固件比较方便,但为了更好的了解固件的组成,手动来操作一次这个过程还是很有必要的。
下面试试先在ubuntu上尝试该过程,windows下也应该是可以的。
工具准备
要完成该过程需要这些工具:afptool, img_unpack, img_maker, mkkrnlimg, simg2img, make_ext4fs
其中前4个需要自己编译,可从github仓库克隆代码并编译:
git clone
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
解包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的固件啦。
举报