問題描述
RT-Thread 的軟件包,使用時(shí)需要手動(dòng)通過 ENV 工具 更新到 本地的 packages 目錄,并且 packages 目錄默認(rèn)不參與 Git 工程管理,軟件包多了,偶爾需要更改軟件包本身的一些代碼,這就造成了軟件項(xiàng)目管理復(fù)雜的問題,比如 軟件包的更改,無法與工程同步。
RT-Thread 在線軟件包的管理,通過維護(hù)一個(gè)軟件包的【索引】倉庫,這個(gè)【索引】倉庫并不包含各個(gè)軟件包本身的代碼,只是包含軟件包的Kconfig 配置信息與 軟件包的地址,可以通過ENV 工具在線拉取
RT-Thread 在線軟件包 一般都是一個(gè)個(gè)獨(dú)立的 Git 倉庫,如果需要加人本地工程,可以通過 Git submodule 子倉庫的方式加人倉庫,當(dāng)然如果修改 軟件包,依舊帶來管理的問題,比如 Git submodule 需要更新完成后,這樣工程才能使用更新后的軟件包代碼。
問題:如何離線管理 軟件包?如何改為 【RT-Thread offline packages —->】?也就是使用本地軟件包
為何使用軟件包
一些功能模塊,如 Modbus 組件,通過軟件包的方式,可以直接拉取軟件包實(shí)現(xiàn)自己想要的功能,這就不需要自己手動(dòng)編寫相應(yīng)的組件代碼,降低了開發(fā)的難度的同時(shí),也提高開發(fā)的效率。
軟件組件、模塊的復(fù)用、重用的優(yōu)勢(shì),快速開發(fā)。
改為離線軟件包
離線軟件包,其實(shí)就是工程本地的軟件包。
其實(shí)就是創(chuàng)建一個(gè) 本地的目錄,把軟件包放進(jìn)去,然后配置功能的構(gòu)建腳本,讓軟件包可以參與工程的構(gòu)建管理。
使用離線軟件包的優(yōu)勢(shì):離線功能拉取后,不需要 Git submodule 子倉庫的拉取,不用擔(dān)心 pkgs --update 會(huì)覆蓋軟件包的代碼修改,有些 軟件包地址是 github的,大部分情況下,無法正常拉取。
有時(shí)候需要按需更改軟件包的代碼,使用離線的軟件包,直接與工程關(guān)聯(lián),就像本地工程代碼一樣管理。
本地的軟件包,可以多個(gè) bsp 與 board 共用,利于維護(hù)使用。
使用離線軟件包的不足:因?yàn)殡x線軟件包代碼與工程在一起,所以工程代碼占用的體積會(huì)增大,并且有些軟件包可能默認(rèn)不配置使用,依舊放在工程里面,占用額外的空間。
改為離線軟件包的方法
如果是新增的私有軟件包,可以直接放在 工程指定的目錄即可,這樣配置好軟件包的構(gòu)建路徑,讓軟件包配置使能后可以參與工程的構(gòu)建即可。
如果是RT-Thread 已經(jīng)存在的在線公共軟件包,可以通過 RT-Thread ENV 工具或者直接找到軟件包的 倉庫地址,下載下來,放在工程的指定目錄下。注意RT-Thread 在線的軟件包,需要把 軟件包的 Kconfig 也獲取到,一起并放入離線軟件包目錄下。
步驟一:創(chuàng)建RT-Thread 工程
這部分注意是拉取 RT-Thread 源碼倉庫,整理目錄,只保留自己需要的BSP。代碼目錄如下
離線軟件包:offline-packages
這里拿 RT-Thread libmodbus 在線軟件包 轉(zhuǎn) 離線(本地)軟件包 作為示例
獲取 RT-Thread libmodbus 軟件包,并放在工程的 offline-packages 目錄下 offline-packageslibmodbus
可以在 ENV 工具下,如 env-windows-v1.3.5packagespackagesiotlibmodbus,找到 RT-Thread 軟件包索引,然后找到 libmodbus 軟件包的 Kconfig 配置文件,把這個(gè)文件 放在 offline-packageslibmodbus 目錄下
工程構(gòu)建修改
offline-packagesKconfig 文件,離線軟件包配置的入口文件,如果有更改的軟件包,需要在此文件中添加軟件包的 Kconfig 文件路徑,包含軟件包的Kconfig 文件
menu "RT-Thread offline packages"
source "$OFFLINE_PKGS_DIR/libmodbus/Kconfig"
endmenu
offline-packagesSConscript 文件,離線軟件包 入口構(gòu)建文件,offline-packages 目錄下的各個(gè)軟件包,根據(jù)配置使能,依次參與工程的構(gòu)建
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 在線的軟件包索引 中找到,復(fù)制到 libmodbus 軟件包目錄下,也就是不依賴 RT-Thread online packages --->,不依賴 RT-Thread 在線的軟件包索引。
工程配置,需要引用離線軟件包的工程,需要修改 工程下的 Kconfig 文件
添加如下的內(nèi)容,示例工程 stm32l476-st-nucleoKconfig
config OFFLINE_PKGS_DIR
string
default "../offline-packages"
source "$OFFLINE_PKGS_DIR/Kconfig"
修改工程下的 SConstruct 構(gòu)建文件,示例工程 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')))
示例工程的構(gòu)建路徑修改
由于當(dāng)前的示例功能,與 RT-Thread BSP 工程的目錄不一樣,需要修改構(gòu)建路徑,才能正常的構(gòu)建與編譯。
默認(rèn)只需要修改 stm32l476-st-nucleoKconfig 與 stm32l476-st-nucleoSConstruct 下的 RTT_ROOT 即可,也就是 RT-Thread 內(nèi)核的目錄
menuconfig
開啟離線軟件包的 libmodbus,不需要開啟 在線軟件包的 libmodbus,工程目錄下 的 packages 目錄,不再需要 libmodbus。
可以通過 menuconfig 進(jìn)行配置
RT-Thread ENV 下,通過 scons --target=mdk5 生成 Keil MDK5 的工程
以上,RT-Thread 內(nèi)部離線軟件包(本地軟件包)成功的參與了工程的構(gòu)建
如果有多個(gè) RT-Thread BSP(工程),可以共享本地的軟件包,不需要每個(gè)工程下,都包含一份 軟件包。
小結(jié)
使用本地離線軟件包,可以讓工程管理起來更簡(jiǎn)單方便
可以開發(fā)一些公共的組件、軟件,通過本地離線的軟件包的管理,實(shí)現(xiàn)多個(gè)工程的軟件包共享,提高軟件開發(fā)的效率。
可以把一些 RT-Thread 在線的軟件包,轉(zhuǎn)為 本地離線軟件包,這樣管理起來方便,不再因?yàn)楦略诰€軟件包,造成一些對(duì)軟件包特殊更改的代碼丟失。
-
RT-Thread
+關(guān)注
關(guān)注
31文章
1305瀏覽量
40386 -
STM32L476
+關(guān)注
關(guān)注
0文章
7瀏覽量
3811 -
ModBus通信
+關(guān)注
關(guān)注
0文章
32瀏覽量
2624 -
Nucleo
+關(guān)注
關(guān)注
0文章
27瀏覽量
17490
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論