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. 镜像打包与烧录测试
分区表调整好后,就可以开始打包了。将修改后的文件放到正确的位置:
在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等压缩文件系统来减小镜像体积,但需要修改内核配置支持相应的文件系统。
记得每次修改都要测试确认功能正常,最好保留一份原始镜像作为备份。
网硕互联帮助中心




评论前必须登录!
注册