3. 开发环境准备:主机Linux发行版选择与配置
做嵌入式开发,第一件事就是选对主机环境。我见过不少新手在Windows上折腾交叉编译,最后被路径分隔符和权限问题搞得焦头烂额。说实话,直接用Linux做宿主机,能省掉80%的麻烦。
3.1 为什么选Ubuntu 22.04 LTS?
Linux发行版那么多,为什么我推荐Ubuntu 22.04?说白了,就三个理由:
- LTS长期支持——到2027年才结束维护,你做完这个课程它还在更新
- 软件源最全——Qt、交叉编译工具链、各种依赖,apt install一把梭
- 社区活跃——遇到坑,StackOverflow上基本都有答案
我个人习惯用LTS版本做开发机。以前在Ubuntu 20.04上搭过一套环境,后来升到22.04,迁移成本几乎为零。你想想看,如果选一个非LTS版本,半年后EOL了,你还得重装系统,那多折腾。
核心原则:宿主机系统越稳定,嵌入式开发越省心。Ubuntu 22.04是目前平衡兼容性和新特性的最佳选择。
3.2 虚拟机 vs 双系统,怎么选?
这个问题我经常被问到。直接给结论:
| 对比项 | 虚拟机方案 | 双系统方案 |
|---|---|---|
| 硬件资源 | 共享内存/CPU,性能损失约10-15% | 独占硬件,性能无损失 |
| USB设备透传 | 需要配置,部分调试器不稳定 | 原生支持,即插即用 |
| 磁盘空间 | 动态分配,初始20GB够用 | 至少预留80GB |
| 切换成本 | Windows/Linux随时切换 | 必须重启 |
| 适合场景 | 学习、轻量开发 | 量产项目、硬件调试 |
我的建议是:学习阶段用虚拟机,做产品了再上双系统。我在公司带新人时,统一让他们用VirtualBox装Ubuntu 22.04。等他们真正开始调驱动、烧写板子时,再切到双系统。
注意:如果你用虚拟机,务必开启VT-x/AMD-V硬件虚拟化。否则交叉编译时,一个Qt项目能编译半小时,你会崩溃的。
3.3 虚拟机配置实战(VirtualBox + Ubuntu 22.04)
这里我直接给出我的标准配置,照着做就行:
- 下载镜像:ubuntu-22.04.3-desktop-amd64.iso
- 新建虚拟机:类型选Linux,版本选Ubuntu 22.04 LTS
- 内存分配:至少8GB,推荐16GB
- 处理器:至少2核,推荐4核
- 磁盘:动态分配,上限80GB
小技巧:安装时选择"最小安装",能省掉LibreOffice等用不到的软件包。后面需要什么再装什么,系统更干净。
3.4 必要的开发工具安装
系统装好后,第一件事就是装工具。我列一个最小清单:
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 基础开发工具
sudo apt install -y build-essential cmake git vim
# 网络工具
sudo apt install -y net-tools openssh-server curl
# Qt开发依赖(提前装好,后面省事)
sudo apt install -y libgl1-mesa-dev libfontconfig1-dev libfreetype6-dev
这里我重点说几个工具:
3.4.1 Git——版本控制必备
做嵌入式开发,代码版本管理是基本功。我习惯用git + 私有仓库管理BSP和Qt工程。配置一下:
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
git config --global core.editor vim
3.4.2 Vim——服务器上的救命稻草
你可能用VS Code做主力编辑器,但SSH到开发板或服务器上时,只有vim能用。我建议至少学会:i插入、:wq保存退出、/搜索。够用了。
3.4.3 SSH——远程开发的桥梁
交叉编译经常需要把代码传到服务器或开发板上。检查SSH服务状态:
sudo systemctl status sshd
# 如果没启动:
sudo systemctl enable --now sshd
我曾经在调试一块i.MX6ULL板子时,串口线突然坏了。还好SSH还通着,硬是靠远程把问题定位了。从那以后,我每块板子第一件事就是配好SSH。
3.4.4 net-tools——网络排查利器
ifconfig、netstat这些命令虽然老,但嵌入式环境里最可靠。装好之后,至少能确认IP地址:
ifconfig
# 看到ens33或eth0的inet地址,说明网络通了
3.5 开发环境知识体系
下面这张图帮你理清整个开发环境的层次关系:
3.6 验证环境是否就绪
装完工具后,跑一遍这个检查脚本,确保所有东西都到位:
#!/bin/bash
echo "=== 环境检查 ==="
echo "1. Git版本:$(git --version)"
echo "2. Vim版本:$(vim --version | head -1)"
echo "3. SSH状态:$(sudo systemctl is-active sshd)"
echo "4. 网络接口:$(ifconfig | grep -E '^[a-z]' | awk '{print $1}')"
echo "5. 磁盘空间:$(df -h / | tail -1 | awk '{print $4}')"
echo "=== 检查完毕 ==="
如果所有命令都能正常输出,恭喜你,开发环境的基础已经打好了。接下来就可以进入正题——配置交叉编译工具链了。
我的经验:环境搭建这一步,宁可多花半小时验证,也不要急着往下走。我见过太多人编译到一半发现缺依赖,回头再装,反而更浪费时间。