第二章:开发环境准备——Linux主机环境搭建
说实话,很多初学者在Buildroot上栽跟头,不是Buildroot本身有多难,而是开发环境没搭好。我见过太多人花了一周时间折腾环境,最后发现只是少装了一个包。这一章,咱们就把地基打牢。
2.1 选择你的Linux发行版
我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。为什么?因为社区支持最好,遇到问题随便一搜就有答案。Debian也行,但包名有时候会有点小差异。
你可能会问:「我用CentOS行不行?」嗯,理论上可以,但我不建议。Buildroot官方测试最多的就是Ubuntu/Debian,你用其他发行版,可能会遇到一些莫名其妙的依赖问题。我曾经有个学员用Arch Linux,折腾了三天才把环境配好——不是不能做,是没必要给自己加戏。
我的建议:如果你手头没有现成的Linux机器,直接在Windows上装个VMware或VirtualBox,跑一个Ubuntu 22.04。分配4GB内存、40GB硬盘就够了。别用WSL,WSL在某些网络配置上会有坑。
2.2 安装必要依赖包
Buildroot的依赖说多不多,说少不少。少了哪个,编译到一半就报错,那才叫崩溃。我整理了一个清单,你直接复制粘贴就行。
先更新你的包管理器:
sudo apt update
sudo apt upgrade -y
然后安装核心依赖:
sudo apt install -y \
build-essential \
git \
wget \
cpio \
unzip \
file \
bc \
rsync \
libncurses5-dev \
libssl-dev \
flex \
bison \
python3 \
python3-pip \
python3-venv \
u-boot-tools \
device-tree-compiler
这里面有几个关键点:
- build-essential:包含了gcc、g++、make等编译工具链。没有它,你什么都编译不了。
- libncurses5-dev:这是Buildroot的menuconfig界面依赖。少了它,你配不了内核选项。
- device-tree-compiler:编译设备树用的。做嵌入式Linux,设备树是绕不开的坎。
避坑指南:我曾经在Ubuntu 18.04上遇到过python版本太老导致Buildroot脚本报错。建议至少用Python 3.8以上。检查方法:python3 --version
2.3 配置Git与Repo
Git是版本控制的基础,Repo是Google为Android开发的多仓库管理工具。虽然Buildroot本身不需要Repo,但如果你要管理多个BSP包,Repo会很有用。
2.3.1 安装并配置Git
sudo apt install -y git
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
我个人习惯再加几个配置:
git config --global core.editor "vim"
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
这些别名能让你少打几个字。你想想看,每天敲几十次git命令,省下来的时间够喝杯咖啡了。
2.3.2 安装Repo工具
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
然后把~/bin加到PATH里:
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
注意:Repo工具依赖Python 3。如果你系统默认的python指向的是Python 2,记得改一下:sudo ln -sf /usr/bin/python3 /usr/bin/python
2.4 搭建TFTP/NFS服务器
这两个服务是嵌入式开发中的「快递员」和「共享文件夹」。TFTP用来把内核、设备树传到开发板,NFS用来让开发板挂载根文件系统。调试阶段用NFS,能省去反复烧写Flash的时间。
2.4.1 搭建TFTP服务器
安装tftp-hpa:
sudo apt install -y tftpd-hpa
配置文件在/etc/default/tftpd-hpa,我一般改成这样:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
然后创建目录并设置权限:
sudo mkdir -p /srv/tftp
sudo chmod 777 /srv/tftp
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa
测试一下:
echo "Hello TFTP" | sudo tee /srv/tftp/test.txt
tftp localhost
tftp> get test.txt
tftp> quit
cat test.txt
如果看到「Hello TFTP」,说明TFTP跑起来了。
我的经验:TFTP默认端口是69,很多公司防火墙会拦这个端口。如果你在公司内网开发,记得跟IT申请开放UDP 69端口。我曾经因为这个卡了一整天,最后发现是防火墙在搞鬼。
2.4.2 搭建NFS服务器
安装nfs-kernel-server:
sudo apt install -y nfs-kernel-server
编辑/etc/exports文件,添加共享目录:
/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
解释一下这几个参数:
- rw:读写权限。调试阶段必须开。
- sync:同步写入。数据更安全,但速度稍慢。
- no_subtree_check:禁用子树检查。提高性能。
- no_root_squash:允许root用户以root权限访问。这个很重要,因为开发板上很多操作需要root权限。
然后创建目录并启动服务:
sudo mkdir -p /srv/nfs
sudo chmod 777 /srv/nfs
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server
验证NFS是否正常工作:
showmount -e localhost
应该能看到你刚才配置的共享目录。
安全提醒:no_root_squash这个选项在生产环境千万别用。它意味着任何客户端都能以root身份操作你的NFS共享目录。调试阶段图方便可以开,但产品发布前一定要关掉。
2.5 本章知识体系
下面这张图帮你理清开发环境的整体结构:
说白了,整个开发环境就是一层叠一层。底层是操作系统,上面是依赖包,再上面是工具链,最上面是网络服务。哪一层出问题,Buildroot都跑不起来。
2.6 验证环境是否就绪
最后,我习惯跑一个快速检查脚本,确认所有东西都到位了:
#!/bin/bash
echo "=== 检查开发环境 ==="
# 检查Git
git --version &>/dev/null && echo "✓ Git 已安装" || echo "✗ Git 未安装"
# 检查编译工具
gcc --version &>/dev/null && echo "✓ GCC 已安装" || echo "✗ GCC 未安装"
make --version &>/dev/null && echo "✓ Make 已安装" || echo "✗ Make 未安装"
# 检查Python
python3 --version &>/dev/null && echo "✓ Python3 已安装" || echo "✗ Python3 未安装"
# 检查TFTP
systemctl is-active tftpd-hpa &>/dev/null && echo "✓ TFTP 服务运行中" || echo "✗ TFTP 服务未运行"
# 检查NFS
systemctl is-active nfs-kernel-server &>/dev/null && echo "✓ NFS 服务运行中" || echo "✗ NFS 服务未运行"
echo "=== 检查完毕 ==="
把这段脚本保存为check_env.sh,然后chmod +x check_env.sh && ./check_env.sh。如果所有项都打勾,恭喜你,环境准备好了。
最后说一句:开发环境搭建这件事,看起来琐碎,但值得你花时间一次搞定。我见过太多人「先跑起来再说」,结果编译到一半缺这个缺那个,反而更浪费时间。磨刀不误砍柴工,这句话在嵌入式开发里尤其适用。