2、主机环境准备:安装Ubuntu 22.04 LTS、配置国内软件源、安装基础开发包
说实话,很多新手在配置内核编译环境时,第一步就栽了跟头。不是系统版本不对,就是软件源慢得像蜗牛爬。我当年刚入行时也吃过这个亏——装了个Ubuntu 20.04,结果某些内核特性死活编译不过,折腾了两天才发现是工具链版本太老。
所以这一节,咱们把地基打牢。你想想看,盖楼如果地基歪了,后面再努力也是白搭。
2.1 为什么选Ubuntu 22.04 LTS?
我个人习惯用LTS版本做开发。为什么?稳定。Ubuntu 22.04 LTS(Jammy Jellyfish)的内核是5.15,GCC是11.x,这套组合拳打下来,编译Linux 5.x到6.x的内核都毫无压力。
你可能会问:「用更新的Ubuntu 24.04不行吗?」行,当然行。但我在项目中遇到过几次,新版本的工具链太激进,反而对老内核不友好。22.04是个平衡点——够新,也够稳。
| 特性 | Ubuntu 22.04 LTS | 说明 |
|---|---|---|
| 内核版本 | 5.15 | 支持主流内核编译 |
| GCC版本 | 11.2 | 兼容性好,bug少 |
| 支持周期 | 2027年4月 | 长期维护,省心 |
| 软件包数量 | 6万+ | 基本不用自己编译依赖 |
2.2 安装Ubuntu 22.04 LTS
安装过程我就不啰嗦了,网上教程一抓一大把。但有几个关键点我得提醒你:
- 磁盘分区:建议给根目录至少50GB。我见过有人只分20GB,装完开发包就红了脸。
- 交换分区:如果你的内存小于8GB,交换分区设成内存的2倍。编译内核时内存吃紧,交换分区能救命。
- 用户名:别用中文。有些工具对中文路径支持不好,到时候报错你都不知道错在哪。
⚠️ 注意: 如果你用的是虚拟机,记得给CPU分配至少2核,内存4GB以上。我曾经用1核2GB的虚拟机编译内核,结果等了整整一个下午还没编译完——那滋味,别提了。
2.3 配置国内软件源
装完系统第一件事是什么?换源!默认的Ubuntu源在国外,下载速度慢得让人抓狂。我当年第一次编译内核时,光下载依赖包就花了半小时,后来换了国内源,3分钟搞定。
这里以阿里云源为例,操作很简单:
# 备份原源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑源文件
sudo vim /etc/apt/sources.list
把里面的内容全部替换成以下内容:
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
然后更新:
sudo apt update
sudo apt upgrade -y
💡 小技巧: 如果你在清华大学或者中科大附近,用他们的源速度更快。清华源:
mirrors.tuna.tsinghua.edu.cn,中科大源:mirrors.ustc.edu.cn。我个人习惯用阿里云,稳定,很少出幺蛾子。
2.4 安装基础开发包
好了,源配好了,接下来装编译内核必需的工具。这些包一个都不能少,少了编译时就会报错。我列个清单:
| 包名 | 作用 | 备注 |
|---|---|---|
| build-essential | GCC、G++、make等基础编译工具 | 必装 |
| git | 获取内核源码 | 必装 |
| wget | 下载文件 | 备用 |
| flex | 词法分析器 | 内核配置需要 |
| bison | 语法分析器 | 内核配置需要 |
| libncurses-dev | 提供menuconfig图形界面 | 必装 |
安装命令很简单,一行搞定:
sudo apt install -y build-essential git wget flex bison libncurses-dev
装完之后,验证一下:
gcc --version
make --version
git --version
flex --version
bison --version
如果每个命令都能正常输出版本号,说明环境准备好了。
🔑 核心要点: 这6个包是编译内核的「最小集合」。少了任何一个,你在执行
make menuconfig 或者 make 时都会报错。我曾经帮一个同事排查问题,他折腾了半天没找到原因,最后发现是没装 libncurses-dev,menuconfig界面根本打不开。
2.5 避坑指南
嗯,这里我要多说几句。安装过程中有几个坑,我当年都踩过:
- 坑一:apt update报错。如果你发现
apt update报错,多半是源写错了。检查一下jammy是不是写成了jammmy或者22.04。Ubuntu的版本代号是固定的,不能乱写。 - 坑二:缺少依赖。有时候
apt install会提示缺少某些依赖。别慌,先执行sudo apt --fix-broken install,然后再装一次。 - 坑三:GCC版本不对。如果你用的是Ubuntu 20.04,GCC默认是9.x,编译某些新内核可能会报错。这时候可以用
apt install gcc-11手动装GCC 11。
⚠️ 特别注意: 千万不要用
apt remove --purge 乱删包。我见过有人为了「清理空间」,把 build-essential 给删了,结果整个编译环境崩了,最后只能重装系统。
2.6 本章知识体系
为了让你更直观地理解这一章的内容,我画了一张流程图:
这张图把整个流程串起来了。从装系统到配源,再到装包和验证,每一步都有坑,但只要你按部就班来,就不会出问题。
好了,环境准备好了。下一节咱们就开始搞真正的内核编译了。记住,基础打牢了,后面才能走得稳。