一、开发环境选型:虚拟机还是双系统?
做Linux内核开发,第一个要面对的问题就是:环境怎么搭?
我个人习惯用虚拟机。为什么?因为方便。你想想看,写内核代码免不了要频繁编译、重启、甚至把系统搞崩。虚拟机里搞坏了,拍个快照就恢复,省心。双系统虽然性能更好,但切换起来太麻烦,而且一旦引导出问题,修复起来够你喝一壶的。
当然,如果你要做性能敏感的实验,比如测量内核调度延迟、跑实时性测试,那还是双系统靠谱。虚拟机毕竟有虚拟化层,时间精度会受影响。
嗯,这里我直接给结论:
- 日常开发、调试、学习 → 虚拟机(VMware 或 VirtualBox)
- 性能测试、硬件相关实验 → 双系统
下面我分别讲两种方案怎么搭。
二、虚拟机方案:VMware 与 VirtualBox
2.1 选哪个?
这两个我都用过。VMware Workstation 功能更全,3D加速、快照管理、网络配置都更顺手。VirtualBox 免费开源,够用,但偶尔会有小毛病。
我个人建议:
- 如果你在公司用,有预算 → VMware
- 如果自己学习,不想花钱 → VirtualBox
两者安装过程大同小异,我以 VirtualBox 为例讲一下关键步骤。
2.2 安装 VirtualBox
去官网下载对应系统的安装包,一路下一步就行。这里有个坑:
安装完后,记得去「设置 → 网络」里添加一个「仅主机(Host-Only)网络」。这个后面共享文件和 SSH 连接会用到。
2.3 创建虚拟机
点击「新建」,按以下配置:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 内存 | 4GB 以上 | 编译内核很吃内存,2GB 会卡死 |
| CPU | 2 核以上 | 多核编译能快不少 |
| 磁盘 | 40GB 以上 | 内核源码 + 编译产物,20GB 不够用 |
| 网络 | 桥接 + 仅主机 | 一个上网,一个本地通信 |
磁盘类型选 VDI,动态分配。别选固定大小,不然一开始就占满硬盘。
三、安装 Ubuntu Server
做内核开发,我推荐用 Ubuntu Server LTS 版本,比如 22.04 或 24.04。桌面版没必要,浪费资源。而且服务器版默认不装图形界面,更干净。
3.1 下载镜像
去 ubuntu.com/download/server 下载 ISO 文件。注意选 LTS 版本,别追新。LTS 稳定,社区支持好,遇到问题容易搜到答案。
3.2 安装过程
挂载 ISO,启动虚拟机。安装步骤很简单,我挑几个关键点说:
- 磁盘分区:选「Use Entire Disk」就行,不用手动分区。除非你要搞 LVM 或加密。
- 软件包选择:只勾选「OpenSSH server」和「Standard system utilities」。其他都不要,后面需要什么再装。
- 用户名:建议用简单名字,比如
dev。后面 SSH 和 SCP 方便。
192.168.56.101 这种 Host-Only 网段的地址,这样宿主机和虚拟机通信不走外网,安全又稳定。
3.3 安装后配置
装完重启,先做几件事:
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装编译工具链
sudo apt install build-essential flex bison libncurses-dev libssl-dev libelf-dev
# 安装 Git
sudo apt install git
# 安装网络工具
sudo apt install net-tools
这些是编译内核的必备工具。缺了任何一个,编译都会报错。我刚开始学的时候,就因为少装了 libssl-dev,卡了半天。
四、双系统引导配置
如果你决定用双系统,那引导配置是关键。搞不好 Windows 就进不去了。
4.1 分区准备
在 Windows 里用磁盘管理,压缩出一个空闲分区。建议 60GB 以上。不要格式化,留给 Ubuntu 安装程序用。
4.2 安装 Ubuntu
用 U 盘启动 Ubuntu 安装盘。安装时选「Install Ubuntu alongside Windows Boot Manager」。安装程序会自动处理引导。
如果安装后只能进 Ubuntu,进不去 Windows,别慌。在终端执行:
sudo update-grub
这个命令会重新扫描硬盘上的操作系统,更新 GRUB 菜单。重启后应该就能看到 Windows 选项了。
4.3 手动修复引导
如果 update-grub 没用,那就手动修:
# 查看分区
sudo fdisk -l
# 挂载 EFI 分区(通常是 /dev/nvme0n1p1 或 /dev/sda1)
sudo mount /dev/nvme0n1p1 /mnt
# 检查是否有 Windows 的 EFI 文件
ls /mnt/EFI/Microsoft
# 如果没有,需要从 Windows 恢复盘修复
嗯,这里不展开讲。双系统引导修复是个大话题,后面有专门章节讲。
五、网络与共享文件夹设置
环境搭好了,怎么把代码传进去?总不能每次都 U 盘拷吧。
5.1 网络配置
虚拟机里,我习惯配两个网卡:
- 网卡1(NAT):用来上网,下载软件包
- 网卡2(Host-Only):用来和宿主机通信,SSH、SCP 都走这个
在 VirtualBox 里,给虚拟机添加 Host-Only 网卡后,进系统配置:
# 查看网卡名称
ip link
# 编辑网络配置(Ubuntu 22.04 用 netplan)
sudo vim /etc/netplan/00-installer-config.yaml
配置文件内容:
network:
version: 2
ethernets:
enp0s3:
dhcp4: true
enp0s8:
addresses:
- 192.168.56.101/24
然后 sudo netplan apply 生效。之后你就可以从宿主机 SSH 过去了:
ssh dev@192.168.56.101
5.2 共享文件夹
VirtualBox 的共享文件夹功能,说白了就是让宿主机和虚拟机共用一个目录。我经常把内核源码放在共享文件夹里,两边都能编辑。
设置步骤:
- 虚拟机设置 → 共享文件夹 → 添加一个宿主机目录
- 勾选「自动挂载」和「固定分配」
- 进虚拟机,挂载共享文件夹:
# 安装增强功能
sudo apt install virtualbox-guest-utils
# 挂载(通常自动挂载到 /media/sf_xxx)
sudo mount -t vboxsf 共享文件夹名 /mnt/shared
# 如果权限不够,把自己加到 vboxsf 组
sudo usermod -aG vboxsf $USER
六、本章知识体系
下面这张图总结了本章的核心内容,帮你理清思路:
七、写在最后
环境搭建是第一步,也是最重要的一步。我见过太多人卡在环境上,还没开始写代码就放弃了。其实没那么复杂,按上面的步骤走,半小时就能搞定。
记住几个要点:
- 虚拟机里配双网卡,一个上网一个通信
- 共享文件夹别直接编译,拷到本地再编
- 双系统先备份,引导坏了有办法修
好了,环境搭好之后,下一章我们就要开始真正接触内核源码了。到时候我会讲怎么下载、阅读和第一次编译内核。
公众号:蓝海资料掘金营,微信deep3321