4. 完整镜像的解包和打包

为了编译发布和镜像管理,我们提供了完整打包好的系统镜像, 完整镜像按照一定的规则将系统所需的各个分区打包在了一起。

由于在后面的备份及烧录过程中涉及了对单独分区的操作, 而部分用户又不想使用SDK来自行构建分区。 为了便于用户对系统镜像进行二次修改和分发,这里我们讲解不借助SDK对系统镜像镜像单独解包和打包。

注意

对于 解包再打包 完整操作, 通用镜像 必须在Linux下,使用Linux_Pack_Firmware工具进行打包、解包,否则打包出来的镜像无法正常使用, 专用镜像(已停止维护) 在windows和linux下都可以正常打包、解包。如果 仅解包 两种镜像在Windows或Linux操作均可以。

4.1. Linux_Pack_Firmware解包和打包(Linux)

4.1.1. 解包

访问资料网盘/6-开发软件/,获取Linux_Pack_Firmware_v2.29.zip

将Linux_Pack_Firmware_v2.29.zip解压到Linux PC或虚拟机中。

1
2
#解压
unzip Linux_Pack_Firmware_v2.29.zip

访问资料网盘获取需要的系统镜像,传到Linux_Pack_Firmware/rockdev目录下。

以lubancat-rk3566的Debian xfce通用镜像为例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#进入工具目录
cd Linux_Pack_Firmware/rockdev/

#解压镜像,根据实际压缩包名称而定
7z x lubancat-rk3566-debian10-xfce-20250303_update.7z

#重命名镜像为update.img,根据实际镜像名称而定
mv lubancat-rk3566-debian10-xfce-20250303_update.img update.img

#解包镜像
./unpack.sh

#解包镜像的到output目录
#查看output目录
ls output
#信息输出如下
boot.img  MiniLoaderAll.bin  package-file  parameter.txt  rootfs.img  uboot.img

4.1.2. 打包

修改需要修改的组件后可打包成完整的镜像包。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#进入输出目录
cd Linux_Pack_Firmware/rockdev/output

#打包镜像,根据实际芯片名称而定

#rk356x打包执行
../afptool -pack ./ update_tmp.img || pause
../rkImageMaker -RK3568 MiniLoaderAll.bin update_tmp.img update.img -os_type:androidos || pause

#rk3576打包执行
../afptool -pack ./ update_tmp.img || pause
../rkImageMaker -RK3576 MiniLoaderAll.bin update_tmp.img update.img -os_type:androidos || pause

#rk3588/rk3588s打包执行
../afptool -pack ./ update_tmp.img || pause
../rkImageMaker -RK3588 MiniLoaderAll.bin update_tmp.img update.img -os_type:androidos || pause

打包后在output当前目录生成 update_tmp.imgupdate.img 镜像文件,其中 update.img 就是最终打包生成的完整镜像。

4.2. RKDevTool解包和打包(Windows)

4.2.1. 解包

我们需要借助RKDevTool来将完整的update.img镜像解包成分区镜像的形式。

RKDevTool的安装请参考eMMC烧录章节。

首先将从网盘获取的Update.zip镜像解压成.img格式,也可以直接使用SDK生成的update.img镜像。

打开RKDevTool,进入高级功能选项页,找到解包功能,选择要解包的镜像,点击解包按钮,等待解包完成。

../../_images/unpack01.png

解包后的文件保存在RKDevTool的Output目录中。

Output目录中有两个文件一个文件夹

  • boot.bin:打包时的loader,也就是MiniLoaderAll.bin文件

  • firmware.img:打包时afptool生成的固件

  • Android目录下为firmware.img的展开内容

进入Android目录,有一个文件一个文件夹

  • package-file:分区与分区镜像名的对应关系

  • Image:firmware.img展开后的内容,也就是解包后的分区镜像。

进入Image目录,根据不同操作系统,有以下三类文件

  • 分区表:parameter.txt

  • loader文件:MiniLoaderAll.bin

  • 分区镜像:boot.img、misc.img等以img结尾的分区镜像文件

../../_images/unpack02.png

4.2.2. 打包

一般是在修改或备份了根文件系统之后,我们需要将修改后的分区镜像重新打包成一个完整的固件。

Windows环境下打包工具存放在SDK/tools/windows/RKDevTool/rockdev/目录下

由于以上打包工具都是针对SDK设计的,我们对打包工具做了部分修改,使其可以不依托于SDK使用。 我们将修改后的打包工具存放在了RKDevTool_Release_v2.92软件压缩包的rockdev目录下,可以搭配RKDevTool的解包功能使用。

../../_images/unpack03.png

在上面的解包过程中,我们得到了Output文件夹的内容。

首先我们将Output\Android目录下的内容复制到rockdev目录下

../../_images/unpack04.png

红框中的内容是我们的打包工具及辅助打包的可执行文件,Image目录下存放了我们的分区镜像, package-file是分区与分区镜像文件的对应关系。

如果我们对某一分区镜像文件做出了改变,在打包时要注意镜像文件名正确,与package-file文件中的命名及路径一致。

双击板卡主芯片对应的bat文件,开始进行打包。LubanCat-1、2、Zero都使用了rk356x主芯片,这里我们双击rk356x-mkupdate.bat

../../_images/unpack05.png

打包完成后,当前文件夹内出现了update.img文件,这就是打包后的完整镜像文件

../../_images/unpack06.png

我们使用烧录工具,将打包好的镜像烧录到板卡中,可以正常启动。

../../_images/unpack07.png ../../_images/unpack08.png