Skip to content

第 2 章 虚拟机安装 Ubuntu

Part 1 · 环境搭建


引子

WSL2 很方便——直到你需要一个完整的桌面环境。

编译内核需要开 GUI 配置工具(make xconfig),调试设备树需要看图, 有些嵌入式 IDE 只跑在原生 Ubuntu 桌面上。 WSL2 能给你终端,但给不了你一个真正的桌面。

虚拟机就是那个"真正的桌面"。 但装虚拟机这件事本身,就是一个坑比功能多的领域—— 内存分多少、硬盘给多大、网络选哪种模式, 每一个选项都在考验你对 Linux 启动过程的理解。

不过别怕,我们一个个来。


背景与动机

上一章我们装好了 WSL2——一条命令,一秒进入 Linux。它解决了很多问题,但不是所有问题。

做嵌入式开发有几件事离不开图形界面:

  • 内核配置make menuconfig 虽然是终端界面的,但 make xconfig(基于 Qt 的图形化配置工具)用起来效率高得多,尤其是你在几百个配置项里找某个驱动开关的时候。
  • 设备树调试:设备树源文件(.dts)的层级关系复杂,有图形化工具辅助查看会省很多眼力。
  • 串口工具:虽然命令行的 minicom 也能用,但图形化的串口助手在调试时更直观。
  • 完整隔离:虚拟机是一个完全独立的系统,你可以放心在里面折腾,搞坏了重建一个就是,不用担心影响你的 Windows 主机。

虚拟机的本质是什么?是在你的 Windows 里模拟出一台完整的电脑。这台电脑有自己的 CPU(从你的物理 CPU 借用)、自己的内存(从你的物理内存划分)、自己的硬盘(一个文件而已)、自己的网卡(虚拟的)。对运行在上面的 Ubuntu 来说,它以为自己独占一台物理机。

你可以把创建虚拟机理解为去电脑城定制组装一台电脑——选 CPU、配内存、挑硬盘、插网卡,每一步都在决定这台"电脑"的性能上限。只不过你选的不是物理零件,而是软件模拟的虚拟硬件。

但"定制电脑"这个类比有一个重要的偏差——我们留到概念层再拆开。

VMware 还是 VirtualBox?

市面上主流的桌面虚拟机软件就两个:

  • VMware Workstation Pro:老牌商业软件,2024 年底被 Broadcom 收购后,对个人用户免费开放(需要注册 Broadcom 账号获取许可证)。兼容性极好,尤其是 USB 设备直通——这点后面用 USB 转串口连开发板时会救你命。
  • VirtualBox:Oracle 的开源免费软件,功能也够用,但 USB 直通和网络配置偶尔会出一些莫名其妙的幺蛾子。

对于嵌入式开发,建议用 VMware。不为别的,就为了 USB 设备直通的稳定性——后面你要用 USB 转串口线连开发板、用 USB 刷机工具烧固件,VirtualBox 在这些场景下翻车率明显高于 VMware。不想花三天排查"为什么虚拟机识别不到开发板的 USB 口",就别纠结了。


概念层

虚拟机的三层架构

在动手之前,先搞清楚虚拟机的"零件"是怎么组装的。

┌──────────────────────────────────────┐
│    Guest OS(Ubuntu,客户机操作系统)   │
├──────────────────────────────────────┤
│    Hypervisor(VMware / VirtualBox)  │
├──────────────────────────────────────┤
│    Host OS(Windows,宿主操作系统)     │
├──────────────────────────────────────┤
│         物理硬件(你的电脑)            │
└──────────────────────────────────────┘

最底下是你的物理电脑,上面跑 Windows(宿主机)。VMware 作为中间层(Hypervisor),把物理硬件"切片"分配给上面的 Ubuntu(客户机)。Ubuntu 看到的是虚拟的硬件——虚拟 CPU、虚拟内存、虚拟磁盘、虚拟网卡——但它不知道这些是虚拟的,以为自己跑在一台真机上。

这就是我们刚才说的"定制电脑"。创建虚拟机的过程,就是在 VMware 这个"电脑城"里挑选虚拟配件:分几个 CPU 核心、给多少内存、硬盘多大、网卡用什么模式。

揭示那个类比的偏差

"定制电脑"这个比喻在"选择配置"这部分是对的——你确实在决定虚拟机的硬件规格。

