简述
RT-Thread的构建与配置系统由以下几个部分组成:
- KConfig:kernel config配置文件(提供系统的配置裁剪功能)
- SCons:构建工具
- env工具:主要提供构建系统所需的各种环境变量以及软件包的管理
Kconfig在RT-Thread中的工作机制
C语言项目的裁剪配置本质上通过条件编译和宏的展开来实现的,RT-Thread借助Kconfig这套机制更方便的实现了这一功能。
Kconfig机制包括了Kconfig文件和配置UI界面(如menuconfig,pyconfig等)。
- Kconfig文件中的配置项会映射至rtconfig.h中
- Kconfig文件可以随源码分散至各级子目录,便于灵活修改。
.config片段
CONFIG_RT_USING_TIMER_SOFT=y
CONFIG_RT_TIMER_THREAD_PRIO=4
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
//相对应的rtconfig.h片段
#define RT_USING_TIMER_SOFT
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 512
- menuconfig遍历解析各级Kconfig文件
- 保存配置到.config
- 最后生成rtconfig.h
Kconfig文件在源码中呈现树形结构,需要在工程的根目录下存放一份顶层Kconfig文件,顶层Kconfig文件在文件中通过source语句显示地调用各子目录下的Kconfig文件。
Env在根目录下执行menuconfig命令后会递归解析各级Kconfig文件,然后提供如下配置界面,完成相应的配置后并保存,根目录下会存在一份.config保存当前选择的配置项,并将.config文件转为RT-Thread的系统配置文件rtconfig.h。
Kconfig语法及示例
Kconfig源于Linux内核的配置构建系统。
注释
Kconfig采用#作为注释标记符,例如:
#This is a comment
config语句
config定义了一组新的配置选项
menu "Hardware Drivers Config"menu "Onboard Peripheral Drivers"config BSP_USING_USB_TO_USARTbool "Enable USB TO USART(uart1)"select BSP_USING_UARTselect BSP_USING_UART1default yconfig BSP_USING_USER_LEDbool "Enable User LED(pa1)"select RT_USING_PINdefault ycofig BSP_USING_USER_KEYbool "Enable User Key(pa0)"select RT_USING_PINdefault y
endmenumenu "On-chip Peripheral Drivers"config BSP_USING_GPIObool "Enable GPIO"select RT_USING_PINdefault ymenuconfig BSP_USING_UARTbool "Enable UART"default yselect RT_USING_SERIALif BSP_USING_UART1config BSP_USING_UART1bool "Enable UART1"default yconfig BSP_UART1_RX_USING_DMAbool "Enable UART1 RX DMA"depends on BSP_USING_UART1 && RT_SERIAL_USING_DMAdefault nconfig BSP_USING_UART2bool "Enable UART2"default nconfig BSP_UART2_RX_USING_DMAbool "Enable UART2 RX DMA"depends on BSP_USING_UART2 && RT_SERIAL_USING_DMAdefault nendif
endmenumenu "Board extended module Drivers"
endmenuendmenu
对于一个BSP而言,有如下三类驱动:
- 板载外设驱动:指MCU之外,开发板上外设,例如TF卡、以太网和LCD等。
- 片上外设:指MCU芯片上的外设,例如硬件定时器、ADC和看门狗等。
- 扩展模块驱动:指可以通过扩展接口或者杜邦线连接的开发板的模块,如ESP8266
config语句
config BSP_USING_GPIObool "Enable GPIO"select RT_USING_PINdefault y
语句分析
- config表示一个配置选项的开始,紧跟着的BSP_USING_GPIO是配置选项的名称,config下面几行定义了该配置选项的属性。
- bool表示配置选项的类型,每个config菜单项都要有类型定义,变量有5种类型,bool类型,tristate三态类型,string字符串,hex十六进制,int整型。
- select是反向依赖关系的意思,即当前配置选项被选中,则RT_USING_PIN就会被选中。
- default表示配置选项的默认值,bool类型的默认值可以是y/n。
- help帮助信息。
通过env选中以上配置界面的选项后,最终可在rtconfig.h文件中生成如下两个宏:
#define BSP_USING_GPIO
#define RT_USING_PIN
string类型
config RT_CONSOLE_DEVICE_NAMEstring "the device name for console"default "uart1"
#define RT_CONSOLE_DEVICE_NAME "uart1"