项目背景
Agile Upgrade: 用于快速构建 bootloader 的中间件。
example文件夹提供 PC 上的示例
特性
适配
RT-Thread官方固件打包工具 (图形化工具及命令行工具)使用纯 C 开发,不涉及任何硬件接口,可在任何形式的硬件上直接使用
加密、压缩支持如下:
AES256
fastlz
quicklz
原生适配 file 及 fal 操作接口
移植简单,实现自定义的后端只需适配几个操作接口
使用简单,几行代码即可实现固件升级
全过程日志输出
提供过程回调,可将过程及进度显示在自定义硬件上
基于 RT-Thread 4.1.0 版本
基于正点原子探索者开发板

代码地址:
https://github.com/loogg/agile_upgrade_mcu_demos
https://github.com/loogg/agile_upgrade
(请复制至外部浏览器打开)
目录结构

2、Bootloader
一般 Bootloader 实现的逻辑如下:

这种方式适合于简单的裸机程序或可控的 OS 程序(即所有外设硬件都可把控),在准备环境的时候将其全部关闭。
但对于一些复杂的或者 OS 中轮子已造好的程序,有一些因素不花时间研究无法把控,在准备环境时很可能就会遗漏一些未关闭导致出各种各样的问题。
这里提供一种 万能 方法:
- 利用芯片中的不受软件复位影响的可供用户使用的寄存器 (如 STM32 中的备份寄存器)。
- 在需要跳入 APP 运行时将该寄存器赋值然后软件复位。
- 在 OS 还没初始化时判断该寄存器值,如果需要跳转只需要简单的准备环境即可跳转。

该方法可以使 Bootloader 就作为一个 OS 应用程序开发,需要跳转的时候就操作一下寄存器并软件复位即可。
该仓库下所有的 Bootloader 例子均使用此方法。
以正点原子探索者开发板的 STM32F4 为例,将 system_stm32f4xx.c 文件的 SystemInit 函数修改:
1void boot_start_application(void);
2void SystemInit(void)
3{
4 boot_start_application();
5
6 ...
7}
boot_start_application 的

本文介绍了如何基于RT-Thread搭建Bootloader,强调了一种万能方法,适用于复杂程序或OS程序。文中通过对比RTOS与裸机、RT-Thread完整版与Nano,阐述了RTOS的优势,并给出了具体的工程实现和编译结果。文章提供了不同配置的Bootloader示例,如MinimalistBoot和FalBoot,支持不同压缩和加密方式。
最低0.47元/天 解锁文章
1967

被折叠的 条评论
为什么被折叠?



