1. RT-Thread工程构建基础回顾
在开始自定义模块配置之前,我们先快速回顾下RT-Thread的工程构建体系。这个部分对于新手特别重要,我刚开始接触时也花了不少时间才理清这些概念之间的关系。
RT-Thread使用SCons作为构建工具,这个选择很明智。SCons基于Python,相比传统的Makefile,它的语法更加友好。我在多个项目中使用后发现,SCons的构建脚本写起来就像写Python代码一样自然。整个构建系统主要涉及三个关键文件:
- SConstruct:这是整个项目的构建入口文件,相当于Makefile中的顶级Makefile。它定义了全局的构建环境和规则。
- SConscript:通常位于各个子目录中,定义该目录下的具体构建规则。一个项目可以有多个SConscript文件。
- rtconfig.py:这个文件保存了特定BSP的编译配置,比如编译器选项、链接参数等。
我第一次看到这些文件时有点懵,后来发现可以这样理解:把整个工程想象成一个公司,SConstruct就是CEO,负责整体战略;各个SConscript是部门经理,负责具体执行;rtconfig.py则是公司的规章制度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建自定义模块的完整流程
2.1 模块目录结构设计
让我们从一个实际案例开始。假设我们要为RT-Thread添加一个温湿度传感器驱动模块。根据我的项目经验,合理的目录结构能省去后期很多麻烦。
我建议采用这样的结构:
code复制sensor_dht11/
├── inc/ # 头文件目录
│ └── dht11.h
├── src/ # 源文件目录
│ └── dht11.c
├── SConscript # 构建脚本
└── Kconfig # 配置选项
这种分离头文件和源文件的做法有几个好处:首先,它符合大多数开源项目的惯例;其次,当其他模块需要引用你的模块时,只需要包含inc目录即可;最后,这种结构在后期维护时更加清晰。
2.2 编写模块源代码
在dht11.h中,我们需要定义模块的接口:
c复制#ifndef __DHT11_H__
#define __DHT11_H__
#include <rtthread.h>
rt_err_t dht11_init(rt_base_t pin);
rt_err_t dht11_read(float *temp, float *humi);
#endif
对应的dht11.c实现具体功能。这里有个细节要注意:在RT-Thread中,建议使用rt_前缀的函数命名风格,保持与系统的一致性。我刚开始时习惯用自己的命名风格,结果后来整合时发现很不协调。
3. 编写SConscript构建脚本
3.1 基础SConscript编写
SConscript文件是这个模块的构建说明书。下面是一个经过多个项目验证的可靠模板:
python复制# -*- coding: UTF-8 -*-
Import('RTT_ROOT')
Import('rtconfig')
from building import *
cwd = Get
