【linux系列】内核编译最新教程+常见问题总结
- 编译环境
- 环境准备
- 编译准备
- 修改配置
- linux 提供的三种配置命令
- 使用 gconfig 配置
- 编译内核
- 安装内核
- 载入新内核
- 检查内核
- 常见问题
编译环境
- 虚拟机:
VMware workstation pro 16
- 虚拟机操作系统:
ubuntu-20.04.3-desktop-amd64
- 原系统内核版本:
5.11.0-46-generic
- 内核源码版本:
5.11.1
环境准备
- 安装VMware虚拟机并创建虚拟机
- 安装Ubuntu系统
- 下载内核源码
- 新编译的内核源码版本建议和原系统内核版本相近(大版本一致)
- 查看系统内核版本命令
uname -r
编译准备
- 建议将内核源码移动到
/usr/src/
下
sudo cp linux-5.11.1.tar.xz /usr/src/
- 切换目录到
/usr/src/
下
cd /usr/src/
- 将内核源码解压,这里使用的是
linux-5.11.1.tar.xz
,.xz
为双重压缩,因此先使用xz命令
解压
sudo xz -d linux-5.11.1.tar.xz
- 然后使用
tar命令
解压
sudo tar -xf linux-5.11.1.tar
- 切换到
linux-5.11.1
目录下
cd linux-5.11.1
修改配置
linux 提供的三种配置命令
// 不建议使用
sudo make config
// 建议使用(图形界面,键盘操作)
sudo make menuconfig
// 强烈建议使用(图形界面,鼠标操作)
sudo make gconfig
使用 gconfig 配置
- 安装
make
sudo apt install make
- 安装
gcc
sudo apt install gcc
- 安装
gtk+-2.0
、gmodule-2.0
和libglade-2.0
sudo apt install libgtk2.0-dev libglib2.0-dev libglade2-dev
- 安装
flex
sudo apt install flex
- 安装
bison
sudo apt install bison
- 启动 gconfig
sudo make gconfig
- 如果需要修改配置可以在 gconfig中图形化进行设置,在这里需要注意,配置选项有时分为三类,分别对应
N
、M
和Y
N
未选中,即编译时不加入,gconfig中为不选中M
编译成模块,gconfig中选中时为-
表示Y
编译入内核,gconfig中选中时为√
表示
- 配置好后点击
Save
即可保存配置,生成.config
文件 - 通常源码所带的默认配置所需编译的内核和模块很多,编译一次时间大约在 2-3小时左右(与虚拟机的配置和电脑的性能有关)
- 因此在开发中遇到需要编译内核的情况,往往对内核进行裁剪,这里我准备了一份裁剪过的内核配置(裁剪的较多,很多模块缺失,谨慎使用)
- 使用方式:
- 【建议】先使用 gconfig 生成
.config
文件,并做好备份 - 下载 .config(Google 云端硬盘) 或者.config(百度网盘 提取码 2022 )后替换原本内核中的
.config
- 执行
sudo make gconfig
检查是否替换成功,点击Save
保存
- 【建议】先使用 gconfig 生成
编译内核
- 安装
ssl
sudo apt install libssl-dev
- 安装
elf
sudo apt install libelf-dev
- 执行编译命令
sudo make -j4
- 编译时间大概为半小时,开把游戏,倒杯茶,走几圈。
- 编译成功如下图
安装内核
- 安装模块
sudo make modules_install
- 安装成功如下图
- 安装内核
sudo make install
- 安装成功如下图
载入新内核
-
重启 Ubuntu
reboot
-
系统会默认将新安装的内核作为 grub 的第一个启动项
-
如果想要自行切换不同内核,在出现载入进度条时,点击
shift
-
进入 grub 后选择
ubuntu 高级选项
-
回车进入后,上下选择自己想要进入的内核,回车进入
检查内核
-
检查内核版本
uname -r
-
结果如下
常见问题
sudo: make:找不到命令
解决办法: 安装 make
/bin/sh: 1: gcc: not found
make[1]: *** [scripts/Makefile.host:95:scripts/basic/fixdep] 错误 127
make: *** [Makefile:534:scripts_basic] 错误 2
解决办法: 安装 gcc
*
* Unable to find the GTK+ installation. Please make sure that
* the GTK+ 2.0 development package is correctly installed.
* You need gtk+-2.0 gmodule-2.0 libglade-2.0
*
make[1]: *** [scripts/kconfig/Makefile:204:scripts/kconfig/gconf-cfg] 错误 1
make: *** [Makefile:601:gconfig] 错误 2
解决办法: 安装 gtk+-2.0
、gmodule-2.0
和 libglade-2.0
/bin/sh: 1: flex: not found
make[1]: *** [scripts/Makefile.host:9:scripts/kconfig/lexer.lex.c] 错误 127
make: *** [Makefile:601:gconfig] 错误 2
解决办法: 安装 flex
/bin/sh: 1: bison: not found
make[1]: *** [scripts/Makefile.host:17:scripts/kconfig/parser.tab.h] 错误 127
make: *** [Makefile:601:gconfig] 错误 2
解决办法: 安装 bison
scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: 没有那个文件或目录
21 | #include <openssl/bio.h>
| ^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:95:scripts/extract-cert] 错误 1
make[1]: *** 正在等待未完成的任务....
make: *** [Makefile:1185:scripts] 错误 2
解决办法: 安装 ssl
error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel
make: *** [Makefile:1222:prepare-objtool] 错误 1
解决办法: 安装 elf
进入initramfs
alert:uuid=xxxxxx does not exist,
ls /dev下没有sda
原因分析: 内核裁剪过度,将 SCSI 模块裁剪,MPT模块裁剪
解决办法: 重新修改内核配置,将 Device Drivers下,
- Fusion MPT device suppot中所有模块加入
- SCSI device support下与 SCSI 有关的模块加入
- SCSI device support下 SCSI low-level drivers 下 LSI MPT Fusion SAS 3.0 & SAS 2.0 Device Driver加入
更多推荐
【linux系列】内核编译最新教程+常见问题总结
发布评论