Env是RT-Thread推出的开发辅助工具,针对基于RT-Thread操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。
其内置的menuconfig提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。
scons是RT-Thread使用的编译构建工具,可以使用scons相关命令编译RT-Thread。
Env中携带了Python&scons环境,只需要在目录中运行scons命令即可使用默认的ARM_GCC工具链编译bsp。
如果使用mdk/iar进行项目开发,可以直接使用BSP中的工程文件或者使用以下命令中的其中一种,重新生成工程,再进行编译下载。
scons --target=iar
scons --target=mdk4
scons --target=mdk5
menuconfig是一种图形化配置工具,RT-Thread使用其对整个系统进行配置、裁剪。
进入 BSP 根目录,输入 menuconfig 命令后即可打开其界面。 menuconfig 常用快捷键如图所示:
C语言项目的裁剪配置本质上是通过条件编译和宏的展开来实现的。
RT-Thread借助KConfig这套机制更方便的实现了这一功能。
当前以Windows下Env工具中的使用为例,简述Kconfig在RT-Thread的工作机制。
Kconfig机制包括了Kconfig文件和配置UI界面(如menuconfig,pyconfig等)。
# .config片段
CONFIG_RT_USING_TIMER_SOFT=y
CONFIG_RT_TIMER_THREAD_PRIO=4
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
CONFIG_RT_DEBUG=y
//相对应的rtconfig.h片段
#define RT_USING_TIMER_SOFT
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 512
#define RT_DEBUG
Kconfig文件在源码中呈现树形结构,需要在工程的根目录下存在一份顶级Kconfig文件,顶级Kconfig文件在文件中通过source语句显示地调用各子目录下的Kconfig文件。
Env在根目录下执行menuconfig命令后会递归解析各级Kconfig文件,然后提供如下配置界面,完成相应的配置后并保存,根目录下会存在一份.config文件保存当前选择的配置项,并将.config文件转为RT-Thread的系统配置文件rtconfig.h。
Kconfig源于Linux内核的配置构建系统。
以下为RT-Thread系统中config语句的示例
config BSP_USING_GPIO
bool "Enable GPIO"
select RT_USING_PIN
default y
help
config gpio
config表示一个配置选项的开始,紧跟着的BSP_USING_GPIO是配置选项的名称,
bool表示选项的类型
select是反向依赖关系的意思,即当前配置选项被选中,则RT_USING_PIN就会被选中。
default表示配置选项的默认值
help帮助信息
通过env选中以上配置界面的选项后,最终可在rtconfig.h文件中生成如下两个宏:
#define RT_USING_PIN
#define BSP_USING_GPIO
menu语句用于生成菜单。
menu "Hardware Drivers Config"
config BSP_USING_COM2
bool "Enable COM2 (uart2 pin conflict with Ethernet and PWM)"
select BSP_USING_UART
select BSP_USING_UART2
default n
config BSP_USING_COM3
bool "Enable COM3 (uart3 pin conflict with Ethernet)"
select BSP_USING_UART3
default n
endmenu