但这个比喻有一个地方是错的:真正的定制电脑,你买回来的零件是你的——你的 CPU 就是你的,别人用不了。而虚拟机的"零件"是从你的 Windows 宿主机借来的。分给虚拟机的 4 个 CPU 核心,Windows 还在用它们跑自己的进程。分给虚拟机的 8 GB 内存,在虚拟机没启动的时候是空的,启动后才真正占上。

这意味两件事:

  1. 不要贪心。把所有 CPU 核心和内存都分给虚拟机,Windows 自己会卡死,虚拟机也跟着慢。留一半给宿主机是安全线。
  2. 虚拟磁盘不是真磁盘。它只是 Windows 上的一个大文件(.vmdk),大小可以动态增长。你分配 100 GB 不代表立刻占 100 GB 的物理空间——Ubuntu 用了多少,它才占多少。

理解了"借来的电脑"这个本质,后面每一项配置决策你都能自己判断。


实践层

4.1 下载与安装 VMware Workstation Pro

获取 VMware

从 Broadcom 的 VMware 产品页面下载最新版本(目前是 17.x):

https://www.vmware.com/products/workstation-pro.html

个人使用免费,需要注册一个 Broadcom 账号获取许可证密钥。商业使用需要购买授权。

安装过程没什么悬念,双击安装包,一路下一步。但有两个地方别手滑:

  1. 安装路径:默认装在 C 盘,如果你的 C 盘紧张,改到 D 盘。VMware 本体只占 1-2 GB,但虚拟磁盘文件(后面创建)会很大。
  2. 体验改进计划:取消勾选"加入客户体验提升计划"和"启动时检查更新"。开发环境的原则是——能用就不动,新版本往往意味着新 Bug。

安装完成后,第一次启动会要求输入许可证密钥(个人免费版在 Broadcom 官网获取)。输入后进入 VMware 主界面——一个空荡荡的控制台,等着你往里塞虚拟机。

如果你更倾向使用 VirtualBox,从 https://www.virtualbox.org/wiki/Downloads 下载 7.x 版本即可。安装过程类似,本章后面的操作步骤以 VMware 为主,VirtualBox 的配置逻辑基本相同,只是界面和菜单位置略有差异。

4.2 创建虚拟机——定制你的"电脑"

在 VMware 主界面,点击"文件" → "新建虚拟机"(或快捷键 Ctrl + N)。

第一个选择:"典型"还是"自定义"?

自定义

典型的自动模式会替你做 90% 的决定,但我们不是来偷懒的——我们是在为自己的开发环境选配件,每一步都得知道自己在做什么。

硬件兼容性:保持默认(最新版本),直接下一步。

安装客户机操作系统:选**"稍后安装操作系统"**。这会让 VMware 不会自作聪明地去读 ISO 信息,强制你手动指定系统类型——先把"硬件"造好,再往里装"软件"。

选择操作系统类型:客户机操作系统选"Linux",版本选"Ubuntu 64 位"。这一步是告诉 VMware:这台虚拟机要装什么系统,好让它预配置合适的硬件驱动。

命名和位置:名字随便填(比如 Ubuntu-Dev),重点在位置——虚拟机文件存放路径。建议找一个空间充裕的磁盘分区(至少预留 80-100 GB),比如 D:\VMware\Ubuntu-Dev

处理器配置

这里问的是:你的虚拟机能用宿主机的多少个 CPU 核心?

打开 Windows 任务管理器(Ctrl + Shift + Esc)→ "性能" → "CPU",看看"逻辑处理器"有多少个。

分配策略很简单:留一半给 Windows,另一半给虚拟机

宿主机逻辑核心数建议分配给虚拟机
42
84
126
168

处理器数量填 1 或 2 都行,关键是"每个处理器的内核数量"乘积等于你要分配的总核心数。比如总共分 4 核:可以填 1 个处理器 × 4 核,也可以填 2 个处理器 × 2 核。

内存分配

和 CPU 一样,留一半给 Windows

宿主机总内存建议分配给虚拟机
8 GB4 GB(勉强能用)
16 GB8 GB(推荐最低)
32 GB16 GB(舒适)
64 GB16-24 GB(富裕)

内存低于 4 GB 就别想了——光 Ubuntu 桌面跑起来就要吃 2 GB,再开个浏览器和终端,4 GB 是生存线。

网络类型——嵌入式开发的生死关

三个选项:桥接、NAT、仅主机。

必须选桥接模式。

