嵌入式开发起步:VirtualBox + Ubuntu 20.04 环境搭建(从镜像选择到网络配置一次说清)
写在前面:
我准备从零再建一遍虚拟机,把踩过的坑一次性写清楚。目标不是“装个 Linux 看看”,而是搭一套能用于嵌入式 Linux 开发的环境:能上网、能被宿主机 SSH、IP 稳定,后续方便安装交叉编译工具链、NFS、TFTP、GDB 和 QEMU。
目录
- 一、为什么要选 Ubuntu 20.04 + VirtualBox
- 二、镜像怎么选
- 三、VirtualBox 虚拟机创建
- 四、网络配置:这篇最核心
- 五、嵌入式开发推荐方案:双网卡
- 六、安装 Ubuntu 时的关键点
- 七、进入系统后:确认网卡名
- 八、配置 NAT 网卡(上网)
- 九、配置 Host-Only 网卡(固定 IP 给 SSH 用)
- 十、验证网络
- 十一、开 SSH(嵌入式开发基本操作)
- 十二、常见坑(我帮你先踩了)
- 十三、最终结构
- 十四、小结
一、为什么要选 Ubuntu 20.04 + VirtualBox
嵌入式开发中,我们常常需要:
- 在 Linux 环境编译 U-Boot、Kernel、Buildroot 或 Yocto
- 用 NFS 给开发板挂载根文件系统
- 用 TFTP 烧写镜像
- 用 SSH 或 VS Code Remote-SSH 远程连接虚拟机写代码
Windows 直接做这些有时并不顺手,WSL 在某些场景下也不完全像一台开发板旁边的 Linux 服务器。因此可以考虑:
- VirtualBox:免费、轻量,支持 Windows、macOS 和 Linux
- Ubuntu 20.04 LTS:许多既有 SDK 和工具链以它作为测试或兼容环境,软件包管理使用 APT
⚠️维护状态提醒:Ubuntu 20.04 LTS 的标准维护已于 2025 年结束。后续安全维护需要 Ubuntu Pro 的 ESM 等适用方案。新项目应优先评估仍处于标准维护期的 Ubuntu 版本;本文适用于有版本兼容要求或维护旧环境的场景。
选择 20.04 的原因通常是特定 SDK、交叉工具链或项目环境要求它;不能据此认为所有嵌入式工具链在 20.04 上都兼容性最好。若使用 22.04 或更新版本,操作思路相近,但软件版本、包名和网络配置细节可能不同。
二、镜像怎么选
常见安装介质主要有 Server 和 Desktop:
| 镜像类型 | 大小(约) | 适合谁 |
|---|---|---|
| Server | 1.4 GB | ✅嵌入式开发首选,通常不安装桌面环境 |
| Desktop | 4 GB 以上 | 需要图形桌面的场景 |
Ubuntu Server 安装介质包含安装程序,不等同于“网络安装 Mini ISO”。文件大小会随发行点版本变化。
推荐下载
可以从 Ubuntu 官方下载页或可信镜像站获取 Ubuntu 20.04 Server amd64 镜像。
https://releases.ubuntu.com/20.04.6/ubuntu-20.04.6-live-server-amd64.iso下载后应核对官方发布的校验和。镜像可下载不代表该版本仍处于标准安全维护期。
💡 嵌入式开发通常不需要桌面环境。Server 版占用较少,后续可以按需使用
apt install安装软件。
三、VirtualBox 虚拟机创建
新建虚拟机
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 名称 | ubuntu-embed | 可自定义 |
| 类型 | Linux | |
| 版本 | Ubuntu (64-bit) | |
| 内存 | 4096 MB | 最少 2048 MB;编译内核建议 4 GB 或更多 |
| CPU | 4 核 | 2 核起步 |
| 硬盘类型 | VDI | |
| 分配方式 | 动态分配 | |
| 硬盘大小 | 30 GB 起步 | Yocto 和 Buildroot 构建较占空间,按项目需要增加 |
❌ 不建议只分配 8 GB,后续编译内核或根文件系统时很容易空间不足。
VirtualBox 新建 Ubuntu 虚拟机的配置摘要,显示内存 4096 MB、4 个处理器、30 GB 虚拟硬盘,并启用了跳过无人值守安装。
四、网络配置:这篇最核心
很多人在 VirtualBox 装完 Ubuntu 后会遇到:
- 能上网,但宿主机连不上
- 宿主机能连,但换 Wi-Fi 后连接方式失效
- 重启后 IP 变化,SSH 配置需要跟着调整
VirtualBox 三种网络模式
NAT(默认)
- 虚拟机可以访问外网
- 宿主机通常不能直接通过 NAT 地址 SSH 进入虚拟机;也可另行配置端口转发
- 适合临时联网和安装软件包
桥接(Bridged)
- 虚拟机和宿主机处于同一局域网
- 虚拟机通常由路由器分配独立 IP
- 更换 Wi-Fi 或网线后,IP 可能变化
- 公司网络可能禁止桥接
Host-Only(仅主机)
- 虚拟机和宿主机可以通过专用网络通信
- 默认不能通过该网卡访问外网
- 可用于宿主机稳定连接虚拟机
五、嵌入式开发推荐方案:双网卡
网卡 1:NAT,用于访问外网
网卡 2:Host-Only,用于宿主机 SSH 连接
这是适合多数本地开发场景的双网卡方案兼顾联网与稳定连接。
虚拟机设置 → 网络
网卡 1:
- ☑ 启用网络连接
- 连接方式:NAT
网卡 2:
- ☑ 启用网络连接
- 连接方式:仅主机(Host-Only)网络
- 界面名称:选择 VirtualBox 创建的 Host-Only 网卡,例如
VirtualBox Host-Only Ethernet Adapter
Host-Only 默认网段通常类似:
网段:192.168.56.0/24 宿主机:192.168.56.1 虚拟机:192.168.56.100具体地址以 VirtualBox 的全局设定 → 网络 → Host-Only Networks中显示的配置为准。若启用了 Host-Only DHCP,静态地址应避开 DHCP 地址池。
使用 NAT + Host-only 双网卡,让虚拟机同时联网并接受宿主机连接。
VirtualBox Host-Only 网络管理页面会显示宿主机网卡的地址与子网掩码。通过确认 Host-Only 网段可以为虚拟机预留一个不冲突的静态地址。
网卡名称:VirtualBox Host-Only Ethernet Adapter IPv4 地址:192.168.56.1(示例,请以实际为准) 子网掩码:255.255.255.0六、安装 Ubuntu 时的关键点
启动 Ubuntu Server 安装介质后(使用文本向导):
- 选择语言;服务器环境常选 English,减少终端和路径本地化带来的差异
- 键盘布局使用默认值,或按实际键盘选择
- 网络配置:
enp0s3(通常是 NAT)确认已通过 DHCP 获取地址enp0s8(通常是 Host-Only)安装时也可能通过 DHCP 获取地址;可先使用该地址,安装后如需固定 SSH 地址,再配置静态 IP
- 代理按需填写;没有代理时留空
- 镜像源使用安装程序提供的默认源,或按需改为可信镜像站
- 磁盘分区可选择
Guided - use entire disk - 设置用户名和密码,例如用户
embed - 安装 OpenSSH Server:建议勾选
Install OpenSSH server - 其他软件包可先跳过,后续手动安装
- 等待安装完成并重启
⚠️ 如果安装过程中卡在下载或更新步骤,先确认 NAT 网卡已联网;也可以跳过安装器中的更新,进入系统后再检查软件源并运行
sudo apt update。
安装器已识别双网卡,NAT 与 Host-only 均获取到地址;Host-only 固定 IP 可在安装后配置。
Ubuntu Server 存储配置界面。这里选择 VirtualBox 创建的 30 GB 虚拟硬盘作为安装目标,并启用 LVM,未开启磁盘加密。需要说明的是,这里的“使用整个磁盘”仅针对虚拟机的虚拟硬盘,不会影响宿主机的真实硬盘。
安装 Ubuntu 时勾选 Install OpenSSH server,登录用户则在安装过程中另行创建。
七、进入系统后:确认网卡名
ipaddr你会看到类似网卡名称:
lo enp0s3 # 通常对应 NAT enp0s8 # 通常对应 Host-OnlyUbuntu Server 20.04 通常使用 Netplan 管理网络,配置文件位于/etc/netplan/。请以实际网卡名和现有配置为准。
八、配置 NAT 网卡(上网)
如果 Ubuntu Server 安装时 NAT 网卡已联网,安装器通常已经创建 DHCP 配置。查看现有文件:
ls-l/etc/netplan/sudocat/etc/netplan/*.yaml双网卡都使用 DHCP 时,配置内容可能类似:
network:version:2ethernets:enp0s3:dhcp4:trueenp0s8:dhcp4:true如果安装后看到enp0s8为dhcp4: true,表示 Host-only 网卡已经通过 DHCP 获得地址(例如192.168.56.104),网络可直接使用。此地址可能变化;若接受当前地址,可以保留 DHCP,不必再配置静态地址。不要为了配置第二块网卡而覆盖整份安装器生成的文件。
九、配置 Host-Only 网卡(固定 IP 给 SSH 用)
如果希望 SSH 始终使用同一个地址,可以将 Host-only 网卡改成静态 IP。先查看配置文件名,并确认 VirtualBox 的 DHCP 地址池不包含准备使用的地址:
ls/etc/netplan/编辑其中包含enp0s8配置的现有 YAML 文件。下面以/etc/netplan/00-installer-config.yaml为例,实际文件名以ls输出为准:
sudonano/etc/netplan/00-installer-config.yaml只将enp0s8的 DHCP 配置改为静态地址;保留enp0s3的 DHCP 设置,确保 NAT 仍负责外网访问。双网卡配置示例:
network:version:2ethernets:enp0s3:dhcp4:trueenp0s8:dhcp4:falseaddresses:-192.168.56.100/24请保留现有文件中其他必要配置,不要整份照抄覆盖。Host-only 网卡不需要配置默认网关或 DNS;NAT 网卡通常通过 DHCP 获取默认路由和 DNS。静态 IP 必须与 VirtualBox Host-only 网段一致,且不在 DHCP 地址池内,也不能与其他设备冲突。若当前地址是 DHCP 分配的192.168.56.104,切换后应使用配置的静态地址192.168.56.100。
先检查配置,再应用:
sudonetplan generatesudonetplan try按提示确认配置后,再检查地址:
ipaddr show enp0s8执行后应能看到192.168.56.100/24已绑定到enp0s8,说明静态地址配置成功。若netplan try回滚,请检查 YAML 缩进、文件权限、网卡名和地址配置是否正确。
十、验证网络
虚拟机内验证外网
检查 NAT 网卡地址和默认路由:
ipaddr show enp0s3iproute分别测试外网 IP 连通和域名解析:
ping-c4www.baidu.com截图中可以看到域名解析成功,并收到 4 次 ping 回复,说明 DNS 解析和外网连通正常。
如果域名无法解析,检查 NAT 网卡通过 DHCP 获取的 DNS 和系统解析状态。Host-Only 网卡不应被当作外网 DNS 或默认路由通道。
宿主机验证连通性
在宿主机执行。若保留 DHCP,请将地址替换为虚拟机当前获得的 Host-only 地址;若已配置静态 IP,则使用配置的地址(本例为192.168.56.100):
ping 192.168.56.100能通表示 Host-Only 网络基本连通。若 ping 不通,检查 VirtualBox Host-Only 网卡、虚拟机第二块网卡、IP 和子网掩码,以及宿主机防火墙策略。某些防火墙会屏蔽 ICMP;也可以直接测试 SSH 连接。在 Windows 宿主机 ping 通 Ubuntu 虚拟机的 Host-only 地址,4 次请求均收到回复,说明宿主机与虚拟机之间的 Host-Only 网络连通正常。
十一、开 SSH(嵌入式开发基本操作)
安装时勾选 OpenSSH Server 后,服务通常已安装。检查状态:
sudosystemctl statusssh如果没有安装:
sudoaptupdatesudoaptinstall-yopenssh-serversudosystemctlenable--nowsshUbuntu 默认可使用 UFW 管理防火墙。建议只放行 SSH 服务,不要直接关闭防火墙:
sudoufw allow OpenSSHsudoufwenablesudoufw status🔒 在远程启用防火墙前,先确认已放行 SSH,并根据实际网络策略限制 SSH 来源。生产环境还应考虑密钥认证等措施。
之后可以使用PuTTY、 Xshell、Terminal 或 VS Code Remote-SSH 连接:
地址:192.168.56.100 端口:22 用户:embed(或安装时创建的用户)通过 PuTTY 登录 Ubuntu,并确认 Host-only 网卡的静态地址。登录成功后,可在终端执行ip addr show enp0s8,确认地址为192.168.56.100/24,以验证 SSH 连接和静态 IP 配置均正常。
十二、常见坑(我帮你先踩了)
| 问题 | 常见原因 | 排查方向 |
|---|---|---|
| 装完没网 | NAT 网卡没获取到地址,或默认路由异常 | 检查 VirtualBox 网卡 1、ip addr和ip route |
| 宿主机 ping 不通 | Host-Only 网卡未配置或不在同一网段 | 检查 VirtualBox 设置、Netplan 配置和防火墙;也可测试 SSH |
| SSH 连不上 | ssh服务未安装或未启动,或防火墙未放行 | 检查sudo systemctl status ssh和sudo ufw status |
sudo: command not found | 安装时创建的用户没有管理员配置,或系统安装不完整 | 使用可用管理员账户修复;避免默认以 root 远程登录 |
apt update慢或失败 | 网络、DNS、镜像源或 ESM 配置问题 | 先检查网络和源;确认 20.04 的维护及订阅状态 |
| 换 Wi-Fi 后连接失效 | 使用桥接,或局域网地址发生变化 | 本机开发可使用 NAT + Host-Only |
| Netplan 配置后没生效 | YAML 缩进错误、网卡名不对或文件冲突 | 使用空格缩进,检查sudo netplan generate输出 |
十三、最终结构
宿主机 Windows / macOS └── VirtualBox └── Ubuntu 20.04 Server ├── enp0s3 : NAT → 外网(地址由 DHCP 分配) └── enp0s8 : Host-Only → 宿主机 SSH(示例:192.168.56.100)后续建议目录规划:
| 路径 | 用途 |
|---|---|
/home/embed/nfs_root | NFS 根文件系统 |
/tftpboot | TFTP 镜像目录 |
/opt/toolchain | 交叉编译工具链 |
~/linux | Linux 内核源码 |
~/u-boot | U-Boot 源码 |
~/buildroot | Buildroot 源码 |
十四、小结
如果你是嵌入式开发起步,记住这 5 条就够了:
- ✅ 按项目兼容要求选择 Ubuntu 20.04 Server,并留意其维护状态
- ✅ VirtualBox 使用NAT + Host-Only 双网卡
- ✅ NAT 负责外网访问,Host-Only 负责宿主机稳定连接
- ✅ 桥接模式可用于特定网络环境,不必作为默认方案
- ✅ 安装后启用 SSH,并按需安装基础开发工具
下一篇预告:
《Ubuntu 20.04 上搭建嵌入式开发环境:NFS + TFTP + 交叉编译工具链》如果这篇对你有帮助,欢迎点赞收藏,我们下篇见。