1. Home
  2. 博客

    nRF Connect SDK 基础课程第三课:nRF Connect SDK 应用的组成部分

nRF Connect SDK 基础课程第三课:nRF Connect SDK 应用的组成部分

Nordic Semiconductor

前两课完成了开发环境搭建、GPIO 基础操作与设备树入门,第三课《Elements of an nRF Connect SDK application》则是真正掌握工程构建、配置管理与自定义开发的核心一课。本课将完整拆解一个 nRF Connect SDK 应用的所有必备组成要素,从 Kconfig 配置、CMake 构建系统、设备树覆盖层,到多镜像构建(Sysbuild),再到从零创建可运行工程,让开发者彻底理解工程从源码到可执行文件的全流程,为后续自主开发、功能裁剪与工程定制打下坚实基础。

本课面向嵌入式固件工程师、物联网终端开发者,是从 “会跑示例” 走向 “自主建工程” 的必备进阶内容。

课程定位:掌握应用工程的构建与配置全流程

在 nRF Connect SDK 中,任何可编译运行的应用都由一套固定的文件与配置体系支撑,而非简单的单份 main.c 文件。构建系统、配置系统、设备树、源码结构共同决定了工程能否正确编译、功能是否启用、硬件如何映射。

本课以最小工程结构为切入点,围绕 Kconfig 配置、CMake 构建、设备树覆盖层、Sysbuild 多镜像、实操创建工程 五大核心知识点展开,手把手带你从空白文件夹开始,搭建出可打印 “Hello World” 的最小应用,并进一步实现自定义函数、自定义配置、修改串口波特率等高级定制。学完本课,你将具备独立创建、裁剪、定制 nRF Connect SDK 应用的能力。

核心学习目标

完成本课学习后,你将建立 nRF Connect SDK 应用工程的完整知识体系,核心掌握:

  • 理解一个 nRF Connect SDK 应用的标准文件结构与各文件作用
  • 掌握 prj.conf 与板级配置的关系,理解配置优先级规则
  • 学会使用 nRF Kconfig GUI 可视化开启 / 关闭功能模块
  • 理解设备树覆盖层(overlay)的作用与使用方法,不修改底层文件实现硬件定制
  • 掌握 CMakeLists.txt 基本写法,理解构建系统如何组织源码
  • 了解 Sysbuild 多镜像构建系统,知晓多核 / 安全启动场景下的镜像管理
  • 从零创建最小应用工程,并实现自定义函数、自定义配置、修改设备树

核心知识模块:从配置到构建的全流程拆解

本课的核心知识围绕 配置系统 → 构建系统 → 设备树覆盖层 → 多镜像构建 → 实操创建 五层架构展开,所有知识点均以最小工程为案例落地,理论与实践一一对应。

模块一:Kconfig 配置系统 —— 应用功能的开关与调节器

nRF Connect SDK 采用 Kconfig 作为统一的软件配置系统,所有功能模块、内核服务、驱动开关都通过配置符号(CONFIG_*)控制,这是实现应用功能裁剪、体积最小化的核心机制。

1. 两类核心配置文件

  • 应用配置文件 prj.conf

每个应用必须拥有的配置文件,格式为 CONFIG_符号名=值,用于开启 / 配置当前应用所需的模块,优先级最高。

CONFIG_GPIO=y

CONFIG_SERIAL=y
  • 板级配置文件 <board>_defconfig

位于 SDK 内的板级默认配置,提供该开发板的基础驱动使能(如 UART、GPIO、Console),严禁直接修改,如需覆盖需在 prj.conf 中重新定义。

2. 配置优先级规则

当同一个 CONFIG 符号同时出现在 prj.conf 与板级配置中时,应用配置文件 prj.conf 的值永远优先生效

3. nRF Kconfig GUI 可视化配置

nRF Connect for VS Code 提供图形化配置工具,可浏览、搜索、勾选功能,自动同步到 prj.conf:

  • 路径:ACTIONS → nRF Kconfig GUI
  • 支持搜索(如搜索 GPIO/UART)
  • 三种保存方式:Apply(临时)、Save to file(永久写入 prj.conf)、Save minimal(最小变更)
  • 从 NCS v2.8.0 开始,Sysbuild 为默认构建系统,需先选中应用镜像再打开 Kconfig GUI

4. 配置查看方式

  • VS Code 中鼠标悬停可查看 CONFIG 符号说明
  • 查阅 nRF Connect SDK 官方文档
  • Kconfig GUI 内查看详情

模块二:构建系统与关键文件 ——CMake、Sysbuild 与设备树覆盖层

nRF Connect SDK 基于 CMake 构建,配合 Sysbuild 管理多镜像工程,同时使用设备树覆盖层(Overlay) 安全修改硬件描述,不破坏底层设备树文件。

1. CMake 与 CMakeLists.txt

所有 NCS 应用都是 CMake 工程,CMakeLists.txt 是构建入口文件,定义工程最低版本、引入 Zephyr、指定源码文件。

最小工程必备内容:

cmake_minimum_required(VERSION 3.20.0)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

project(hello_world)

target_sources(app PRIVATE src/main.c)

2. 设备树覆盖层(Devicetree Overlays)

不推荐直接修改 SDK 自带设备树(.dts/.dtsi),使用 .overlay 覆盖文件可安全修改硬件配置:

  • 文件名:<board_target>.overlay
  • 存放位置:应用根目录或 boards 子文件夹
  • 作用:使能节点、修改引脚、更改波特率等

