4. RT-Thread BSP支持dist功能
根据RT-Thread文档说明,可以在BSP目录下运行scons -—dist
命令。该命令会在BSP目录下生成dist目录,该目录下包含了RT-Thread在内的当前BSP的依赖文件,可以拷贝到任意地方进行开发。
但是目前有一些BSP是不支持该功能的,下面由本文介绍一下如何让BSP支持dist功能。
4.1. 一、代码分析
提供dist功能的是位于rt-thread/tools
目录的mkdist.py
脚本文件,在文件的MkDist
函数中调用了来自BSP的dist_handle
函数。然后会将rt-thread的components
等目录拷贝到BSP下的dist目录。
这个dist_handle
由板级支持包在rtconfig.py
中定义。在运行scons -—dist
命令时,building.py
内的EndBuilding
函数在rtconfig
内寻找dist_handle
函数,并放入全局变量Env
中,点击查看。
4.2. 二、方案说明
所以BSP需要定义dist_handle
函数将BSP所需要用到的libraries
拷贝到dist目录。而一般BSP根目录下会有多个BSP,如nrf5x/nrf52832
、nrf5x/nrf52840
,这些BSP又需要引用同样的libraries
,所以很多开发板的支持包会在BSP根目录下创建一个tools/sdk_dist.py
脚本文件用来实现文件拷贝,再在rtconfig.py
内调用tools下面的脚本。
4.3. 三、操作示例
这里使用nrf5x/nrf52832
为例子介绍如何添加dist功能支持。
在nrf5x目录下创建toos/sdk_dist.py
文件:
import os
import sys
import shutil
cwd_path = os.getcwd()
sys.path.append(os.path.join(os.path.dirname(cwd_path), 'rt-thread', 'tools'))
# BSP dist function
def dist_do_building(BSP_ROOT, dist_dir):
from mkdist import bsp_copy_files
import rtconfig
library_dir = os.path.join(dist_dir, 'libraries')
print("=> copy nrf52 bsp libraries")
library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries')
bsp_copy_files(library_path, library_dir)
文件内dist_do_building
的方法内定义具体的libraries
复制操作,需要根据不同的开发板自己定义。
然后在nrf5x/nrf52832/rtconfig.py
内添加前面提到的dist_handle
方法:
def dist_handle(BSP_ROOT, dist_dir):
import sys
cwd_path = os.getcwd()
sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
from sdk_dist import dist_do_building
dist_do_building(BSP_ROOT, dist_dir)
这个方法会动态导入刚刚创建的toos/sdk_dist.py
脚本,并调用dist_do_building
函数进行拷贝。
完成这两处修改之后在开发板目录下运行scons -—dist
即可创建dist目录,将dist目录拷贝到任何地方,然后尝试进行编译,如果可以正常编译就说明该BSP已经成功支持dist功能。