1. 嵌入式Linux开发环境搭建:虚拟机安装、Ubuntu系统配置、网络与SSH服务配置

做嵌入式Linux开发,第一件事就是把开发环境搭好。很多人觉得这步简单,随便装个虚拟机就行。但我见过太多人因为环境没配好,后面编译驱动时各种报错,折腾好几天才发现是虚拟机磁盘不够、网络没通、SSH连不上。

说白了,环境搭建就像盖楼打地基。地基不稳,后面全白干。这一章我就带你一步步把环境搭好,顺便聊聊我这些年踩过的坑。

本章核心目标: 在Windows宿主机上通过VMware安装Ubuntu 22.04 LTS,完成网络配置与SSH远程访问,为后续交叉编译工具链安装和驱动编译做好准备。

1.1 虚拟机软件选型与安装

主流的虚拟机软件就两个:VMware Workstation Pro 和 VirtualBox。我个人习惯用VMware,原因很简单——稳定,对Linux的3D加速支持更好,而且我早期做项目时VirtualBox偶尔会崩,后来就换VMware了。

对比项 VMware Workstation Pro VirtualBox
授权方式 商业软件(个人版免费) 开源免费
稳定性 ★★★★★ ★★★★
3D加速 支持较好 一般
快照功能 支持 支持
USB设备透传 稳定 偶有问题

如果你只是学习用,两个都行。但如果你要做实际的嵌入式项目,我建议用VMware。嗯,这里要注意:VMware Workstation Pro 从2024年开始对个人用户免费了,直接去官网下载就行。

安装步骤(以VMware 17为例)

  1. 从VMware官网下载Workstation Pro 17 for Windows
  2. 双击安装包,一路Next,注意勾选"增强型键盘驱动程序"
  3. 安装完成后重启电脑
  4. 打开VMware,输入个人免费许可证(官网注册获取)
小技巧: 安装路径不要有中文,否则后面创建虚拟机时可能遇到奇怪的路径问题。我吃过这个亏。

1.2 创建Ubuntu虚拟机

Ubuntu版本我推荐22.04 LTS。为什么?因为这是目前嵌入式Linux社区最广泛使用的长期支持版本,交叉编译工具链、驱动框架都对这个版本做了充分测试。我之前用20.04,后来发现有些新工具链对glibc版本有要求,就切到22.04了。

虚拟机配置建议

配置项 推荐值 说明
CPU核心数 4 至少2核,编译内核时多核有用
内存 8GB 4GB勉强够,8GB才舒服
磁盘容量 80GB 建议动态分配,但上限设大点
网络模式 NAT 后续可改桥接

创建虚拟机的具体步骤:

  1. 点击"创建新的虚拟机" → 选择"典型(推荐)"
  2. 选择"安装程序光盘映像文件(iso)",指向下载好的Ubuntu 22.04 ISO
  3. 设置用户名和密码(记住!后面SSH要用)
  4. 指定虚拟机名称和位置(磁盘空间要够)
  5. 指定磁盘容量,选择"将虚拟磁盘拆分成多个文件"
  6. 点击"自定义硬件",按上表调整CPU、内存
  7. 完成,启动虚拟机开始安装Ubuntu
避坑指南: 磁盘容量别设太小。我曾经给虚拟机只分了40GB,结果编译一次Linux内核+驱动,再装几个工具链,磁盘就满了。后来不得不扩容,折腾了半天。建议至少80GB。

1.3 Ubuntu系统基础配置

系统装好后,第一件事不是急着装工具链,而是把系统本身配置好。我习惯按这个顺序来:

1.3.1 更新软件源

Ubuntu默认的软件源在国外,下载速度很慢。建议换成国内镜像源,比如清华源或阿里源。

# 备份原源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑源文件
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update
sudo apt upgrade -y

1.3.2 安装基础开发工具

嵌入式开发需要一堆基础工具,我列个清单:

sudo apt install -y build-essential git vim curl wget \
    net-tools openssh-server tree htop \
    gcc g++ make cmake \
    libncurses5-dev libssl-dev flex bison \
    bc kmod cpio

这里面有几个关键包:

  • build-essential:包含了gcc、g++、make等编译必备工具
  • libncurses5-dev:编译内核时menuconfig需要
  • libssl-dev:内核编译需要OpenSSL头文件
  • flex、bison:内核解析配置时需要
我的习惯: 装完系统后我会先拍一个快照,命名为"base-system"。这样后面万一搞坏了,直接恢复快照就行,不用重装系统。

1.4 网络配置

网络配置是环境搭建中最容易出问题的地方。虚拟机网络模式有三种:

