云计算百科
云计算领域专业知识百科平台

RK3588非官方固件根文件系统定制与镜像打包实战

1. 环境准备与根文件系统导出

最近在折腾RK3588平台,发现官方固件有时候无法满足特定需求,比如需要定制根文件系统或者调整分区大小。我自己踩过不少坑,今天就把非官方固件的根文件系统定制和镜像打包经验分享给大家。

首先需要准备一个RK3588开发板,我这里用的是Station M3,系统是Ubuntu 20.04。建议准备一个大容量移动硬盘,因为导出的根文件系统可能会很大,我上次导出就有18GB多。

安装必要的工具很关键:

sudo apt update
sudo apt install fireflydev e2fsprogs

fireflydev这个包包含了导出根文件系统所需的工具。安装完成后,插入移动硬盘,系统会自动挂载。你需要确认挂载点,通常是在/media/firefly/目录下。

2. 根文件系统导出实战

导出根文件系统其实很简单,但有几个细节需要注意。首先确保移动硬盘有足够空间,建议至少30GB以上。

sudo ff_export_rootfs /media/firefly/你的硬盘标识符/

这个命令会将整个根文件系统导出到指定目录。导出完成后,你会看到一个巨大的rootfs.img文件。这时候需要用e2fsck检查文件系统完整性:

e2fsck -p -f /media/firefly/硬盘标识符/rootfs.img

检查无误后,可以使用resize2fs调整镜像大小。这一步很重要,因为原始镜像可能包含很多未使用空间:

resize2fs -M /media/firefly/硬盘标识符/rootfs.img

调整大小后,镜像文件会缩小很多。我上次从18GB缩小到了9GB左右,节省了大量空间。

3. 固件解包与结构分析

由于firefly官方的repack工具不支持非官方固件,我们需要用其他方式解包。这里推荐使用RKDevTool的高级功能。

打开RKDevTool,进入"高级功能"标签页,选择"解包"功能。选择你要解包的原始固件,点击解包按钮。解包完成后,在Output目录中会看到这些文件:

  • boot.bin:相当于MiniLoaderAll.bin
  • firmware.img:固件主体
  • Android目录:包含所有分区镜像

Android目录下又有:

  • package-file:分区配置文件
  • Image目录:所有分区镜像文件

Image目录包含:

  • parameter.txt:分区表配置
  • MiniLoaderAll.bin:引导加载器
  • 各种.img文件:各分区镜像

理解这个结构很重要,因为后续的定制都是基于这些文件进行的。

4. 分区表调整与参数计算

这是最关键也最容易出错的一步。当我们替换rootfs.img后,必须调整分区表参数。

打开parameter.txt文件,找到rootfs和userdata分区的配置。格式通常是这样的:

0x000d8000@0x000d8000(rootfs)
0x00000000@0x002424a00(userdata)

这里需要计算两个值:rootfs分区大小和userdata起始地址。

首先获取你的rootfs.img实际大小:

stat -c %s rootfs.img

将这个值转换为十六进制,这就是rootfs分区的大小。假设得到的值是0x2424a00。

userdata的起始地址 = rootfs起始地址 + rootfs分区大小

例如:
rootfs起始地址:0x000d8000
rootfs分区大小:0x002424a00
userdata起始地址 = 0x000d8000 + 0x002424a00 = 0x24fca00

在parameter.txt中,配置应该变成:

0x002424a00@0x000d8000(rootfs)
0x00000000@0x24fca00(userdata)

5. 镜像打包与烧录测试

分区表调整好后,就可以开始打包了。将修改后的文件放到正确的位置:

  • 将Output/Android目录下的所有内容复制到rockdev目录
  • 用你导出的rootfs.img替换Image目录下的rootfs.img
  • 确保parameter.txt已经更新
  • 在rockdev目录下执行打包命令:

    ./rk3588-mkupdate

    打包过程可能需要几分钟,完成后会生成update.img文件。这个就是可以烧录的完整镜像。

    烧录测试时,建议先擦除flash再完整烧录,避免出现奇怪的问题。如果启动失败,可以检查串口日志,通常能找到问题所在。

    6. 常见问题与解决方案

    在实际操作中,我遇到过几个典型问题:

    问题1:镜像太大无法烧录
    这是因为rootfs分区设置得太小。解决方法是在parameter.txt中增大rootfs分区大小,或者清理根文件系统中不必要的文件。

    问题2:启动卡住
    通常是分区表配置错误。仔细检查parameter.txt中的地址计算是否正确,确保没有重叠的分区。

    问题3:文件系统损坏
    在导出根文件系统后,务必使用e2fsck检查完整性。如果发现错误,可以尝试在开发板上先执行fsck再导出。

    问题4:打包工具版本问题
    不同版本的打包工具可能有兼容性问题。建议使用与固件版本匹配的工具链。

    7. 高级定制技巧

    除了基本的根文件系统替换,还可以进行更多定制:

    自定义分区布局:在parameter.txt中可以添加或删除分区,调整分区顺序。但要注意保持引导相关分区的顺序。

    修改启动参数:在parameter.txt的CMDLINE部分可以修改内核启动参数,比如调整内存分配、设置启动标志等。

    集成自定义应用:在导出根文件系统前,可以在开发板上安装需要的软件包,这些更改会体现在导出的镜像中。

    优化文件系统:可以使用squashfs等压缩文件系统来减小镜像体积,但需要修改内核配置支持相应的文件系统。

    记得每次修改都要测试确认功能正常,最好保留一份原始镜像作为备份。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » RK3588非官方固件根文件系统定制与镜像打包实战
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!