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模式。这样虚拟机通过宿主机上网,不用额外配置。
注意:磁盘类型选“IDE”或“SATA”都行,但别选“SCSI”。有些旧版Ubuntu安装程序对SCSI控制器支持不好,装到一半报错找不到磁盘。我曾经在这上面浪费过一下午。

2.2.2 安装过程中的关键选项

启动ISO镜像后,安装界面一路默认就行,但有几个地方要注意:

  1. 键盘布局:选English (US)。中文布局在终端里打斜杠和波浪号很别扭。
  2. 分区方案:选“Erase disk and install Ubuntu”。虚拟机里不用搞复杂分区,一个根分区+swap就够了。
  3. 用户名和密码:建议用简单好记的,比如用户名叫embed,密码123456。开发机不是生产环境,别给自己找麻烦。
  4. 安装第三方软件:勾上“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"
关键点:交叉编译出来的程序不能在PC上直接运行。你用./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 本章知识体系总览

下面这张图把整个环境搭建的脉络理清楚了。你照着这个流程走,不会乱。

嵌入式Linux开发环境搭建流程 嵌入式Linux开发环境搭建流程 选择虚拟机平台 VMware Workstation VirtualBox 安装Ubuntu 22.04 LTS 系统更新 & 基础工具 安装开发工具链:交叉编译器 + QEMU + 调试工具 编写测试程序验证 核心 验证

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模拟运行,一步步把整个嵌入式系统跑起来。