【linux系列】内核编译最新教程+常见问题总结

【linux系列】内核编译最新教程+常见问题总结

【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 保存

编译内核

安装 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

| ^~~~~~~~~~~~~~~

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加入

相关推荐

别把头痛当小事!细数12 类头痛关联疾病
mobile365体育投注备用

别把头痛当小事!细数12 类头痛关联疾病

📅 06-29 👁️ 3973
联通用户选择搬瓦工VPS的QNET、MCOM还是CN2机房?
nba365直播现场视频直播

联通用户选择搬瓦工VPS的QNET、MCOM还是CN2机房?

📅 07-03 👁️ 617
“90后、00后”失眠了?为何他们睡不着、睡不好、睡不醒?_手机网易网