模式 特点 适用场景
NAT 虚拟机共享宿主机IP上网,外部无法直接访问虚拟机 仅需虚拟机上网,不需要外部访问
桥接 虚拟机与宿主机在同一网段,可被外部访问 需要SSH远程连接、NFS挂载等
仅主机 虚拟机只能与宿主机通信 调试、隔离环境

我建议开发阶段用桥接模式。为什么?因为后面你要从Windows上用SSH连到虚拟机编译代码,或者用VS Code Remote Development远程开发,桥接模式最方便。

配置桥接网络

  1. 在VMware中关闭虚拟机
  2. 右键虚拟机 → 设置 → 网络适配器
  3. 网络连接选择"桥接模式"
  4. 启动虚拟机,检查网络
# 查看IP地址
ip addr show

# 如果没获取到IP,重启网络服务
sudo systemctl restart NetworkManager

# 或者手动设置静态IP(推荐)
sudo vim /etc/netplan/01-network-manager-all.yaml

静态IP配置示例:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]
# 应用配置
sudo netplan apply
注意: 设置静态IP时,要确保IP地址没有被局域网内其他设备占用。我遇到过两次IP冲突,导致SSH连不上,排查了半天才发现是IP被占用了。

1.5 SSH服务配置

SSH是嵌入式Linux开发的标配。你想想看,每次都要打开虚拟机界面操作,多麻烦。用SSH从Windows连过去,直接在终端里操作,效率高得多。

1.5.1 安装与启动SSH服务

# 安装OpenSSH Server
sudo apt install -y openssh-server

# 检查服务状态
sudo systemctl status ssh

# 如果没启动,手动启动
sudo systemctl start ssh

# 设置开机自启
sudo systemctl enable ssh

1.5.2 SSH配置优化

默认配置够用,但有几个地方我建议改一下:

sudo vim /etc/ssh/sshd_config

关键配置项:

配置项 推荐值 说明
Port 22 默认端口,安全要求高可改
PermitRootLogin no 禁止root直接登录,用普通用户+sudo
PasswordAuthentication yes 允许密码登录(开发环境方便)
PubkeyAuthentication yes 允许密钥登录(推荐)
# 修改后重启服务
sudo systemctl restart ssh

1.5.3 从Windows连接SSH

Windows 10/11自带OpenSSH客户端,直接命令行就能连:

# 在Windows PowerShell或CMD中
ssh username@192.168.1.100

# 首次连接会提示确认指纹,输入yes
# 然后输入密码,搞定

如果你用VS Code,装个Remote - SSH插件,可以直接在VS Code里编辑虚拟机中的代码,非常方便。我现在的开发流程就是:Windows上开VS Code,SSH连到Ubuntu虚拟机,直接在远程终端里编译、调试。

进阶技巧: 配置SSH密钥登录,省去每次输密码的麻烦。
# 在Windows上生成密钥对
ssh-keygen -t rsa -b 4096

# 将公钥复制到虚拟机
ssh-copy-id username@192.168.1.100

# 之后登录就不用密码了
ssh username@192.168.1.100

1.6 本章知识体系总览

下面这张图把本章的核心内容串起来了,你可以对照着检查自己有没有遗漏:

嵌入式Linux开发环境搭建 - 知识体系 Windows宿主机 VMware Workstation Ubuntu 22.04 LTS 核心配置模块 系统更新 apt update/upgrade 换国内源 开发工具 build-essential git/vim/cmake 网络配置 桥接/NAT 静态IP SSH服务 openssh-server 密钥登录 环境验证清单 ✅ 虚拟机网络连通 ping 8.8.8.8 ✅ SSH远程登录 ssh user@ip ✅ 编译环境就绪 gcc --version 💡 建议:完成每一步后拍快照,方便回退

1.7 环境验证

配置完成后,我习惯做一次完整的验证,确保所有环节都通了:

# 1. 检查网络连通性
ping -c 4 8.8.8.8
ping -c 4 baidu.com

# 2. 检查SSH服务
sudo systemctl status ssh | grep "active (running)"

# 3. 检查开发工具
gcc --version
make --version
git --version

# 4. 检查内核头文件(后续编译驱动需要)
ls /lib/modules/$(uname -r)/build

如果以上命令都正常输出,恭喜你,环境搭建完成了。

我的经验: 环境搭建这一步,宁可多花半小时验证,也不要急着往下走。我见过太多人后面编译驱动时报错"找不到头文件"、"网络不通"、"SSH连不上",回头排查才发现是环境没配好。一步到位,后面省心。