桥接模式下,虚拟机就像局域网里的一台独立设备,和你的 Windows 平起平坐,拥有自己的局域网 IP。你的开发板可以直接 ping 通虚拟机,可以直接访问虚拟机上的 TFTP、NFS 服务。NAT 模式下虚拟机藏在 Windows 后面(上一章 WSL2 的默认状态),外面看不见。

后面第 21-24 章我们做网络相关的操作时,你会感激现在选了桥接。

I/O 控制器、磁盘类型:保持默认(LSI Logic / SCSI / NVMe),直接下一步。

磁盘容量

这是最容易低估的参数。建议 至少 80 GB,推荐 100 GB

嵌入式开发很吃空间:Linux 内核源码 3-5 GB,编译产物 5-10 GB,交叉编译工具链 2-3 GB,加上 Ubuntu 系统本身和日常工具,很快就能吃掉 40-50 GB。如果你后面还要跑 Buildroot 或 Yocto,100 GB 只是起步价。

下面的选项保持"将虚拟磁盘拆分成多个文件",不要勾选"立即分配所有磁盘空间"。这样虚拟磁盘会按需增长,实际占用的物理空间远小于分配上限。

确认配置:扫一眼清单——内存 8 GB?网络桥接?磁盘 100 GB?没问题,点击完成。

4.3 安装 Ubuntu 22.04 / 24.04

虚拟机造好了,现在往里面装系统。

获取 ISO 镜像

去 Ubuntu 官方下载站获取桌面版 ISO:

# Ubuntu 22.04 LTS (Jammy Jellyfish)
https://releases.ubuntu.com/22.04/

# Ubuntu 24.04 LTS (Noble Numbat)
https://releases.ubuntu.com/24.04/

选择 desktop-amd64.iso(桌面版,64 位)。文件大小约 4-5 GB,下载需要一些时间。

国内下载速度慢的话,可以用清华镜像站:

https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/

挂载 ISO 到虚拟机

在 VMware 主界面,选中刚创建的虚拟机,点击"编辑虚拟机设置"。在硬件列表里找到"CD/DVD"这一项,选择"使用 ISO 映像文件",浏览选中你下载的 ISO。

顺便检查一下 USB 控制器:把 USB 兼容性从默认的 USB 2.0 改成 USB 3.0。后面用 USB 转串口连开发板的时候,这一步没改你会花半天时间排查"为什么虚拟机识别不到设备"。

点击确定。

启动安装程序

点击"开启此虚拟机"。屏幕会闪一下,然后出现 Ubuntu 的安装引导界面。

  1. 语言选择:选"中文(简体)",点击"安装 Ubuntu"。
  2. 键盘布局:保持默认(English US)。
  3. 安装类型配置:两个选项——"安装时下载更新"和"安装第三方软件"。全都不勾选。先装一个干净的系统,更新和驱动我们后面手动装,心里有底。
  4. 磁盘操作:选"清除整个磁盘并安装 Ubuntu"。别紧张,这里清除的是虚拟磁盘(那个 .vmdk 文件),不是你 Windows 的硬盘。点"现在安装",确认写入磁盘。
  5. 时区:点击地图选 Shanghai 或 Beijing。
  6. 用户信息:填用户名和密码。这是开发机,密码简单点无所谓(比如 123456),别设一个自己都记不住的。

然后就是等。

安装过程大约 5-10 分钟,取决于磁盘速度。期间屏幕会展示 Ubuntu 的功能介绍——纯观赏用,不影响安装。不要断电,不要强制关机。

重启后的关键一步

安装完成后,系统提示"安装完成,需要重启"。点击"现在重启"。

这里有一个经典陷阱——重启后,你可能会发现又回到了安装界面。原因是 ISO 镜像还挂在虚拟光驱里,虚拟机优先从光驱启动了。

解决方法:在 VMware 主界面(不是 Ubuntu 里),点击"编辑虚拟机设置" → "CD/DVD" → 取消勾选"启动时连接"。这相当于把光盘从光驱里弹出来。再启动虚拟机,就会从硬盘引导进入已安装好的 Ubuntu。

4.4 验证安装

登录 Ubuntu 桌面后,先做两个验证。

验证网络

打开 Firefox 浏览器(左侧启动栏里应该有),随便访问一个网站。如果能打开——说明桥接模式生效了,虚拟机已经是局域网里的一台独立设备。

