0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread在线软件包改为本地软件包的方法

冬至子 来源:张世争 作者:张世争 2023-08-11 15:02 次阅读

问题描述

RT-Thread 的软件包,使用时需要手动通过 ENV 工具 更新到 本地的 packages 目录,并且 packages 目录默认不参与 Git 工程管理,软件包多了,偶尔需要更改软件包本身的一些代码,这就造成了软件项目管理复杂的问题,比如 软件包的更改,无法与工程同步。

RT-Thread 在线软件包的管理,通过维护一个软件包的【索引】仓库,这个【索引】仓库并不包含各个软件包本身的代码,只是包含软件包的Kconfig 配置信息与 软件包的地址,可以通过ENV 工具在线拉取

RT-Thread 在线软件包 一般都是一个个独立的 Git 仓库,如果需要加人本地工程,可以通过 Git submodule 子仓库的方式加人仓库,当然如果修改 软件包,依旧带来管理的问题,比如 Git submodule 需要更新完成后,这样工程才能使用更新后的软件包代码。

问题:如何离线管理 软件包?如何改为 【RT-Thread offline packages —->】?也就是使用本地软件包

1.jpg

为何使用软件包

一些功能模块,如 Modbus 组件,通过软件包的方式,可以直接拉取软件包实现自己想要的功能,这就不需要自己手动编写相应的组件代码,降低了开发的难度的同时,也提高开发的效率。

软件组件、模块的复用、重用的优势,快速开发。

改为离线软件包
离线软件包,其实就是工程本地的软件包。

其实就是创建一个 本地的目录,把软件包放进去,然后配置功能的构建脚本,让软件包可以参与工程的构建管理。

使用离线软件包的优势:离线功能拉取后,不需要 Git submodule 子仓库的拉取,不用担心 pkgs --update 会覆盖软件包的代码修改,有些 软件包地址是 github的,大部分情况下,无法正常拉取。

有时候需要按需更改软件包的代码,使用离线的软件包,直接与工程关联,就像本地工程代码一样管理。

本地的软件包,可以多个 bsp 与 board 共用,利于维护使用。

使用离线软件包的不足:因为离线软件包代码与工程在一起,所以工程代码占用的体积会增大,并且有些软件包可能默认不配置使用,依旧放在工程里面,占用额外的空间。

改为离线软件包的方法
如果是新增的私有软件包,可以直接放在 工程指定的目录即可,这样配置好软件包的构建路径,让软件包配置使能后可以参与工程的构建即可。

如果是RT-Thread 已经存在的在线公共软件包,可以通过 RT-Thread ENV 工具或者直接找到软件包的 仓库地址,下载下来,放在工程的指定目录下。注意RT-Thread 在线的软件包,需要把 软件包的 Kconfig 也获取到,一起并放入离线软件包目录下。

步骤一:创建RT-Thread 工程

这部分注意是拉取 RT-Thread 源码仓库,整理目录,只保留自己需要的BSP。代码目录如下

1.jpg

2.jpg

3.jpg

1.jpg

离线软件包:offline-packages
这里拿 RT-Thread libmodbus 在线软件包 转 离线(本地)软件包 作为示例

获取 RT-Thread libmodbus 软件包,并放在工程的 offline-packages 目录下 offline-packageslibmodbus

可以在 ENV 工具下,如 env-windows-v1.3.5packagespackagesiotlibmodbus,找到 RT-Thread 软件包索引,然后找到 libmodbus 软件包的 Kconfig 配置文件,把这个文件 放在 offline-packageslibmodbus 目录下

1.jpg

工程构建修改
offline-packagesKconfig 文件,离线软件包配置的入口文件,如果有更改的软件包,需要在此文件中添加软件包的 Kconfig 文件路径,包含软件包的Kconfig 文件
menu "RT-Thread offline packages"
source "$OFFLINE_PKGS_DIR/libmodbus/Kconfig"
endmenu
offline-packagesSConscript 文件,离线软件包 入口构建文件,offline-packages 目录下的各个软件包,根据配置使能,依次参与工程的构建
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-packageslibmodbus,这里把 RT-Thread 在线软件包 libmodbus 下载到本地,移除 git 目录,并且把 libmodbus 的 Kconfig 文件 从 RT-Thread 在线的软件包索引 中找到,复制到 libmodbus 软件包目录下,也就是不依赖 RT-Thread online packages --->,不依赖 RT-Thread 在线的软件包索引。

工程配置,需要引用离线软件包的工程,需要修改 工程下的 Kconfig 文件

添加如下的内容,示例工程 stm32l476-st-nucleoKconfig

1.jpg

config OFFLINE_PKGS_DIR
string
default "../offline-packages"
source "$OFFLINE_PKGS_DIR/Kconfig"
修改工程下的 SConstruct 构建文件,示例工程 stm32l476-st-nucleoSConstruct

1.jpg

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-nucleoKconfig 与 stm32l476-st-nucleoSConstruct 下的 RTT_ROOT 即可,也就是 RT-Thread 内核的目录

menuconfig
开启离线软件包的 libmodbus,不需要开启 在线软件包的 libmodbus,工程目录下 的 packages 目录,不再需要 libmodbus。

可以通过 menuconfig 进行配置

1.jpg

2.jpg

RT-Thread ENV 下,通过 scons --target=mdk5 生成 Keil MDK5 的工程

