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 本章知识体系

为了让你更直观地理解这一章的内容,我画了一张流程图:

主机环境准备流程 安装Ubuntu 22.04 LTS 配置国内软件源 安装基础开发包 验证环境是否就绪 选择LTS版本 磁盘≥50GB 阿里云/清华/中科大 6个核心包 检查版本号 ⚠️ 不要用中文用户名 ⚠️ 备份原sources.list ⚠️ 缺一不可

这张图把整个流程串起来了。从装系统到配源,再到装包和验证,每一步都有坑,但只要你按部就班来,就不会出问题。

好了,环境准备好了。下一节咱们就开始搞真正的内核编译了。记住,基础打牢了,后面才能走得稳。


专注资料整理