2. 开发环境搭建:安装Linux虚拟机(Ubuntu)、配置网络与SSH、安装必要的开发工具(gcc、make、git、vim)、搭建TFTP/NFS服务器
做嵌入式开发,第一件事不是写代码,而是先把窝搭好。
我见过太多新手,上来就急着编译内核,结果环境缺这缺那,折腾半天连个Hello World都跑不起来。说白了,开发环境就是你的工作台。工具顺手了,后面的事才能快。
这一章,咱们把Ubuntu虚拟机装好,网络配通,SSH连上,再把常用的开发工具和TFTP/NFS服务器都架起来。嗯,一步到位。
2.1 为什么选Ubuntu?
Linux发行版那么多,为什么我推荐Ubuntu?
- 社区活跃:遇到问题,Google一下基本都有答案。
- 软件包新:gcc、make、git这些工具,apt install一把梭。
- 兼容性好:Buildroot官方测试最多的就是Ubuntu LTS版本。
我个人习惯用Ubuntu 22.04 LTS,稳定,支持周期长,用到2027年没问题。
2.2 安装Ubuntu虚拟机
步骤不复杂,我列个清单,你照着做就行。
- 下载镜像:去Ubuntu官网下载22.04 LTS的ISO文件。
- 新建虚拟机:选择“典型”安装,稍后安装操作系统。
- 分配资源:
- 内存:至少4GB,建议8GB。
- CPU:2核起步,4核更舒服。
- 磁盘:40GB,动态分配。
- 挂载ISO:启动虚拟机,选择下载好的Ubuntu镜像。
- 安装系统:一路默认,设置用户名和密码。我习惯用
ubuntu作为用户名。
2.3 配置网络与SSH
虚拟机装好了,但怎么跟宿主机通信?两个东西必须配:网络模式和SSH服务。
2.3.1 网络模式选择
| 模式 | 特点 | 适用场景 |
|---|---|---|
| NAT | 虚拟机共享宿主机IP上网,外部无法直接访问虚拟机 | 仅需上网,不需要外部连接 |
| 桥接 | 虚拟机独立IP,与宿主机在同一网段 | 需要SSH、TFTP、NFS等网络服务 |
| 仅主机 | 只能与宿主机通信,不能上网 | 调试阶段,隔离环境 |
我推荐桥接模式。这样虚拟机就像一台独立的机器,开发板也能直接访问它。你想想看,后面搭建TFTP和NFS服务器,如果虚拟机跟开发板不在一个网段,那得多麻烦。
2.3.2 配置静态IP
桥接模式下,我习惯给虚拟机配静态IP,免得每次重启IP都变。
# 编辑网络配置文件
sudo vim /etc/netplan/01-netcfg.yaml
# 内容如下
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
# 应用配置
sudo netplan apply
2.3.3 安装并启用SSH
SSH是嵌入式开发的标配。你总不想每次都跑到虚拟机前操作吧?
# 安装SSH服务
sudo apt update
sudo apt install openssh-server -y
# 检查服务状态
sudo systemctl status ssh
# 允许root登录(可选,我一般不开启)
sudo vim /etc/ssh/sshd_config
# 修改 PermitRootLogin yes
# 重启服务
sudo systemctl restart ssh
配好之后,在宿主机上用ssh ubuntu@192.168.1.100就能连上了。嗯,舒服多了。
2.4 安装必要的开发工具
嵌入式开发离不开这几个工具:gcc、make、git、vim。装起来很简单,但版本要注意。
# 一键安装
sudo apt install build-essential git vim -y
# 验证版本
gcc --version
make --version
git --version
vim --version
| 工具 | 作用 | 最低版本要求 |
|---|---|---|
| gcc | C语言编译器,编译内核和BusyBox | 9.0+ |
| make | 构建工具,管理编译过程 | 4.0+ |
| git | 版本控制,拉取源码 | 2.25+ |
| vim | 文本编辑器,改配置全靠它 | 8.0+ |
tree和htop,看目录结构和系统资源很方便。
sudo apt install tree htop -y
2.5 搭建TFTP服务器
TFTP(Trivial File Transfer Protocol)是嵌入式开发中用来传输内核镜像和设备树文件的。它简单、轻量,U-Boot直接支持。
2.5.1 安装与配置
# 安装TFTP服务
sudo apt install tftpd-hpa -y
# 创建TFTP根目录
sudo mkdir -p /srv/tftp
sudo chmod 777 /srv/tftp
# 编辑配置文件
sudo vim /etc/default/tftpd-hpa
# 内容如下
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
# 重启服务
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa
2.5.2 测试TFTP
# 在TFTP目录放一个测试文件
echo "Hello TFTP" | sudo tee /srv/tftp/test.txt
# 在另一台机器上测试(或本机localhost)
tftp 192.168.1.100
tftp> get test.txt
tftp> quit
# 查看是否下载成功
cat test.txt
sudo ufw disable
2.6 搭建NFS服务器
NFS(Network File System)用来共享根文件系统。开发阶段,把根文件系统放在NFS上,开发板通过网络挂载,省去反复烧写的麻烦。
2.6.1 安装与配置
# 安装NFS服务
sudo apt install nfs-kernel-server -y
# 创建共享目录
sudo mkdir -p /srv/nfs
sudo chmod 777 /srv/nfs
# 编辑导出文件
sudo vim /etc/exports
# 添加以下内容(允许开发板访问)
/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
# 应用配置
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
2.6.2 测试NFS
# 在共享目录放一个测试文件
echo "Hello NFS" | sudo tee /srv/nfs/test.txt
# 在虚拟机本机挂载测试
sudo mount -t nfs 192.168.1.100:/srv/nfs /mnt
cat /mnt/test.txt
sudo umount /mnt
no_root_squash这个选项很重要。如果不加,开发板上的root用户会被映射成nobody,导致权限问题。我刚开始就踩过这个坑,文件能读不能写,查了半天。
2.7 本章知识结构
下面这张图,把整个开发环境的关系理清楚了。
2.8 验证环境
所有东西都配好了,最后一步:验证一下环境是否完整。
# 1. 检查工具链
gcc --version
make --version
git --version
# 2. 检查网络
ping -c 3 192.168.1.1
ping -c 3 8.8.8.8
# 3. 检查SSH
ssh ubuntu@192.168.1.100
# 4. 检查TFTP
tftp 192.168.1.100 -c get test.txt
# 5. 检查NFS
showmount -e 192.168.1.100
如果每一步都返回正常,恭喜你,开发环境搭建完毕。后面就可以安心搞编译了。
env_check.sh脚本,把这些检查命令放进去。下次换机器或者重装系统,跑一遍脚本就完事,省心。