编译环境

  • 虚拟机: VMware workstation pro 16
  • 虚拟机操作系统: ubuntu-20.04.3-desktop-amd64
  • 原系统内核版本:5.11.0-46-generic
  • 内核源码版本:5.11.1

环境准备

编译准备

  • 建议将内核源码移动到 /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.0gmodule-2.0libglade-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界面

  • 如果需要修改配置可以在 gconfig中图形化进行设置,在这里需要注意,配置选项有时分为三类,分别对应 NMY
    • N 未选中,即编译时不加入,gconfig中为不选中
    • M 编译成模块,gconfig中选中时为 - 表示
    • Y 编译入内核,gconfig中选中时为 表示
  • 配置好后点击 Save 即可保存配置,生成 .config 文件
  • 通常源码所带的默认配置所需编译的内核和模块很多,编译一次时间大约在 2-3小时左右(与虚拟机的配置和电脑的性能有关)
  • 因此在开发中遇到需要编译内核的情况,往往对内核进行裁剪,这里我准备了一份裁剪过的内核配置(裁剪的较多,很多模块缺失,谨慎使用)
  • 使用方式

编译内核

  • 安装 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.0gmodule-2.0libglade-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 supportSCSI low-level driversLSI MPT Fusion SAS 3.0 & SAS 2.0 Device Driver加入
Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