Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
packages_软件包
RT-Thread 在线软件包改为本地软件包的方法
发布于 2023-05-01 10:32:21 浏览:1317
订阅该版
[tocm] ## 问题描述 - RT-Thread 的软件包,使用时需要手动通过 ENV 工具 更新到 本地的 `packages` 目录,并且 packages 目录默认不参与 `Git` 工程管理,软件包多了,偶尔需要更改软件包本身的一些代码,这就造成了软件项目管理复杂的问题,比如 软件包的更改,无法与工程同步。 - RT-Thread 在线软件包的管理,通过维护一个软件包的【索引】仓库,这个【索引】仓库并不包含各个软件包本身的代码,只是包含软件包的`Kconfig` 配置信息与 软件包的`地址`,可以通过ENV 工具在线拉取 - RT-Thread 在线软件包 一般都是一个个独立的 `Git` 仓库,如果需要加人本地工程,可以通过 `Git submodule` 子仓库的方式加人仓库,当然如果修改 软件包,依旧带来管理的问题,比如 `Git submodule` 需要更新完成后,这样工程才能使用更新后的软件包代码。 - 问题:如何离线管理 软件包?如何改为 【RT-Thread offline packages --->】?也就是使用本地软件包 ![2023-04-30_195756.png](https://oss-club.rt-thread.org/uploads/20230501/cbd56adbf00e149bb4a7544279a3d464.png) ## 为何使用软件包 - 一些功能模块,如 Modbus 组件,通过软件包的方式,可以直接拉取软件包实现自己想要的功能,这就不需要自己手动编写相应的组件代码,降低了开发的难度的同时,也提高开发的效率。 - 软件组件、模块的复用、重用的优势,快速开发。 ## 改为离线软件包 - 离线软件包,其实就是工程本地的软件包。 - 其实就是创建一个 本地的目录,把软件包放进去,然后配置功能的构建脚本,让软件包可以参与工程的构建管理。 - 使用离线软件包的优势:离线功能拉取后,不需要 `Git submodule` 子仓库的拉取,不用担心 `pkgs --update` 会覆盖软件包的代码修改,有些 软件包地址是 `github`的,大部分情况下,无法正常拉取。 - 有时候需要按需更改软件包的代码,使用离线的软件包,直接与工程关联,就像本地工程代码一样管理。 - 本地的软件包,可以多个 bsp 与 board 共用,利于维护使用。 - 使用离线软件包的不足:因为离线软件包代码与工程在一起,所以工程代码占用的体积会增大,并且有些软件包可能默认不配置使用,依旧放在工程里面,占用额外的空间。 ## 改为离线软件包的方法 - 如果是新增的私有软件包,可以直接放在 工程指定的目录即可,这样配置好软件包的构建路径,让软件包配置使能后可以参与工程的构建即可。 - 如果是RT-Thread 已经存在的在线公共软件包,可以通过 `RT-Thread ENV` 工具或者直接找到软件包的 仓库地址,下载下来,放在工程的指定目录下。注意RT-Thread 在线的软件包,需要把 软件包的 `Kconfig` 也获取到,一起并放入离线软件包目录下。 ## 步骤一:创建RT-Thread 工程 - 这部分注意是拉取 RT-Thread 源码仓库,整理目录,只保留自己需要的BSP。代码目录如下 ![2023-04-30_202133.png](https://oss-club.rt-thread.org/uploads/20230501/a606ef0a652fff8ca5faddf49f6a14c4.png.webp) ![2023-04-30_202316.png](https://oss-club.rt-thread.org/uploads/20230501/081bd8d9d6cec23111577124efe0d3bb.png) ![2023-04-30_202325.png](https://oss-club.rt-thread.org/uploads/20230501/18f83950904e50d253eaba93b4ffc619.png) ![2023-04-30_202350.png](https://oss-club.rt-thread.org/uploads/20230501/ae5f1fb9268cdabcbf7a4472ea480c21.png) ![2023-04-30_202409.png](https://oss-club.rt-thread.org/uploads/20230501/c313d11fc08e94747aaec28ef79c2f0b.png) ![2023-04-30_202904.png](https://oss-club.rt-thread.org/uploads/20230501/7fe1beb494e0602f586bc9a6bb510e23.png) ## 离线软件包:offline-packages - 这里拿 RT-Thread `libmodbus` 在线软件包 转 离线(本地)软件包 作为示例 - 获取 RT-Thread `libmodbus` 软件包,并放在工程的 `offline-packages` 目录下 `offline-packages\libmodbus` - 可以在 ENV 工具下,如 `env-windows-v1.3.5\packages\packages\iot\libmodbus`,找到 RT-Thread 软件包索引,然后找到 `libmodbus` 软件包的 `Kconfig` 配置文件,把这个文件 放在 `offline-packages\libmodbus` 目录下 ![2023-04-30_203025.png](https://oss-club.rt-thread.org/uploads/20230501/90957ceed5afdc839b3f7872c24aaa93.png) ## 工程构建修改 - `offline-packages\Kconfig` 文件,离线软件包配置的入口文件,如果有更改的软件包,需要在此文件中添加软件包的 Kconfig 文件路径,包含软件包的Kconfig 文件 ```c menu "RT-Thread offline packages" source "$OFFLINE_PKGS_DIR/libmodbus/Kconfig" endmenu ``` - `offline-packages\SConscript` 文件,离线软件包 入口构建文件,`offline-packages` 目录下的各个软件包,根据配置使能,依次参与工程的构建 ```c import os from building import * objs = [] cwd = GetCurrentDir() list = os.listdir(cwd) for item in list: if os.path.isfile(os.path.join(cwd, item, 'SConscript')): objs = objs + SConscript(os.path.join(item, 'SConscript')) Return('objs') ``` - `offline-packages\libmodbus`,这里把 RT-Thread 在线软件包 `libmodbus` 下载到本地,移除 `git` 目录,并且把 `libmodbus` 的 Kconfig 文件 从 RT-Thread 在线的软件包索引 中找到,复制到 `libmodbus` 软件包目录下,也就是不依赖 `RT-Thread online packages --->`,不依赖 RT-Thread 在线的软件包索引。 - 工程配置,需要引用离线软件包的工程,需要修改 工程下的 Kconfig 文件 - 添加如下的内容,示例工程 `stm32l476-st-nucleo\Kconfig` ![2023-04-30_203153.png](https://oss-club.rt-thread.org/uploads/20230501/338c7ddf48579bdcefe680f894ed1e6b.png) ```c config OFFLINE_PKGS_DIR string default "../offline-packages" source "$OFFLINE_PKGS_DIR/Kconfig" ``` - 修改工程下的 SConstruct 构建文件,示例工程 `stm32l476-st-nucleo\SConstruct` ![2023-04-30_203210.png](https://oss-club.rt-thread.org/uploads/20230501/fed3897c98c1e46b2654ece2d6674a4d.png) ```c if os.path.exists(SDK_ROOT + '/offline-packages'): offline_pkgs_path_prefix = SDK_ROOT + '/offline-packages' else: offline_pkgs_path_prefix = os.path.dirname(SDK_ROOT) + '/offline-packages' # include offline packages objs.extend(SConscript(os.path.join(offline_pkgs_path_prefix, 'SConscript'))) ``` ## 示例工程的构建路径修改 - 由于当前的示例功能,与 RT-Thread BSP 工程的目录不一样,需要修改构建路径,才能正常的构建与编译。 - 默认只需要修改 `stm32l476-st-nucleo\Kconfig` 与 `stm32l476-st-nucleo\SConstruct` 下的 `RTT_ROOT` 即可,也就是 RT-Thread 内核的目录 ## menuconfig - 开启离线软件包的 `libmodbus`,不需要开启 在线软件包的 `libmodbus`,工程目录下 的 `packages` 目录,不再需要 `libmodbus`。 - 可以通过 menuconfig 进行配置 ![2023-04-30_203840.png](https://oss-club.rt-thread.org/uploads/20230501/d3fc2da71b4856baaed98c8b62dc2b8c.png) ![2023-04-30_204120.png](https://oss-club.rt-thread.org/uploads/20230501/bb911063b6017312acce42f88a5e28f6.png) - RT-Thread ENV 下,通过 `scons --target=mdk5` 生成 Keil MDK5 的工程 ![2023-04-30_204808.png](https://oss-club.rt-thread.org/uploads/20230501/117d20f7220c2b8a815ab0ee6e88ed69.png) ![2023-04-30_204814.png](https://oss-club.rt-thread.org/uploads/20230501/89d594c5e745cd7f580322e84b043f55.png) ![2023-04-30_204940.png](https://oss-club.rt-thread.org/uploads/20230501/a5a1a12406d3b47b5d5759535389e7f7.png) - 以上,RT-Thread 内部离线软件包(本地软件包)成功的参与了工程的构建 - 如果有多个 RT-Thread BSP(工程),可以共享本地的软件包,不需要每个工程下,都包含一份 软件包。 ## 小结 - 使用本地离线软件包,可以让工程管理起来更简单方便 - 可以开发一些公共的组件、软件,通过本地离线的软件包的管理,实现多个工程的软件包共享,提高软件开发的效率。 - 可以把一些 RT-Thread 在线的软件包,转为 本地离线软件包,这样管理起来方便,不再因为更新在线软件包,造成一些对软件包特殊更改的代码丢失。
13
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
张世争
学以致用
文章
131
回答
805
被采纳
174
关注TA
发私信
相关文章
1
更新软件包 没有自动下载软件包
2
点更新软件包后, 软件包并没有被下载
3
RTT加载软件包的机制是什么
4
mqtt软件包,不支持直接关闭?
5
sr04软件包排他性问题
6
有没有大神移植一个HX711称重芯片模块的软件包
7
【建议】软件包分类增加“算法”类
8
软件包ota_downloader的http_ota解析导致内存释放断言
9
RT-Thread Studio软件包
10
rc522 软件包 问题
推荐文章
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部