当前位置: 首页 > news >正文

从零构建Firefly RK356x定制镜像:解包、替换与全盘打包实战

1. 环境准备与工具获取

在开始定制Firefly RK356x系统镜像之前,我们需要准备好必要的开发环境和工具链。这里我推荐使用Ubuntu 20.04 LTS作为基础系统,因为这个版本在嵌入式开发领域兼容性最好,我自己在多个项目中实测都非常稳定。

首先需要安装基础依赖包:

sudo apt update sudo apt install -y build-essential git python3-dev lib32stdc++6

接下来获取Firefly官方开发工具包。这里有个小技巧:建议直接从Firefly官网下载最新版本的开发套件,而不是使用apt仓库里的版本。因为官方GitHub仓库的更新往往比apt仓库快2-3个版本。我上周刚帮同事排查过一个bug,就是因为apt仓库版本过旧导致的。

下载并解压开发工具包:

wget https://github.com/FireflyTeam/firefly-linux-repack/archive/refs/tags/v2.1.3.tar.gz tar -xzf v2.1.3.tar.gz cd firefly-linux-repack-2.1.3

注意:解压后记得检查tools目录下是否包含unpack.sh和pack.sh脚本,这两个是我们后续操作的核心工具。如果缺失,可能需要重新下载压缩包。

2. 获取与解包官方固件

现在我们需要获取官方的完整固件作为基础。这里有个容易踩坑的地方:一定要下载与你的开发板型号完全匹配的固件版本。我去年就遇到过因为固件版本不匹配导致WiFi驱动异常的问题,排查了整整两天。

下载官方固件后,将其重命名为update.img并放入工具目录:

cp ~/Downloads/Firefly-RK356x_Ubuntu20.04_20230815.img ./update.img

执行解包操作:

./unpack.sh

解包过程大约需要3-5分钟,完成后会在output目录生成以下关键文件:

  • Image/rootfs.img - 根文件系统镜像
  • Image/kernel.img - 内核镜像
  • Image/resource.img - 资源文件
  • parameter.txt - 分区表配置

重要提示:解包过程中如果出现"Unpack firmware failed"错误,通常是固件损坏或版本不兼容。建议重新下载固件并检查MD5校验值。

3. 定制根文件系统

这部分是最能体现定制化的环节。我们可以通过两种方式修改根文件系统:

3.1 直接修改现有rootfs.img

首先挂载原始镜像:

mkdir -p /mnt/rootfs sudo mount -o loop output/Image/rootfs.img /mnt/rootfs

进入挂载点进行修改:

