正点原子IMX6ULL移植SWUpdate实现远程OTA升级
本文主要介绍使用buildroot创建根文件系统后如何只添加必要的库文件实现移植SWUpdateunbuntu版本22.04编译器版本和路径/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi主要流程原型开发SD卡 NFS利用 SD 卡启动板子并挂载 NFS 网络文件系统在此环境下高效编写、调试好后续升级所需的目标程序与业务逻辑。组件使能与编译在 Buildroot 中配置并勾选 SWUpdate 组件进行固件的整体编译。动态库瘦身与本地验证针对 Buildroot 生成的根文件系统进行“瘦身”处理精准提取并添加 SWUpdate 运行所依赖的必要库。在板载终端下进行命令功能测试确保无依赖缺失。首版烧录与远程 OTA 闭环功能完善后首版固件通过有线方式如 TF 卡或烧录工具本地下载到目标板上此后即可完全摆脱有线束缚直接通过网络实现远程 OTA 固件升级。一、buildroot编译SWUpdate在我的之前的配置之上追加新配置老配置参考正点原子im6xull开发板用buildroot配置根文件系统教程_bulidroot-CSDN博客1返回到Target packages然后保存设置然后保存设置开始编译完成后把必要的库文件移到之前的nfs上本次编译出的根文件系统放到桌面上解压后续的库都从里面找。二、移植SWUpdate把nfs2里面的必要库移到nfsnfs2位置/home/lyr/桌面/nfs2nfs位置/home/lyr/linux/nfs第一步移植主二进制程序与 U-Boot 切换工具SWUpdate 的 A/B 分区切换依赖于 Linux 底层对 U-Boot 环境变量的修改。因此除了主程序外必须一同移植环境变量读写工具。拷贝 SWUpdate 主程序Bashsudo cp -a /home/lyr/桌面/nfs2/usr/bin/swupdate* /home/lyr/linux/nfs/usr/bin/拷贝环境变量读取工具Bashsudo cp -a /home/lyr/桌面/nfs2/usr/bin/fw_printenv /home/lyr/linux/nfs/usr/bin/创建环境变量设置软链接 在 Linux 中fw_setenv通常是fw_printenv的软链接程序通过判断自身被调用的名称来切换读/写功能Bashsudo ln -sf fw_printenv /home/lyr/linux/nfs/usr/bin/fw_setenv第二步移植核心动态链接库依赖库补全利用cp -d参数可以强制保留动态库的软链接属性比如libz.so - libz.so.1.2.11避免软链接断裂导致系统找不到库文件。在宿主机终端依次执行以下命令移植配置解析库Bashsudo cp -d /home/lyr/桌面/nfs2/usr/lib/libconfig.so* /home/lyr/linux/nfs/usr/lib/移植 U-Boot 环境变量操控库Bashsudo cp -d /home/lyr/桌面/nfs2/usr/lib/libubootenv.so* /home/lyr/linux/nfs/usr/lib/移植 Zlib 压缩库Bashsudo cp -d /home/lyr/桌面/nfs2/usr/lib/libz.so* /home/lyr/linux/nfs/usr/lib/第三步移植网页前端静态资源SWUpdate 的内嵌 Mongoose 网络服务器启动时需要读取本地的 HTML/JS 页面代码。若不移植此目录访问板子的8080端口时会报404 Not Found错误。创建目标资源目录Bashsudo mkdir -p /home/lyr/linux/nfs/var/完整拷贝网页资产Bashsudo cp -a /home/lyr/桌面/nfs2/var/www /home/lyr/linux/nfs/var/第四步移植并配置关键配置文件拷贝 SWUpdate 基础配置文件若没有则忽略Bashsudo cp -a /home/lyr/桌面/nfs2/etc/swupdate.cfg /home/lyr/linux/nfs/etc/ 2/dev/null || true配置 U-Boot 闪存映射表关键fw_printenv工具在运行时必须读取/etc/fw_env.config来获知环境变量在 eMMC 芯片中的确切物理位置。使用nano或vim编辑目标文件Bashsudo nano /home/lyr/linux/nfs/etc/fw_env.config清空原内容针对正点原子 i.MX6ULL eMMC 开发板的硬件参数写入以下单行核心配置Plaintext# 物理设备路径 eMMC中的偏移量(384KB) 环境变量大小(8KB) /dev/mmcblk0 0xC0000 0x2000第五步移植验证板端测试完成上述物理文件搬移后让目标板通过 NFS 开机在板载终端执行以下两条命令进行闭环验证测试环境变量读写输入fw_printenv若能正常打印出 U-Boot 环境变量说明libubootenv和fw_env.config配置成功。测试主程序依赖输入swupdate -v若能输出版本号及受支持的handlers列表且未报cannot open shared object file错误说明动态库移植成功。

相关新闻