2. 开发环境搭建:虚拟机安装、Ubuntu系统配置与工具链部署
做嵌入式Linux开发,第一道坎就是环境搭建。很多新手在这上面折腾好几天,其实说白了就三件事:装个虚拟机、跑个Ubuntu、把编译工具链配好。我这些年带过的团队,凡是环境搭得顺的,后面学习效率都高出一大截。
咱们这一章就把这三件事拆开揉碎了讲。你跟着我的步骤走,别跳步,基本一次过。
2.1 虚拟机选型:VMware还是VirtualBox?
先回答一个经典问题:用哪个?我个人的建议是——VMware Workstation Pro。为什么?
- 性能更稳:VMware的虚拟化层优化得更好,CPU和内存分配后损耗小。我在项目中同时跑4个虚拟机做交叉编译测试,VMware几乎没卡过。
- 快照功能强:装系统前拍个快照,搞坏了秒回。VirtualBox也有快照,但VMware的恢复速度明显快。
- 硬件兼容性好:USB设备透传、串口映射、磁盘挂载,VMware基本是即插即用。
当然,VirtualBox免费开源,如果你只是个人学习,预算有限,用VirtualBox也完全够。我早期入门时用的就是VirtualBox,跑了两年也没出过大问题。
| 对比项 | VMware Workstation Pro | VirtualBox |
|---|---|---|
| 价格 | 商业付费(有试用期) | 免费开源 |
| 性能 | 优秀,资源损耗小 | 良好,高负载时略逊 |
| 快照/克隆 | 支持,速度快 | 支持,速度一般 |
| USB/串口透传 | 稳定,兼容性好 | 偶有驱动问题 |
| 3D加速 | 支持较好 | 基础支持 |
| 适合场景 | 生产环境、多虚拟机、团队协作 | 个人学习、轻量开发 |
2.2 安装Ubuntu系统(以22.04 LTS为例)
Ubuntu版本我推荐22.04 LTS。为什么不是最新的24.04?因为很多嵌入式工具链和BSP(板级支持包)厂商还没完全适配24.04,你装完可能发现某个驱动编译不过。22.04是经过广泛验证的稳定版本,社区资源也最丰富。
2.2.1 虚拟机创建参数
新建虚拟机时,这几个参数别乱填:
- 内存:至少4GB,建议8GB。我见过有人给2GB跑Ubuntu桌面,卡到鼠标都飘。
- 处理器:分配2核心以上。编译内核时多核优势明显。
- 磁盘:建议60GB以上(动态分配)。嵌入式开发要装交叉工具链、下载内核源码、放根文件系统,20GB很快就满了。
- 网络:选NAT模式。这样虚拟机通过宿主机上网,不用额外配置。
2.2.2 安装过程中的关键选项
启动ISO镜像后,安装界面一路默认就行,但有几个地方要注意:
- 键盘布局:选English (US)。中文布局在终端里打斜杠和波浪号很别扭。
- 分区方案:选“Erase disk and install Ubuntu”。虚拟机里不用搞复杂分区,一个根分区+swap就够了。
- 用户名和密码:建议用简单好记的,比如用户名叫
embed,密码123456。开发机不是生产环境,别给自己找麻烦。 - 安装第三方软件:勾上“Install third-party software for graphics and Wi-Fi”。虽然虚拟机里用不到Wi-Fi驱动,但显卡驱动能提升桌面流畅度。
2.2.3 安装后的基础配置
系统装完,先别急着装工具链。做这几件事:
# 1. 更新软件源
sudo apt update
sudo apt upgrade -y
# 2. 安装常用开发工具
sudo apt install -y build-essential git vim curl wget net-tools
# 3. 安装SSH服务(方便后续从宿主机连接)
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
# 4. 关闭自动休眠(虚拟机里没必要)
sudo systemctl mask sleep.target suspend.target hibernate.target
gcc没装,make没装,连git都没有。所以这步基础包安装别跳过,后面省心。
2.3 开发工具链安装
嵌入式Linux开发的核心工具链,我把它分成三块:
- 交叉编译工具链:在PC上编译出能在ARM等嵌入式芯片上运行的程序。
- QEMU模拟器:没有开发板时,用QEMU模拟目标硬件来调试。
- 调试与烧录工具:如OpenOCD、GDB、串口工具等。
2.3.1 安装交叉编译工具链
以ARM Cortex-A系列为例,最常用的工具链是gcc-arm-linux-gnueabihf:
# 安装ARM交叉编译工具链
sudo apt install -y gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
# 验证安装
arm-linux-gnueabihf-gcc --version
如果你用的是较新的ARMv8(64位)架构,比如树莓派3B+以上或RK3399,需要装aarch64版本:
sudo apt install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
aarch64-linux-gnu-gcc --version
写个简单的测试程序,验证工具链是否正常工作:
# 创建测试文件
echo '#include <stdio.h>
int main() {
printf("Hello, Embedded Linux!\n");
return 0;
}' > hello.c
# 用交叉编译器编译
arm-linux-gnueabihf-gcc -o hello hello.c
# 查看生成的文件信息
file hello
# 输出应该包含 "ARM" 和 "ELF 32-bit"
./hello会报错“Exec format error”。这是正常的,因为它是ARM指令集。后面我们会用QEMU来模拟运行它。
2.3.2 安装QEMU模拟器
QEMU能模拟多种嵌入式硬件平台。对于ARM开发,装这个:
sudo apt install -y qemu-system-arm qemu-user-static
# 测试运行刚才编译的ARM程序
qemu-arm-static ./hello
# 应该输出 "Hello, Embedded Linux!"
看到输出没?这就是在x86的PC上模拟运行ARM程序。后面我们还会用QEMU模拟完整的开发板环境,包括串口、网络、SD卡等。
2.3.3 安装调试与烧录工具
这些工具后面章节会频繁用到,提前装好:
# 串口工具(用于连接开发板)
sudo apt install -y minicom picocom
# 网络调试工具
sudo apt install -y tftp-hpa nfs-kernel-server
# 烧录工具(以ST-Link为例)
sudo apt install -y stlink-tools
# 调试器
sudo apt install -y gdb-multiarch
2.4 本章知识体系总览
下面这张图把整个环境搭建的脉络理清楚了。你照着这个流程走,不会乱。
2.5 常见问题与避坑
环境搭建过程中,这几个坑我几乎每次带新人都会遇到:
- 虚拟机启动黑屏:多半是Hyper-V冲突。Windows上如果开了Hyper-V或Windows Sandbox,VMware会报错。关掉Windows功能里的Hyper-V就行。
- apt update报错:网络问题。检查虚拟机网络模式是不是NAT,或者换国内镜像源(清华、阿里云)。
- 交叉编译器找不到:没把工具链路径加到PATH。Ubuntu用apt安装的会自动处理,但如果你手动下载了工具链压缩包,记得
export PATH=$PATH:/your/toolchain/bin。 - QEMU运行报“Permission denied”:QEMU用户态模拟需要可执行权限。给文件加
chmod +x就行。
crt1.o。查了半天发现是工具链版本和Ubuntu版本不匹配——我用的20.04系统装了18.04的工具链。所以记住:工具链版本要和系统库版本匹配。用apt安装是最稳妥的方式。
好了,环境搭到这步,你的开发机已经具备基本的嵌入式Linux开发能力了。后面我们会在这个环境里编译内核、制作根文件系统、用QEMU模拟运行,一步步把整个嵌入式系统跑起来。