1.jpg

2.jpg

3.jpg

以上,RT-Thread 内部离线软件包(本地软件包)成功的参与了工程的构建

如果有多个 RT-Thread BSP(工程),可以共享本地的软件包,不需要每个工程下,都包含一份 软件包。

小结
使用本地离线软件包,可以让工程管理起来更简单方便

可以开发一些公共的组件、软件,通过本地离线的软件包的管理,实现多个工程的软件包共享,提高软件开发的效率。

可以把一些 RT-Thread 在线的软件包,转为 本地离线软件包,这样管理起来方便,不再因为更新在线软件包,造成一些对软件包特殊更改的代码丢失。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38909
  • STM32L476
    +关注

    关注

    0

    文章

    7

    浏览量

    3710
  • ModBus通信
    +关注

    关注

    0

    文章

    31

    浏览量

    2481
  • Nucleo
    +关注

    关注

    0

    文章

    26

    浏览量

    17259
收藏 人收藏

    评论

    相关推荐

    RT-Thread Studio添加软件包报错怎么解决?

    RT-Thread Studio添加软件包报错ImportError: No module named psutil
    发表于 03-01 08:41

    基于CubeMX的RT-thread Nano可以添加microros这样的软件包吗?

    最近使用rt-thread配置一个ROS2,但是是用CubeMX联合Clion做的,CubeMX使用的是RT-thread nano, 请问这个环境可以添加像microros这样的软件包
    发表于 03-01 06:00

    送给工程师路上正迷茫的你:RT-Thread 软件包构建指南

    对应的软件包平台,软件包生态对于一门语言的选择至关重要,本次讲座将会讲述如何快速构建一个可通用的软件包,介绍RT-Thread可兼容的标准, 如posix标准;重点讲解如何移植开源仓库
    发表于 09-27 15:53

    RT-Thread OneNET软件包的功能特点是什么?

    有哪位大神能否介绍一下OneNET 平台 。 RT-Thread OneNET 软件包功能特点是什么?
    发表于 04-02 06:39

    介绍RT-Thread软件包

    学习要点介绍 RT-Thread软件包;简介 nRF24L01 软件包的使用,讲解如何使用此软件包将数据正确发送和接收;学习线程间的通信,IPC 的使用,即获取温度的线程 A 与无
    发表于 07-27 06:07

    软件包怎么使用

    RT-thread有很多实用的软件包,包含网络、IOT、外设、系统等多个方面,对于项目的快速开发或者评估来说是非常方便的。但不是所有软件包都是友好的,因为有些软件包是第三方贡献的,
    发表于 01-21 07:53

    使用menuconfig配置基于RT-Thread的NimBLE软件包

    本地。这也就涉及到 RT-Thread 提供的软件包管理功能,搭配 menuconfig 配置功能,软件包代码的下载、更新和删除 都可以使用 pkgs --update 命令。有时还
    发表于 06-27 11:18

    使用L610模块+RT-Thread系统连接onenet软件包设计实现

    stm32f411ce最小系统板上运行;  2.在RT-Thread上添加支持L610模块的AT设备软件包;  3.在RT-Thread上添加支持onenet云的软件包;  4.使st
    发表于 09-01 15:42

    RT-Thread Studio无法加入Persimmon软件包是何原因

    最近发现RT-Thread Studio更新到V2.1.0后,配置项中加入persimmon软件包也正常下载了persimmon,但项目工作目录中无法加入Persimmon软件包、也无法编译。
    发表于 10-17 14:25

    RT-THREAD studio 2.0.0不能添加软件包能帮忙看看是什么问题吗

    1.电脑联想小新15,intel平台2.windows10专业版64位系统3.问题描述:RT-THREAD studio 2.0.0不能添加软件包4.用两台联想笔记本电脑对比过,一台能够正常添加
    发表于 11-30 10:15

    rt-thread studio里添加软件包失败怎么解决?

    rt-thread studio里使用软件包功能,添加软件包之后,点击保存,在项目栏测没有软件包的添加
    发表于 02-13 14:14

    使用RT-Thread Studio开发CH32V307实现按键软件包使用

    使用上篇帖子创建的工程,使用RT-Thread Studio软件包添加工具,快速实现MultiButton的使用在RT-Thread Studio工程内打开RT-Thread Sett
    发表于 04-15 21:16

    UIoT RT-Thread软件包介绍

    UIoT RT-Thread 软件包实现了 IoT 设备与 UCloud UIoT Core 物联网通信云平台连接,包含设备注册、MQTT、设备影子、物模型、OTA、文件上传等功能,开发者进行灵活裁剪。
    发表于 09-26 07:22

    RT-Thread软件包定义和使用

    RT-Thread软件包是运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件 。RT-Thread 同时提供了开放
    的头像 发表于 05-21 11:29 9674次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>软件包</b>定义和使用

    RT-Thread中mymqtt软件包的使用方法

    在上一篇文章 RT-Thread中Lan8720和lwip协议栈的使用的工程基础上添加mymqtt软件包。 使能mqtt example和mqtt test,保存,等待下载更新软件包
    的头像 发表于 10-13 10:44 529次阅读
    <b class='flag-5'>RT-Thread</b>中mymqtt<b class='flag-5'>软件包</b>的使用<b class='flag-5'>方法</b>