2. 开发环境搭建(Windows篇):安装MSYS2、配置Toolchain、安装Kconfig-frontends、验证环境

说实话,搭建开发环境这事儿,看着琐碎,但真不能马虎。我见过太多新手,代码写得挺好,结果卡在环境配置上,一卡就是半天。咱们这节课,就把Windows上跑NuttX的环境,一步不落地搭起来。

核心思路:NuttX原本是Linux生态下的项目,Windows上没法直接编译。所以我们需要一个“模拟Linux环境”的工具——MSYS2。它提供bash、gcc、make这些你熟悉的东西。然后我们再装交叉编译工具链,装Kconfig配置工具。说白了,就是给Windows穿上一件Linux的外衣。

2.1 安装MSYS2

MSYS2是什么?你可以把它理解成一个“软件超市”,里面全是Linux命令行工具。我个人习惯用它的原因是,包管理比Cygwin清爽太多。

安装步骤:

  1. 去MSYS2官网下载安装包(msys2-x86_64-xxxx.exe)。
  2. 安装路径建议选默认的 C:\msys64,别改。我试过改到D盘,后面有些脚本路径写死,会报错。
  3. 安装完成后,打开 MSYS2 MSYS 终端(不是UCRT64,也不是CLANG64,注意区分)。
  4. 执行更新命令:pacman -Syu。如果提示需要关闭终端,关掉重开,再跑一次 pacman -Su

小技巧:更新时如果卡在某个包不动,按Ctrl+C中断,重新跑一次。MSYS2的镜像源有时候抽风,多试两次就好。

更新完成后,我们安装一些基础工具。这些是后面编译NuttX必须的:

pacman -S base-devel
pacman -S git
pacman -S python3
pacman -S unzip
pacman -S mingw-w64-x86_64-toolchain

嗯,这里要注意,mingw-w64-x86_64-toolchain 这个包比较大,大概几百兆。下载慢的话,可以换个国内源。我个人习惯用中科大的镜像,速度稳定。

2.2 配置交叉编译工具链

NuttX是给嵌入式设备用的,所以我们需要“交叉编译”——在PC上编译出ARM Cortex-M能跑的代码。这里我们装ARM GCC工具链。

为什么不用Keil或IAR? 说白了,NuttX的构建系统是基于GNU Make的,跟Keil那套IDE不搭。用ARM GCC是官方推荐,也是社区主流。

安装步骤:

  1. 下载ARM GCC工具链。我推荐用 gcc-arm-none-eabi 这个版本,稳定且兼容性好。
  2. 在MSYS2终端里执行:
pacman -S mingw-w64-x86_64-arm-none-eabi-gcc
pacman -S mingw-w64-x86_64-arm-none-eabi-gdb
pacman -S mingw-w64-x86_64-arm-none-eabi-newlib

装完之后,验证一下:

arm-none-eabi-gcc --version

如果看到版本号输出,说明装好了。我曾经遇到一个坑:装完以后提示“找不到命令”。后来发现是MSYS2的PATH没刷新。关掉终端重新打开就好了。

避坑指南:千万不要用Windows版的ARM GCC(比如从ARM官网下载的exe安装包)。那个跟MSYS2的bash环境不兼容,编译时会报一些莫名其妙的路径错误。老老实实用pacman装。

2.3 安装Kconfig-frontends

Kconfig是NuttX的配置系统。你想想看,NuttX支持上百种芯片、上千种配置,总不能手动改头文件吧?Kconfig就是那个让你“点菜单选配置”的工具。

Kconfig-frontends在MSYS2的官方源里没有,需要自己编译。别怕,步骤不复杂。

编译安装步骤:

  1. 先装依赖:
pacman -S libtool autoconf automake
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-x86_64-pkg-config
  1. 从GitHub克隆源码:
git clone https://github.com/nuttx/tools.git
cd tools/kconfig-frontends
  1. 配置并编译:
./configure --prefix=/usr --enable-mconf
make
make install

这里有个细节:--enable-mconf 这个参数一定要加。不加的话,装出来只有命令行版的配置工具,没有图形界面。我个人习惯用图形界面,毕竟点鼠标比敲键盘快。

装完后验证:

kconfig-mconf --version

如果输出版本号,恭喜你,Kconfig环境搭好了。

我曾经踩过的坑:编译Kconfig-frontends时,报错说找不到 gtk3 的头文件。后来发现是 pkg-config 的路径没配好。执行 export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig 就解决了。

2.4 验证环境

环境搭没搭好,拉个NuttX源码编译一下就知道了。咱们用STM32F4开发板为例:

git clone https://github.com/nuttx/nuttx.git
cd nuttx
./tools/configure.sh stm32f4discovery:nsh
make

如果一切顺利,你会看到编译进度条刷刷地跑。最后生成 nuttx.binnuttx.elf 两个文件。

这里我多说一句:第一次编译会比较慢,因为要编译整个内核和基础库。后面改代码再编译,就只编译改动的部分,快很多。

验证清单:

  • MSYS2终端能正常打开,bash能运行
  • arm-none-eabi-gcc --version 输出正常
  • kconfig-mconf --version 输出正常
  • make 能成功编译出 nuttx.bin

如果编译报错,别慌。90%的情况是某个包没装全。回头检查一下 base-develmingw-w64-x86_64-toolchain 是不是都装了。

2.5 知识体系总览

下面这张图,把咱们这节课搭的环境串起来了。你对照着看,心里就有谱了:

NuttX Windows开发环境知识体系 MSYS2(基础环境) 交叉编译工具链 arm-none-eabi-gcc Kconfig-frontends kconfig-mconf 基础工具包 git, make, python3 NuttX 源码编译 nuttx.bin / nuttx.elf

从这张图能看出来,MSYS2是地基,上面搭了三个支柱:工具链、配置工具、基础工具。最后汇到NuttX编译,输出固件。任何一个支柱没搭好,编译都会卡住。

好了,环境搭建就到这儿。你跟着走一遍,应该半小时内能搞定。如果遇到问题,回头检查每一步的验证命令。环境通了,后面写代码才痛快。


公众号:蓝海资料掘金营,微信deep3321