1. 课程导入
做嵌入式Linux开发,第一件事就是把开发环境搭好。很多人觉得这步简单,随便装个虚拟机就行。但我见过太多人因为环境没配好,后面编译驱动时各种报错,折腾好几天才发现是虚拟机磁盘不够、网络没通、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为例)
- 从VMware官网下载Workstation Pro 17 for Windows
- 双击安装包,一路Next,注意勾选"增强型键盘驱动程序"
- 安装完成后重启电脑
- 打开VMware,输入个人免费许可证(官网注册获取)
1.2 创建Ubuntu虚拟机
Ubuntu版本我推荐22.04 LTS。为什么?因为这是目前嵌入式Linux社区最广泛使用的长期支持版本,交叉编译工具链、驱动框架都对这个版本做了充分测试。我之前用20.04,后来发现有些新工具链对glibc版本有要求,就切到22.04了。
虚拟机配置建议
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| CPU核心数 | 4 | 至少2核,编译内核时多核有用 |
| 内存 | 8GB | 4GB勉强够,8GB才舒服 |
| 磁盘容量 | 80GB | 建议动态分配,但上限设大点 |
| 网络模式 | NAT | 后续可改桥接 |
创建虚拟机的具体步骤:
- 点击"创建新的虚拟机" → 选择"典型(推荐)"
- 选择"安装程序光盘映像文件(iso)",指向下载好的Ubuntu 22.04 ISO
- 设置用户名和密码(记住!后面SSH要用)
- 指定虚拟机名称和位置(磁盘空间要够)
- 指定磁盘容量,选择"将虚拟磁盘拆分成多个文件"
- 点击"自定义硬件",按上表调整CPU、内存
- 完成,启动虚拟机开始安装Ubuntu
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:内核解析配置时需要
1.4 网络配置
网络配置是环境搭建中最容易出问题的地方。虚拟机网络模式有三种:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| NAT | 虚拟机共享宿主机IP上网,外部无法直接访问虚拟机 | 仅需虚拟机上网,不需要外部访问 |
| 桥接 | 虚拟机与宿主机在同一网段,可被外部访问 | 需要SSH远程连接、NFS挂载等 |
| 仅主机 | 虚拟机只能与宿主机通信 | 调试、隔离环境 |
我建议开发阶段用桥接模式。为什么?因为后面你要从Windows上用SSH连到虚拟机编译代码,或者用VS Code Remote Development远程开发,桥接模式最方便。
配置桥接网络
- 在VMware中关闭虚拟机
- 右键虚拟机 → 设置 → 网络适配器
- 网络连接选择"桥接模式"
- 启动虚拟机,检查网络
# 查看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
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虚拟机,直接在远程终端里编译、调试。
# 在Windows上生成密钥对
ssh-keygen -t rsa -b 4096
# 将公钥复制到虚拟机
ssh-copy-id username@192.168.1.100
# 之后登录就不用密码了
ssh username@192.168.1.100
1.6 本章知识体系总览
下面这张图把本章的核心内容串起来了,你可以对照着检查自己有没有遗漏:
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
如果以上命令都正常输出,恭喜你,环境搭建完成了。