0
点赞
收藏
分享

微信扫一扫

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


问题描述

  • RT-Thread 的软件包,使用时,需要手动通过 ENV 工具 更新到 本地的 packages 目录,并且 packages 目录默认不参与 Git 工程管理,软件包多了,并且偶尔需要更改软件包本身的一些代码,这就造成了软件项目管理复杂的问题,比如 软件包的更改,无法与工程同步。
  • RT-Thread 在线软件包的管理,通过维护一个软件包的【索引】仓库,这个【索引】仓库并不包含各个软件包本身的代码,只是包含软件包的Kconfig 配置信息与 软件包的地址,可以通过ENV 工具在线拉取
  • RT-Thread 在线软件包 一般都是一个个独立的 Git 仓库,如果需要加人本地工程,可以通过 Git submodule 子仓库的方式加人仓库,当然如果修改 软件包,依旧带来管理的问题,比如Git submodule 需要更新好,这样 功能才能使用更新后的代码。
  • 问题:如何离线管理 软件包?如何改为 【RT-Thread offline packages —>】?

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

为何使用软件包

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

改为离线软件包

  • 离线软件包,就是工程本地的软件包。
  • 其实就是创建一个 本地的目录,把软件包放进去,然后配置功能的构建脚本,让软件包可以参与工程的构建管理。
  • 使用离线软件包的优势:离线功能拉取后,不需要 Git 子仓库的拉取,有些 软件包地址是 github的,大部分情况下,无法正确拉取。
  • 有时候需要按需更改软件包的代码,使用离线的软件包,直接与工程关联,就像本地工程代码一样管理。
  • 使用离线软件包的不足:因为离线软件包代码与工程在一起,所以工程的体积会较大,并且有些软件包可能默认不使用,依旧放在工程里面,占用空间。

改为离线软件包的方法

  • 如果是新的软件包,可以直接放在 工程制定的目录,这样配置好软件包的路径,让软件包配置使能后可以参与工程的构建即可。
  • 如果是RT-Thread 已经存在的在线软件包,可以通过 RT-Thread ENV 工具或者找到软件包的 仓库地址,下载下来,放在工程的指定目录下。注意RT-Thread 在线的软件包,需要把 软件包的 Kconfig 也获取到,并放入离线软件包目录下。

步骤一:创建RT-Thread 工程

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

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

RT-Thread 在线软件包改为本地软件包的方法_工程管理_03

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

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

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

RT-Thread 在线软件包改为本地软件包的方法_工程管理_07

离线软件包: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 目录下

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

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

工程构建修改

  • offline-packages\Kconfig 文件,离线软件包配置的入口文件,如果有更改的软件包,需要在此文件中添加软件包的 Kconfig 文件路径,包含软件包的Kconfig 文件

menu "RT-Thread offline packages"

source "$OFFLINE_PKGS_DIR/libmodbus/Kconfig"

endmenu

  • offline-packages\SConscript 文件,离线软件包 入口构建文件,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-packages\libmodbus,这里把 RT-Thread 在线软件包 libmodbus 下载到本地,移除 git 目录,并且把 libmodbus 的 Kconfig 文件 从 RT-Thread 在线的软件包索引 中找到,复制到 libmodbus 软件包目录下,也就是不依赖 RT-Thread online packages --->,不依赖 RT-Thread 在线的软件包索引。
  • 工程配置,需要引用离线软件包的工程,需要修改 工程下的 Kconfig 文件
  • 添加如下的内容,示例工程 stm32l476-st-nucleo\Kconfig

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

config OFFLINE_PKGS_DIR
    string
    default "../offline-packages"

source "$OFFLINE_PKGS_DIR/Kconfig"

  • 修改工程下的 SConstruct 构建文件,示例工程 stm32l476-st-nucleo\SConstruct

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

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\Kconfigstm32l476-st-nucleo\SConstruct 下的 RTT_ROOT 即可,也就是 RT-Thread 内核的目录

menuconfig

  • 开启离线软件包的 libmodbus,不需要开启 在线软件包的 libmodbus,工程目录下 的 packages 目录,不再需要 libmodbus
  • 可以通过 menuconfig 进行配置
  • RT-Thread 在线软件包改为本地软件包的方法_java_12

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

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

RT-Thread 在线软件包改为本地软件包的方法_工程管理_14

  • 以上,RT-Thread 内部离线软件包(本地软件包)成功的参与了工程的构建
  • 如果有多个 RT-Thread BSP(工程),可以共享本地的软件包,不需要每个工程下,都包含一份 软件包。

小结

  • 使用本地离线软件包,可以让工程管理起来更简单方便
  • 可以开发一些公共的组件、软件,通过本地离线的软件包的管理,实现多个工程的软件包共享,提高软件开发的效率。
  • 可以把一些 RT-Thread 在线的软件包,转为 本地离线软件包,这样管理起来方便,不再因为更新在线软件包,造成一些对软件包特殊更改的代码丢失。


举报

相关推荐

0 条评论