在嵌入式开发领域,Nordic Semiconductor的nRF系列芯片凭借其低功耗和无线连接能力,已成为IoT设备开发的首选方案之一。然而,传统Windows环境下的开发流程常常面临工具链配置复杂、编译速度慢等问题。本文将带你探索如何在Windows 11的WSL2(Ubuntu 24.04)环境中,构建一个兼具Windows便利性和Linux高效能的nRF Connect SDK v3.0.0开发环境。
首先确保你的Windows 11已启用WSL2功能。以管理员身份运行PowerShell,执行以下命令:
powershell复制wsl --install -d Ubuntu-24.04
安装完成后,建议进行以下基础配置:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git cmake python3-pip
关键配置项:
%USERPROFILE%\.wslconfig中添加):code复制[wsl2]
memory=8GB
swap=4GB
Nordic开发需要以下核心组件:
| 组件名称 | 安装方式 | 验证命令 |
|---|---|---|
| nRF Command Line Tools | Windows端安装 | nrfjprog --version |
| nRF Util | pip install nrfutil |
nrfutil --version |
| Segger J-Link | 下载Windows安装包 | JLinkExe -version |
| CMake (≥3.20) | sudo apt install cmake |
cmake --version |
提示:所有Windows端工具安装后,需将可执行文件路径添加到系统PATH环境变量。
传统下载方式受限于网络环境,推荐使用多线程下载工具aria2:
bash复制sudo apt install aria2
aria2c -x16 -s16 "https://files.nordicsemi.com/artifactory/ncs-src-mirror/external/v3.0.0/src.tar.gz" -o ncs-v3.0.0.tar.gz
下载完成后进行安装:
bash复制nrfutil toolchain-manager install --ncs-version v3.0.0 --package ncs-toolchain.tar.gz
nrfutil sdk-manager install v3.0.0 --package ncs-v3.0.0.tar.gz
在Ubuntu的~/.bashrc末尾添加:
bash复制export NCS_ROOT="$HOME/ncs/v3.0.0"
export PATH="$NCS_ROOT/toolchains/v3.0.0/bin:$PATH"
source "$NCS_ROOT/zephyr/zephyr-env.sh"
执行source ~/.bashrc使配置生效后,验证安装:
bash复制west --version
cmake --version
在Windows端安装usbipd-win:
powershell复制winget install usbipd
在Ubuntu中安装客户端工具:
bash复制sudo apt install linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
设备共享操作流程:
usbipd listusbipd bind --busid <busid>usbipd attach --wsl --busid <busid>设备识别失败的解决方案:
bash复制lsmod | grep usbip
powershell复制usbipd list | findstr Nordic
bash复制sudo modprobe usbip-core
sudo modprobe usbip-host
创建flash_helper.sh脚本实现自动化烧录:
bash复制#!/bin/bash
DEVICE_TYPE=$1
HEX_FILE=$2
case $DEVICE_TYPE in
nrf52)
nrfjprog --program $HEX_FILE --sectorerase --verify
nrfjprog --reset
;;
nrf53)
nrfjprog --family NRF53 --coprocessor CP_APPLICATION --program ${HEX_FILE}_app.hex
nrfjprog --family NRF53 --coprocessor CP_NETWORK --program ${HEX_FILE}_net.hex
nrfjprog --family NRF53 --reset
;;
*)
echo "Unsupported device type"
exit 1
;;
esac
赋予执行权限后即可使用:
bash复制chmod +x flash_helper.sh
./flash_helper.sh nrf52 merged.hex
安装必要扩展:
关键配置项:
json复制{
"nrf-connect.toolchain.path": "${env:HOME}/ncs/v3.0.0",
"cmake.configureArgs": [
"-DBOARD=nrf52840dk_nrf52840"
]
}
启用ccache加速:
bash复制sudo apt install ccache
export ZEPHYR_CCACHE_ENABLE=1
并行编译配置:
bash复制west build -b nrf52840dk_nrf52840 -- -DCMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
选择性编译示例:
bash复制west build -p always samples/hello_world --build-dir build/hello
创建debug_config.ini文件:
code复制interface=swd
speed=4000
device=nrf52840_xxaa
启动调试会话:
bash复制JLinkGDBServer -if swd -device nrf52840_xxaa -port 2331
使用west的ram/rom报告功能:
bash复制west build -t ram_report
west build -t rom_report
典型输出示例:
code复制Memory region Used Size Region Size %age Used
FLASH: 45632 B 1 MB 4.35%
SRAM: 12504 B 256 KB 4.77%
安装Power Profiler工具:
bash复制sudo apt install python3-venv
python3 -m venv ~/ppk_venv
source ~/ppk_venv/bin/activate
pip install nrf-power-profiler
启动实时监控:
bash复制nrf-power-profiler --device nrf52 --interval 100
在WSL中访问Windows文件:
bash复制cd /mnt/c/Users/YourName/Projects
性能敏感操作建议:
~/projects)rsync进行跨系统同步创建版本切换脚本switch_ncs.sh:
bash复制#!/bin/bash
VERSION=$1
export NCS_ROOT="$HOME/ncs/$VERSION"
source "$NCS_ROOT/zephyr/zephyr-env.sh"
echo "Switched to NCS v$VERSION"
使用示例:
bash复制./switch_ncs.sh v2.6.0
基本测试命令:
bash复制west twister -p nrf52840dk_nrf52840 -T samples/hello_world
生成测试报告:
bash复制west twister --outdir build/twister --generate-report
示例testcase.yaml配置:
yaml复制tests:
sample.basic:
tags: nrf52
platform_allow: nrf52840dk_nrf52840
extra_args: CONF_FILE="prj.conf"
生成密钥:
bash复制nrfutil keys generate private.key
签名固件:
bash复制nrfutil pkg generate --hw-version 52 --sd-req 0xCA \
--application app.hex --key-file private.key signed.zip
创建DFU包:
bash复制nrfutil pkg generate --application app.hex \
--application-version 1 --hw-version 52 --sd-req 0xCA \
--key-file private.key dfu_package.zip
在实际项目中,我发现将USB设备共享脚本与编译系统集成可以显著提升工作效率。例如,在VS Code的tasks.json中添加预处理任务,确保在编译前自动连接开发板:
json复制{
"label": "Attach Device",
"type": "shell",
"command": "powershell.exe -Command \"usbipd attach --wsl --busid $(usbipd list | Select-String 'Nordic' | ForEach-Object { $_.ToString().Split()[0] })\"",
"problemMatcher": []
}