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清爽太多。
安装步骤:
- 去MSYS2官网下载安装包(msys2-x86_64-xxxx.exe)。
- 安装路径建议选默认的
C:\msys64,别改。我试过改到D盘,后面有些脚本路径写死,会报错。 - 安装完成后,打开
MSYS2 MSYS终端(不是UCRT64,也不是CLANG64,注意区分)。 - 执行更新命令:
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是官方推荐,也是社区主流。
安装步骤:
- 下载ARM GCC工具链。我推荐用
gcc-arm-none-eabi这个版本,稳定且兼容性好。 - 在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的官方源里没有,需要自己编译。别怕,步骤不复杂。
编译安装步骤:
- 先装依赖:
pacman -S libtool autoconf automake
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-x86_64-pkg-config
- 从GitHub克隆源码:
git clone https://github.com/nuttx/tools.git
cd tools/kconfig-frontends
- 配置并编译:
./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.bin 和 nuttx.elf 两个文件。
这里我多说一句:第一次编译会比较慢,因为要编译整个内核和基础库。后面改代码再编译,就只编译改动的部分,快很多。
验证清单:
- MSYS2终端能正常打开,bash能运行
arm-none-eabi-gcc --version输出正常kconfig-mconf --version输出正常make能成功编译出nuttx.bin
如果编译报错,别慌。90%的情况是某个包没装全。回头检查一下 base-devel 和 mingw-w64-x86_64-toolchain 是不是都装了。
2.5 知识体系总览
下面这张图,把咱们这节课搭的环境串起来了。你对照着看,心里就有谱了:
从这张图能看出来,MSYS2是地基,上面搭了三个支柱:工具链、配置工具、基础工具。最后汇到NuttX编译,输出固件。任何一个支柱没搭好,编译都会卡住。
好了,环境搭建就到这儿。你跟着走一遍,应该半小时内能搞定。如果遇到问题,回头检查每一步的验证命令。环境通了,后面写代码才痛快。
公众号:蓝海资料掘金营,微信deep3321