第2章:开发环境搭建——用west工具管理NuttX源码
说实话,搭建开发环境这件事,很多新手觉得枯燥。但我得说一句:环境搭好了,后面能省80%的坑。我自己在NuttX社区混了这几年,见过太多人因为工具链版本不对、源码拉取不全,折腾一整天连个hello world都跑不起来。
这一章,我就带你一步步把环境搭好。咱们用west工具来管理源码,这是NuttX官方推荐的方式。你想想看,如果手动去git clone几十个仓库,那得多崩溃?
2.1 准备工作:你需要什么
先看看你手头有什么。我建议你准备一台Linux机器,Ubuntu 20.04或22.04都行。Windows也能搞,但说实话,我在Windows上踩过不少坑,最后还是切到WSL2了。
硬件方面,一台能联网的电脑就行。不需要多高的配置,4GB内存、20GB磁盘空间就够用。我当年用一台树莓派都编译过NuttX,虽然慢了点,但也能跑。
我的建议:如果你手头是Windows,直接用WSL2。别在原生Windows上折腾,那感觉就像穿着西装游泳——能游,但难受。
2.2 安装west工具
west是NuttX的元工具,说白了就是帮你管理多个git仓库的管家。安装它之前,你得先有Python 3.6以上版本。
检查Python版本:
python3 --version
如果版本太低,去Python官网下载新的。我个人习惯用Python 3.8或3.10,这两个版本我测试过,跟west配合得最好。
然后安装west:
pip3 install west
嗯,就这么简单。但有个坑——如果你用的是系统自带的pip,可能会遇到权限问题。我建议加个--user参数:
pip3 install --user west
安装完后,验证一下:
west --version
如果看到版本号,恭喜你,第一步走通了。
小技巧:如果你在Linux上遇到"command not found",多半是~/.local/bin没加到PATH里。执行 export PATH=$PATH:~/.local/bin 就能解决。我建议你把这个加到.bashrc里,一劳永逸。
2.3 拉取NuttX源码
有了west,拉源码就简单了。找个你喜欢的目录,比如~/nuttx:
mkdir ~/nuttx
cd ~/nuttx
west init
west update
west init会创建一个manifest文件,里面记录了NuttX所有组件的版本信息。west update则根据这个manifest,把几十个仓库全部拉下来。
这个过程取决于你的网速。我拉过一次,大概5分钟。如果你在墙内,可能会慢一些。我曾经帮一个朋友远程调试,他拉了半小时还没完,最后发现是公司网络限制了git协议。换成https就好了。
拉完之后,看看目录结构:
nuttx/
├── nuttx/ # 主仓库,包含内核和大部分驱动
├── apps/ # 应用仓库,包含各种示例和工具
└── ... # 其他组件
你主要关注nuttx/和apps/这两个目录。前者是操作系统本身,后者是用户态程序。
注意:千万不要手动修改manifest文件里的版本号,除非你知道自己在做什么。我见过有人把版本号改错了,结果编译出一堆莫名其妙的错误,排查了两天才发现是版本不匹配。
2.4 配置工具链
源码拉下来了,但还不能编译。你得先装交叉编译工具链。NuttX支持几十种架构,咱们先拿ARM来举例。
安装ARM工具链:
sudo apt-get install gcc-arm-none-eabi binutils-arm-none-eabi
如果你用的是其他架构,比如RISC-V:
sudo apt-get install gcc-riscv64-unknown-elf
装完后,检查一下:
arm-none-eabi-gcc --version
看到版本信息就对了。我建议用10.3或11.2版本,这两个版本我测试过,跟NuttX最新代码兼容性最好。
还有个东西别忘了——Kconfig前端。NuttX用Kconfig来配置内核,你需要装个kconfig-frontends:
sudo apt-get install kconfig-frontends
如果apt里没有,可以从源码编译。不过说实话,我建议直接用menuconfig的Python版本,省事:
pip3 install kconfiglib
2.5 验证环境:编译一个示例
环境搭好了,咱们跑个例子验证一下。以STM32F4Discovery开发板为例:
cd ~/nuttx/nuttx
./tools/configure.sh stm32f4discovery:nsh
make
第一条命令会生成配置文件,第二条开始编译。第一次编译会慢一些,因为要编译整个内核。我当年第一次编译等了大概3分钟,喝杯咖啡的功夫。
如果一切顺利,你会看到nuttx.bin和nuttx.elf两个文件。这就是编译好的固件。
常见错误:如果编译时报错"arm-none-eabi-gcc: command not found",说明工具链没装好。检查一下PATH,或者重新安装。我曾经犯过一个低级错误——装完工具链忘了重启终端,结果折腾了半小时才发现。
2.6 Windows环境特别说明
我知道有些同学用Windows。嗯,我理解,毕竟不是所有人都能切到Linux。但我要说一句:在Windows上搞嵌入式开发,真的不如Linux顺手。
如果你坚持用Windows,我推荐两种方式:
- WSL2(推荐):在Windows里装个Ubuntu子系统,然后完全按照Linux的步骤来。我试过,性能损失很小,而且能直接用Linux工具链。
- MSYS2:如果你不想用WSL,可以用MSYS2模拟Linux环境。但说实话,我试过一次就放弃了——包管理太麻烦,而且有些工具链装不上。
我个人强烈建议用WSL2。你想想看,在Windows上跑Linux,既能用Windows的日常软件,又能用Linux的开发工具,两全其美。
WSL2安装小贴士:以管理员身份打开PowerShell,执行 wsl --install,然后重启。之后去Microsoft Store装个Ubuntu 22.04。整个过程不到10分钟。
2.7 避坑指南
最后,我总结几个常见问题,都是我在社区里帮人排查时遇到的:
- 网络问题:如果
west update卡住,试试挂代理,或者换成国内镜像。我记得有个同学在深圳,用github直连死活拉不下来,换了gitee镜像后秒搞定。 - Python版本:west要求Python 3.6+。如果你系统默认的是Python 2,记得用
python3和pip3。 - 磁盘空间:NuttX完整源码大概1.5GB,编译后还会生成一些中间文件。确保你有至少5GB空闲空间。
- 权限问题:不要在
/root或/opt下搞开发,否则你会被权限问题折磨死。老老实实用用户目录。
好了,环境搭建就到这里。下一章咱们开始写第一个NuttX程序,到时候你就知道今天搭的环境有多重要了。