7. 修改rootfs.img镜像内部的文件

有时候我们需要修改rootfs里的内容,又不想从头构建根文件系统,就可以使用野火发布的镜像,直接修改rootfs分区中的文件。

这种方法只适用于修改量较小,且对根文件系统文件结构较为熟悉的开发人员使用。

注意

通用镜像 必须在Linux下,使用Linux_Pack_Firmware工具进行打包、解包,否则打包出来的镜像无法正常使用。 专用镜像(已停止维护) 在windows和linux下都可以正常打包、解包。

7.1. Linux_Pack_Firmware解包、修改、打包(Linux)

访问资料网盘/6-开发软件/,获取Linux_Pack_Firmware_v2.29.zip,将Linux_Pack_Firmware_v2.29.zip解压到Linux PC或虚拟机中。

1
2
#解压
unzip Linux_Pack_Firmware_v2.29.zip

将从网盘获取的镜像解压成.img格式并重命名为update.img,也可以直接使用SDK生成的update.img镜像。

以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

在output目录中:

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

  • parameter.txt:分区表

  • MiniLoaderAll.bin:loader文件

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

将生成的rootfs.img挂载并按需修改内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#进入输出目录
cd Linux_Pack_Firmware/rockdev/output

#将根文件系统挂载到/mnt
sudo mount rootfs.img  /mnt


#按需修改根文件系统的内容


#修改完成后进行卸载
sudo umount /mnt

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

#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 就是最终打包生成的修改过根文件系统的完整镜像。

7.2. RKDevTool解包、修改、打包(Windows)

1.使用RKDevTool将update.img完整镜像进行解包,得到单独的根文件系统镜像rootfs.img

../../_images/image_modify01.png

2.解包得到的rootfs.img镜像保存在RKDevTool_Release_v2.92\Output\Android\Image

../../_images/image_modify02.png

3.将rootfs.img复制到Linux PC或虚拟机中,挂载镜像。

1
2
3
4
5
6
7
8
# 创建目录用来挂载rootfs.img
mkdir rootfs

# 挂载
sudo mount rootfs.img rootfs/

# 查看是否挂载成功
df -h
../../_images/image_modify03.png

4.进入挂载目录修改文件

../../_images/image_modify04.png

这里我们修改etc/hostname文件,将原本的lubancat修改为embedfire。

../../_images/image_modify05.png

也可以根据需求修改其他的配置文件、新建或删除文件。

修改完成后我们取消挂载。

1
sudo umount rootfs/
  1. 使用RKDevTool_Release_v2.92中的打包工具重新打包成完整镜像。

打开RKDevTool_Release_v2.92\rockdev,并将之前解包的Output\Android下的所有文件复制到rockdev目录里。

../../_images/image_modify06.png

然后用修改过的rootfs.img文件替换现在rockdev\Image目录下的rootfs.img文件

../../_images/image_modify07.png

双击rk356x-mkupdate.bat开始打包镜像

../../_images/image_modify08.png
  1. 烧录重新打包的镜像

../../_images/image_modify09.png ../../_images/image_modify10.png