示例(修改 UART0 波特率为 9600):

&uart0 {

current-speed = <9600>;

};

3. Sysbuild 多镜像构建系统

  • 从 NCS v2.8.0 开始默认启用
  • 用于管理多核(如 nRF5340)、安全启动、多核无线协议等多镜像场景
  • Sysbuild 配置文件:sysbuild.conf、Kconfig.sysbuild
  • 配置前缀:SB_CONFIG_*
  • 已废弃:旧版多镜像(parent/child images)

4. Trusted Firmware-M(TF-M)安全分区

针对 nRF54/nRF53/nRF91 等 Armv8-M 架构芯片,支持安全 / 非安全分区:

  • <board_target>:单镜像,无安全隔离
  • <board_target>/ns:非安全镜像,TF-M 运行在安全环境

模块三:应用标准文件结构 —— 最小工程必备文件

一个可独立编译的最小 nRF Connect SDK 应用必须包含以下文件:

app/

├── CMakeLists.txt # 构建脚本

├── prj.conf # 应用配置

└── src/

└── main.c # 应用入口

可扩展文件:

  • Kconfig:自定义配置符号
  • <board_name>.overlay:设备树覆盖层
  • boards/:板级专属覆盖层与配置

实操练习:从零创建应用 + 自定义工程

本课包含两个核心实操,完全遵循官方步骤,可直接复现。

练习 1:从零创建最小 Hello World 应用

目标:从空白文件夹开始,创建可编译、可烧录、周期性打印日志的应用。

  1. 创建文件夹 l3_e1,建立最小文件结构
  2. 编写 CMakeLists.txt(使用最小模板)
  3. prj.conf 留空(板级配置默认开启 Console)
  4. 编写 src/main.c
#include <zephyr/kernel.h>

#include <zephyr/sys/printk.h>



int main(void)

{

while (1) {

printk("Hello World!\n");

k_msleep(1000);

}

}
  1. 在 VS Code 中打开应用,添加构建配置
  2. 编译、烧录
  3. 打开串口终端(115200 8N1)查看输出
*** Booting nRF Connect SDK ***

*** Using Zephyr OS ***

Hello World!

Hello World!

练习 2:自定义应用 —— 添加函数、配置、修改设备树

基于练习 1 工程,实现三大定制:

1. 添加自定义函数

  • 创建 src/myfunction.c / myfunction.h
  • 实现求和函数 sum()
  • 在 CMakeLists.txt 中添加源文件
target_sources(app PRIVATE src/myfunction.c)

2. 添加自定义 Kconfig 配置

  1. 应用根目录创建 Kconfig 文件
source "Kconfig.zephyr"

config MYFUNCTION

bool "Enable my function"

default n
  1. 在 prj.conf 使能
CONFIG_MYFUNCTION=y
  1. CMake 中条件编译
target_sources_ifdef(CONFIG_MYFUNCTION app PRIVATE src/myfunction.c)
  1. main.c 中条件调用
#ifdef CONFIG_MYFUNCTION

#include "myfunction.h"

#endif

3. 使用设备树覆盖层修改 UART 波特率

  1. 创建 <board_target>.overlay
  2. 修改 UART 波特率为 9600
&uart0 {

current-speed = <9600>;

};
  1. 全新编译(Pristine build)
  2. 串口终端改为 9600 波特即可正常接收日志

课后测评:检验应用组成知识的掌握程度

本课配套官方课后测评,检验你对配置系统、构建系统、工程结构、设备树覆盖层的理解。

测评核心考察点

  1. 应用文件结构:最小工程必备文件、各文件作用
  2. Kconfig 配置:prj.conf 与板级配置关系、优先级、Kconfig GUI 使用
  3. 构建系统:CMakeLists.txt 作用、Sysbuild 基本概念
  4. 设备树覆盖层:overlay 文件命名、语法、使用场景
  5. 实操能力:创建工程、条件编译、修改串口波特率

完成测评可快速定位薄弱点,确保完全掌握应用组成与构建流程。

本课的学习价值:搭建自主开发的工程基础框架

第三课是 nRF Connect SDK 开发从示例复用走向自主创造的分水岭:

  • 彻底理解工程从源码到可执行文件的构建链路
  • 掌握配置裁剪能力,让应用体积最小、资源占用最优
  • 学会安全定制硬件描述,不破坏 SDK 底层文件
  • 理解多镜像构建,为后续多核开发、蓝牙、Mesh、Matter 打下基础
  • 所有知识点适用于 UART、I2C、SPI、无线等所有外设开发

 

短距离

适用于短距离物联网的蓝牙低功耗及多协议系统级芯片(支持Thread、Matter、Zigbee协议)

长距离

适用于LTE-M/NB-IoT、GNSS、DECT NR+和NTN的蜂窝物联网系统级封装

Wi-Fi

低功耗Wi-Fi 6协同ICs,支持2.4 GHz/5 GHz频段选项及WPA3加密协议

电源管理ICs

适用于电池供电设备的电源管理IC(PMIC),nPM系列提供充电与稳压功能选项。

AI及软件工具

工具与NPU加速边缘人工智能开发和部署

订阅Nordic新闻简报

了解最新信息!订阅后即可获取最新Nordic及物联网资讯

立即订阅