问题描述
rt-thread 的软件包,使用时需要手动通过 env 工具 更新到 本地的 packages 目录,并且 packages 目录默认不参与 git 工程管理,软件包多了,偶尔需要更改软件包本身的一些代码,这就造成了软件项目管理复杂的问题,比如 软件包的更改,无法与工程同步。
rt-thread 在线软件包的管理,通过维护一个软件包的【索引】仓库,这个【索引】仓库并不包含各个软件包本身的代码,只是包含软件包的kconfig 配置信息与 软件包的地址,可以通过env 工具在线拉取
rt-thread 在线软件包 一般都是一个个独立的 git 仓库,如果需要加人本地工程,可以通过 git submodule 子仓库的方式加人仓库,当然如果修改 软件包,依旧带来管理的问题,比如 git submodule 需要更新完成后,这样工程才能使用更新后的软件包代码。
问题:如何离线管理 软件包?如何改为 【rt-thread offline packages —->】?也就是使用本地软件包
为何使用软件包
一些功能模块,如 modbus 组件,通过软件包的方式,可以直接拉取软件包实现自己想要的功能,这就不需要自己手动编写相应的组件代码,降低了开发的难度的同时,也提高开发的效率。
软件组件、模块的复用、重用的优势,快速开发。
改为离线软件包
离线软件包,其实就是工程本地的软件包。
其实就是创建一个 本地的目录,把软件包放进去,然后配置功能的构建脚本,让软件包可以参与工程的构建管理。
使用离线软件包的优势:离线功能拉取后,不需要 git submodule 子仓库的拉取,不用担心 pkgs --update 会覆盖软件包的代码修改,有些 软件包地址是 github的,大部分情况下,无法正常拉取。
有时候需要按需更改软件包的代码,使用离线的软件包,直接与工程关联,就像本地工程代码一样管理。
本地的软件包,可以多个 bsp 与 board 共用,利于维护使用。
使用离线软件包的不足:因为离线软件包代码与工程在一起,所以工程代码占用的体积会增大,并且有些软件包可能默认不配置使用,依旧放在工程里面,占用额外的空间。
改为离线软件包的方法
如果是新增的私有软件包,可以直接放在 工程指定的目录即可,这样配置好软件包的构建路径,让软件包配置使能后可以参与工程的构建即可。
如果是rt-thread 已经存在的在线公共软件包,可以通过 rt-thread env 工具或者直接找到软件包的 仓库地址,下载下来,放在工程的指定目录下。注意rt-thread 在线的软件包,需要把 软件包的 kconfig 也获取到,一起并放入离线软件包目录下。
步骤一:创建rt-thread 工程
这部分注意是拉取 rt-thread 源码仓库,整理目录,只保留自己需要的bsp。代码目录如下
离线软件包:offline-packages
这里拿 rt-thread libmodbus 在线软件包 转 离线(本地)软件包 作为示例
获取 rt-thread libmodbus 软件包,并放在工程的 offline-packages 目录下 offline-packageslibmodbus
可以在 env 工具下,如 env-windows-v1.3.5packagespackagesiotlibmodbus,找到 rt-thread 软件包索引,然后找到 libmodbus 软件包的 kconfig 配置文件,把这个文件 放在 offline-packageslibmodbus 目录下
工程构建修改
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
config offline_pkgs_dir
string
default ../offline-packages
source $offline_pkgs_dir/kconfig
修改工程下的 sconstruct 构建文件,示例工程 stm32l476-st-nucleosconstruct
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 进行配置
rt-thread env 下,通过 scons --target=mdk5 生成 keil mdk5 的工程
以上,rt-thread 内部离线软件包(本地软件包)成功的参与了工程的构建
如果有多个 rt-thread bsp(工程),可以共享本地的软件包,不需要每个工程下,都包含一份 软件包。
小结
使用本地离线软件包,可以让工程管理起来更简单方便
可以开发一些公共的组件、软件,通过本地离线的软件包的管理,实现多个工程的软件包共享,提高软件开发的效率。
可以把一些 rt-thread 在线的软件包,转为 本地离线软件包,这样管理起来方便,不再因为更新在线软件包,造成一些对软件包特殊更改的代码丢失。
阿里巴巴发布新一代安全架构,立足于切实解决安全问题
雷尼绍推出全新RMP400超小型的无线电测头
怎样实现汽车的智能化?
支持 PoE 的智能 LED 照明系统如何降低电源复杂性
什么是厚膜电阻器?厚膜电阻器用在哪里?厚膜电阻器有哪些特点?
RT-Thread在线软件包改为本地软件包的方法
耀途资本、科沃斯机器人对炬佑智能进行新一轮投资!
用TWH8751制作直流日光灯及电路
应用于200kW及以上光伏逆变系统的1000V-400A ANPC三电平模块
未来无人智能叉车的发展趋势将会是一个什么样子的
何帅“离岸孵化”工业无人机,将澳大利亚创新技术引入中国
谈谈数字验证场景的“边界”和“异常”
智能制造是否真的是提升中国航空发动机制造业的良方?
华为nova7系列新机正式入网该机搭载麒麟990芯片支持40W电荷泵快充
Sanyo新推出Eneloop lite超长寿命镍氢充电电池
选择晶振时需要考虑哪些问题
万能试验机,有哪些组成结构?夹具、传感器、测量仪
人工智能网站的优化功能到底优化了什么
采购6%鲁尔圆锥接头多功能测试仪需要注意什么?
雷曼光电LED尖端技术为“深圳智造”在全球市场增光添彩