cd /mnt/rootfs sudo cp ~/custom-apps/* usr/local/bin/ sudo chmod +x usr/local/bin/*

修改完成后卸载并检查文件系统:

cd ~/firefly-linux-repack sudo umount /mnt/rootfs e2fsck -f output/Image/rootfs.img resize2fs -M output/Image/rootfs.img

3.2 从零构建全新rootfs

对于深度定制需求,可以使用debootstrap构建全新根文件系统:

sudo debootstrap --arch=arm64 focal ./custom-rootfs http://ports.ubuntu.com/ubuntu-ports

构建完成后,可以安装额外软件包:

sudo chroot ./custom-rootfs apt install -y python3 openssh-server

最后将目录打包为img文件:

dd if=/dev/zero of=new-rootfs.img bs=1M count=2048 mkfs.ext4 new-rootfs.img sudo mount -o loop new-rootfs.img /mnt/new-root sudo cp -a ./custom-rootfs/* /mnt/new-root/ sudo umount /mnt/new-root mv new-rootfs.img output/Image/rootfs.img

4. 重新打包完整镜像

完成根文件系统定制后,就可以重新打包完整镜像了。这里有个性能优化技巧:在pack.sh脚本开头添加以下代码可以显著加快打包速度:

#!/bin/bash export MKFS_OPTS="-T default -O ^metadata_csum,^64bit"

执行打包命令:

./pack.sh

打包完成后会生成new_update.img文件。建议在烧录前先验证镜像完整性:

file new_update.img # 应该显示"Android bootimg" ls -lh new_update.img # 检查文件大小是否合理

5. 烧录与测试

最后一步是将定制镜像烧录到开发板。我强烈推荐使用Rockchip官方工具RKDevTool而不是第三方工具,因为兼容性更好。

烧录步骤:

  1. 开发板进入Loader模式(按住Recovery键上电)
  2. 打开RKDevTool选择new_update.img
  3. 点击"升级"按钮
  4. 等待进度条完成(通常需要5-8分钟)

烧录完成后开发板会自动重启。第一次启动会比较慢,因为系统需要初始化新根文件系统。如果启动卡在登录界面,可以尝试通过串口查看内核日志:

dmesg | grep error

6. 常见问题排查

在实际操作中可能会遇到以下典型问题:

6.1 镜像烧录失败

  • 检查USB线连接是否稳定
  • 尝试更换USB端口
  • 确保开发板完全进入Loader模式(RKDevTool应显示发现一个LOADER设备)

6.2 系统无法启动

  • 通过串口查看启动日志
  • 检查rootfs.img是否包含完整的/sbin/init
  • 确认parameter.txt中的分区大小设置正确

6.3 性能问题

  • 调整parameter.txt中的rootfs分区大小
  • 检查rootfs是否使用了适合闪存的文件系统选项
  • 考虑添加zram交换分区

7. 高级定制技巧

对于需要深度定制的开发者,还可以尝试:

7.1 修改内核配置

cd kernel make ARCH=arm64 firefly_linux_defconfig make ARCH=arm64 menuconfig

7.2 添加预装应用

在rootfs的/etc/rc.local中添加启动脚本:

#!/bin/sh /path/to/your/app & exit 0

7.3 优化启动速度

分析启动耗时:

systemd-analyze systemd-analyze blame

禁用不必要的服务:

systemctl disable apt-daily.timer
http://www.jsqmd.com/news/566445/

相关文章:

  • Gluon框架核心API详解:从IPC通信到窗口控制的完整教程
  • Laravel DataTables 终极指南:快速构建强大的数据表格
  • 执医技能面授机构怎么选?避坑指南+实测参考,医考生直接抄作业 - 品牌测评鉴赏家
  • 2026年租车公司哪家最便宜:日租金对比、长租优惠与隐藏费用全解析 - 科技焦点
  • 沉浸式翻译扩展终极使用指南:5分钟掌握双语网页翻译技巧
  • 医学考研选课避坑!2026实测5大高口碑课程,适配所有医考生 - 品牌测评鉴赏家
  • 终极指南:Dubbox泛化调用如何让你无需接口直接调用远程服务
  • 5大核心技术彻底解决《环世界》卡顿难题:Performance-Fish全方位性能优化方案
  • 2026年防腐木木屋厂家推荐:上海木苑实业有限公司,木屋设计/建造/别墅全产业链服务 - 品牌推荐官
  • 2026年空白扇定制工厂推荐:夹江县艺传说文化用品有限公司,全品类扇艺产品一站式供应 - 品牌推荐官
  • JXPagingView与JXCategoryView完美整合:打造企业级分类导航解决方案的终极指南 [特殊字符]
  • 10个关键技巧:如何通过clean-code-javascript构建可维护的大型应用架构
  • Proteus电路仿真疑问解答:Phi-3-mini辅助分析数字电路与单片机设计
  • 2026年一体化污水处理设备厂家推荐:山东中泰环保装备全类型覆盖,适配多场景需求 - 品牌推荐官
  • 谐波传动齿轮减速器设计【10张cad图、设计说明书论文】
  • Qwen2.5-14B-Instruct部署案例:像素剧本圣殿在高校数字媒体实验室集群部署实践
  • 2026年红薯加工设备厂家推荐:诸城市太极机械,全流程红薯深加工成套设备一站式供应 - 品牌推荐官
  • 如何免费搭建家庭影院:115proxy-for-kodi插件实现电视直接播放云盘视频
  • 3步解决文档数字化的最大痛点:隐私、成本与效率的完美平衡
  • LIO-SAM运行报错‘process has died’?别慌,一个mv命令搞定libmetis.so路径问题
  • Pg波和Pn波是什么?
  • 8种UICollectionView动画效果终极对比:选择最适合你iOS项目的平滑过渡方案
  • 实战解析:从加密数据库到会话关联的钉钉取证技术路径
  • 揭秘CAN总线终端电阻120Ω的三大核心作用:从抗干扰到信号完整性
  • STEP3-VL-10B部署案例:汽车4S店售后工单截图→故障分类→维修建议生成
  • Laravel DataTables 终极指南:Eloquent、Query、Collection 三大数据引擎深度解析
  • 5分钟彻底修复Windows更新故障:Reset-Windows-Update-Tool终极指南
  • 如何用Mousecape打造专属光标?macOS个性化定制方案与高效工具指南
  • 如何构建清晰可维护的JavaScript代码结构:clean-code-javascript终极指南
  • 2026臭氧设备生产厂家推荐:山东瑞清臭氧设备有限公司,臭氧发生器/消毒/杀菌设备全系供应 - 品牌推荐官