Ctrl + Alt + T 打开终端,输入:

bash
# 查看虚拟机的 IP 地址
ip addr show
# 找到类似 192.168.x.x 的地址——这就是虚拟机在局域网中的 IP

记住这个 IP,后面要反复用。

验证 USB 直通

这一步先不用连开发板,确认 VMware 的 USB 服务在运行就行。在 Ubuntu 终端里:

bash
# 检查 USB 设备识别能力
lsusb
# 预期输出(设备列表会因环境不同而异)
# Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# ...

如果这个命令有输出(哪怕只有 root hub),说明 USB 子系统正常。后面插上开发板,VMware 会弹出提示问你要不要把 USB 设备连接到虚拟机——选"连接到虚拟机"就行。

4.5 回到那台"定制电脑"

还记得概念层里的那个类比吗?创建虚拟机就像去电脑城定制组装一台电脑——选 CPU、配内存、挑硬盘。

现在你已经完成了整个"定制"流程。回头看,每一个配置选项其实都不是随便填的:

  • CPU 核心数——决定了编译速度。内核编译是 CPU 密集型任务,核心越多越快。
  • 内存大小——决定了能同时开多少程序。编译 + 浏览器 + IDE,8 GB 是底线。
  • 磁盘容量——决定了能放多少源码和编译产物。100 GB 看着多,用起来刚刚好。
  • 网络模式——决定了开发板能不能找到虚拟机。桥接模式是唯一正确答案。

这些配置背后,是 Linux 运行和嵌入式开发的实际资源需求。不是 VMware 在刁难你——是 Linux 本身就需要这些东西。


练习题

走到这里,你应该有一台跑着 Ubuntu 桌面的虚拟机了——但你知道它为什么能跑起来吗?下面几道题帮你验证理解程度。

练习 2.1 ⭐(理解)

在创建虚拟机时,我们将网络模式设置为"桥接"。请解释:如果你选了 NAT 模式,后面做嵌入式开发时(比如通过 NFS 挂载根文件系统),会遇到什么问题?

练习 2.2 ⭐⭐(应用)

你的物理机有 16 GB 内存和 8 个逻辑 CPU 核心。你创建了一台虚拟机,分配了 12 GB 内存和 6 个 CPU 核心——把大部分资源都给了虚拟机。请分析这种配置在实际使用中会导致什么问题。

练习 2.3 ⭐⭐⭐(思考)

安装 Ubuntu 完成后重启时,如果忘记从虚拟光驱中弹出 ISO 镜像,系统会再次进入安装界面而不是进入已安装的 Ubuntu。请从计算机启动过程(Boot Sequence)的角度解释为什么会出现这种现象,并说明这个原理在嵌入式开发板启动(SD 卡 vs eMMC)中是如何对应的。

提示:想想 BIOS/UEFI 的启动设备优先级。开发板的 Boot ROM 在寻找启动介质时,也有类似的优先级顺序。


本章回响

本章真正在做的事情,是通过"组装一台虚拟电脑"的过程,让你理解 Linux 运行的硬件需求。CPU、内存、磁盘、网络——虚拟机的每一个配置选项都不是凭空出现的,它们对应的是操作系统的实际资源需求。

而"定制电脑"这个类比,它的偏差恰恰是最值得记住的部分:虚拟机的所有硬件都是从宿主机借来的。这意味着你的虚拟机和 Windows 之间存在一种微妙的竞争关系——资源分配是零和博弈。给虚拟机多了,Windows 卡;给少了,Ubuntu 卡。找到平衡点,是使用虚拟机的第一课。

还记得开头说的吗——虚拟机的每一个配置选项都在考验你对 Linux 启动过程的理解。现在回看,这不是夸张。处理器配置决定了内核能调度多少并发,内存大小决定了能缓存多少文件,磁盘容量决定了能装多少工具链和源码,网络模式决定了你的开发板能不能找到这台虚拟机。每一个选项背后,都是一个 Linux 运行的必要条件。

但虚拟机装好只是第一步。现在的 Ubuntu 就像刚搬进新房——水电通了,但家具没进、窗帘没装、连灯泡都没换。下一章我们要做一次系统级的初始化:换国内镜像源(让软件下载从"拨号上网"变成"光纤入户")、配置中文环境、安装基础开发工具。这次初始化做得好不好,直接决定你接下来每一章的体验。


← 上一章下一章 →

Built with VitePress