Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
ota在线升级
qboot
基于RT-Thread 4.0快速打造bootloader
1.00
发布于 2020-07-29 17:56:45 浏览:8954
订阅该版
[tocm] # QBoot使用指导 —— 基于RT-Thread 4.0快速打造bootloader ## 1. QBoot组件简介 QBoot组件全称是Quick bootloader,是用于快速制作bootloader程序的专用组件,组件说明详见[组件readme](https://gitee.com/qiyongzhong0/rt-thread-qboot/blob/master/readme.md)。 本组件的设计初衷是帮助大家加快bootloader程序开发速度。组件基于RT-Thread 4.0设计,依赖Fal、crclib组件工作。目前版本V1.00,仅支持ARM系列芯片(作者也仅在STM32系列芯片上进行过测试),从下一版本V1.10将加入更多架构芯片的支持,希望大家提供帮助和支持。欢迎大家使用QBoot组件。 ## 2. QBoot使用示例 ### 2.1 创建基础工程 2.1.1 使用RT-Thread Studio基于芯片创建工程(本示例使用的芯片型号是STM32L4R5ZI) ![QBoot_sample_t01.jpg](/uploads/20200729/e60d861003bd9cbb09c5eef3826743c1.jpg) #### 2.1.2 修改board.h 修改Flash和Ram尺寸定义: ```c #define ROM_START ((uint32_t)0x08000000) #define ROM_SIZE (2048) #define ROM_END((uint32_t)(ROM_START + ROM_SIZE * 1024)) #define RAM_START (0x20000000) #define RAM_SIZE (640) #define RAM_END(RAM_START + RAM_SIZE * 1024) ``` 修改为 ```c #define ROM_START ((uint32_t)0x08000000) #define ROM_SIZE (2048 * 1024) #define ROM_END ((uint32_t)(ROM_START + ROM_SIZE)) #define RAM_START (0x20000000) #define RAM_SIZE (640 * 1024) #define RAM_END (RAM_START + RAM_SIZE) ``` 加入芯片flash驱动: ```c /*#define BSP_USING_ON_CHIP_FLASH*/ ``` 修改为 ```c #define BSP_USING_ON_CHIP_FLASH ``` 如果你使用了spi flash则须加入spi驱动,本示例未使用,在此不再赘述。 ### 2.1.3 修改main.c,删除main函数内的所有代码,仅保留`return RT_EOK;` ```c int main(void) { return RT_EOK; } ``` ### 2.1.4使用CubeMX生成芯片低层初始化代码,并保存到工程的`driver`文件夹下 project配置如下: ![QBoot_sample_t02.jpg](/uploads/20200729/4582048dea33b3bf1175cea1eabc7e0a.jpg) ##### code generator配置如下: ![QBoot_sample_t03.jpg](/uploads/20200729/b821ac3039464ede28ca6e7f54f2a03f.jpg) 刷新Studio工程,将`driver/CubeMX_Config/EWARM`目录排除在构建之外,将`driver/CubeMX_Config/src`目录下除`stm32l4xx_hal_msp.c`之外的其它文件排除在构建之外,将`driver/CubeMX_Config/inc`目录下除`main.h`之外的其它文件删除,完成后如下图所示: ![QBoot_sample_t04.jpg](/uploads/20200729/d360285d940ad1684984d05d6f99025d.jpg) ### 2.1.5 添加Fal组件并保存 ![QBoot_sample_t05.jpg](/uploads/20200729/fa59b4ae3a3fad2807e3d3f7a137fbd6.jpg) ### 2.1.6 在工程`driver`下创建文件夹`ports` ![QBoot_sample_t06.jpg](/uploads/20200729/0faf0c8b856fa80f6ae92ed034661ef9.jpg) ### 2.1.7 添加`fal_cfg.h`到文件夹`ports`,代码如下: ```c #ifndef _FAL_CFG_H_ #define _FAL_CFG_H_ #include
#include
#define RT_APP_PART_ADDR (0x08000000 + 128*1024)//app partition begin address #define NOR_FLASH_DEV_NAME FAL_USING_NOR_FLASH_DEV_NAME//"norflash0" /* ===================== Flash device Configuration ========================= */ extern const struct fal_flash_dev stm32_onchip_flash; //extern struct fal_flash_dev nor_flash0; /* flash device table */ #define FAL_FLASH_DEV_TABLE \ { \ &stm32_onchip_flash, \ /*&nor_flash0,*/ \ } /* ====================== Partition Configuration ========================== */ #ifdef FAL_PART_HAS_TABLE_CFG /* partition table */ #define FAL_PART_TABLE \ { \ /*{FAL_PART_MAGIC_WORD, "bl", "onchip_flash", 0, 128*1024, 0},*/ \ {FAL_PART_MAGIC_WORD, "app", "onchip_flash", 128*1024, 896*1024, 0}, \ {FAL_PART_MAGIC_WORD, "factory", "onchip_flash", 1024*1024, 512*1024, 0}, \ {FAL_PART_MAGIC_WORD, "download", "onchip_flash", 1536*1024, 512*1024, 0}, \ /*{FAL_PART_MAGIC_WORD, "filesys", NOR_FLASH_DEV_NAME, 0, 8*1024*1024, 0},*/ \ } #endif /* FAL_PART_HAS_TABLE_CFG */ #endif /* _FAL_CFG_H_ */ ``` ##### 注:使用不到的分区最好注释掉,可防止异常破坏数据。 ### 2.1.8 添加`drv_fal_init.c`到文件夹`ports`,代码如下: ```c #include
#ifdef PKG_USING_FAL #include
extern int fal_init(void); INIT_COMPONENT_EXPORT(fal_init); #endif ``` #### 2.1.9 打开构建配置,修改`Optimization`页的`Optimization level`项配置为`Optimize size(-Os)`,向编译配置的`includes`中加入目录`drivers/CubeMX_Config/Inc`和`drivers/ports` ![QBoot_sample_t07.jpg](/uploads/20200729/51ca5e6ecd641648953546fa3c7e8033.jpg) #### 2.1.10 刷新、保存和编译工程,如无错误,则创建基础工程完成。 ### 2.2 添加和配置QBoot组件 #### 2.2.1 添加QBoot组件,在软件包中心界面选系统,在QBoot组件项点添加,最后关闭软件包中心 ![QBoot_sample_t08.jpg](/uploads/20200729/eb7fe36b1f01089219841df3964a4875.jpg) #### 2.2.2 配置QBoot组件,在`RT-Thread Settings`界面,双点qboot组件,进入选项配置界面 ![QBoot_sample_t09.jpg](/uploads/20200729/c1e84f0ff0e5c24d0ed0296b209e32c5.jpg) 本示例使用了组件的全部功能,修改了`running status led pin`、`resume factory key pin`、`the level after key is pressed`三个配置项,其它使用默认配置。你可以依据需要对其它配置项进行修改。配置完成后保存工程,完成组件更新。 ![QBoot_sample_t10.jpg](/uploads/20200729/272fa781bdcd540429c3284c8c223bb7.jpg) 编译工程,代码flash使用92.97k,ram使用14.72,满足设计需求 ![QBoot_sample_t11.jpg](/uploads/20200729/e7341d794239ac3173eeb6abccff5334.jpg) ##### 注:在使用gzip情况下,zlib组件的版本v1.0.0对flash使用较多ram较少,而版本laster则对flash使用较少,ram使用较多,请根据不同需要选择使用合适的版本。 >_< 恭喜!你的bootloader制作完成了! ## 3. 帮助连接: - 不同需求,须裁剪QBoot功能模块,请参考[qboot各项配置资源占用情况说明](https://gitee.com/qiyongzhong0/rt-thread-qboot/blob/master/doc/QBoot%E5%90%84%E9%A1%B9%E9%85%8D%E7%BD%AE%E8%B5%84%E6%BA%90%E5%8D%A0%E7%94%A8%E6%83%85%E5%86%B5%E8%AF%B4%E6%98%8E.md) - [运行指示灯状态说明](https://gitee.com/qiyongzhong0/rt-thread-qboot/blob/master/doc/QBoot%E7%8A%B6%E6%80%81%E6%8C%87%E7%A4%BA%E7%81%AF%E8%AF%B4%E6%98%8E.md) - 升级包打包工具[下载地址](https://gitee.com/qiyongzhong0/rt-thread-qboot/blob/master/tools/QBootPackager_V1.01.zip) - [QBoot命令详述](https://gitee.com/qiyongzhong0/rt-thread-qboot/blob/master/doc/QBoot%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%BF%B0.md) ## 4. 联系方式 - 维护:qiyongzhong - 主页:https://gitee.com/qiyongzhong0/rt-thread-qboot - 邮箱:917768104@qq.com
18
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
红枫
这家伙很懒,什么也没写!
文章
6
回答
596
被采纳
133
关注TA
发私信
相关文章
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部