如何构建 OpenThread
构建 OpenThread 的步骤因工具链、用户机器和目标平台而异。
最常见的工作流程如下:
- 设置 build 环境并安装所需的工具链:
- 如需直接在机器上构建,请参阅模拟 Codelab 以获取详细说明
- 如需使用预配置环境的 Docker 容器,请下载并运行 OpenThread
environment映像:docker pull openthread/environment:latestdocker run -it --rm openthread/environment bash
- 在所选环境中,克隆特定于平台的 OpenThread Git 代码库。以 CC2538 为例:
git clone https://github.com/openthread/ot-cc2538.git --recursive - 在克隆的代码库的根目录中:
- 安装工具链:
./script/bootstrap - 构建配置:
./script/build platform-specific-args cmake-options
- 安装工具链:
- 将所需的二进制文件刷入目标平台。所有生成的二进制文件都位于
./build/bin中。
配置
您可以在 build 过程中配置 OpenThread,以实现不同的功能和行为。有关可用配置选项的详细信息,请参阅以下位置:
| 类型 | 位置 |
|---|---|
| 编译时常量 | 列在 /src/core/config 中的所有头文件中 |
| cmake 构建选项 | 列在 /etc/cmake/options.cmake 中 |
构建示例
使用 cmake 构建选项为平台启用相应功能。例如,如需构建支持 Commissioner 和 Joiner 的 CC2538 平台二进制文件,请执行以下操作:
./script/build -DOT_COMMISSIONER=ON -DOT_JOINER=ON
或者,如需在 nRF52840 平台的代码库中启用干扰检测功能,请执行以下操作:
./script/build nrf52840 UART_trans -DOT_JAM_DETECTION=ON
二进制文件
在构建过程中,系统会在 ./build/bin 中生成以下二进制文件。如需确定生成哪些二进制文件,请将标志与 ./script/build 命令搭配使用。例如,如需构建 OpenThread 并仅生成 FTD CLI 二进制文件,请执行以下操作:
./script/build -DOT_APP_CLI=ON -DOT_FTD=ON -DOT_MTD=OFF -DOT_APP_NCP=OFF -DOT_APP_RCP=OFF -DOT_RCP=OFF
| 二进制 | 说明 | 选项 |
|---|---|---|
ot-cli-ftd |
适用于 SoC 设计的完整 Thread 设备 | -DOT_APP_CLI=ON-DOT_FTD=ON |
ot-cli-mtd |
适用于 SoC 设计的最小 Thread 设备 | -DOT_APP_CLI=ON-DOT_MTD=ON |
ot-ncp-ftd |
用于网络协处理器 (NCP) 设计的完整 Thread 设备 | -DOT_APP_NCP=ON-DOT_FTD=ON |
ot-ncp-mtd |
适用于 NCP 设计的最小 Thread 设备 | -DOT_APP_NCP=ON-DOT_MTD=ON |
ot-rcp |
无线电协处理器 (RCP) 设计 | -DOT_APP_RCP=ON-DOT_RCP=ON |
默认情况下,上述所有标志均处于启用状态。如果您明确停用所有标志,系统不会构建应用,但仍会在 ./build/lib 中生成 OpenThread 库文件,以供在项目中使用。
检查 examples/platforms 目录,了解每个平台支持哪些标志。如需详细了解 FTD 和 MTD,请参阅 Thread 基础知识。如需详细了解 SoC 和 NCP 设计,请参阅平台。
刷写这些二进制文件的流程因示例平台而异。如需详细说明,请参阅各平台的示例文件夹中的 README。
OpenThread 守护程序
OpenThread 守护程序 (OT 守护程序) 是一种 OpenThread POSIX build 模式,可将 OpenThread 作为服务运行,并与 RCP 设计搭配使用。如需详细了解如何构建和使用它,请参阅 OpenThread Daemon。
构建支持软件包
Build Support Packages (BSP) 位于 /third_party 中。BSP 是 OpenThread 在每个相应平台上使用的其他第三方代码,通常在将 OpenThread 移植到新的硬件平台时包含在内。