Linux内核构建和安装

引言

一直想了解和操作一波Linux内核构建和安装等相关知识,奈何在网上没有找到相应的好的讲解文档。因此自己去搜索了相应的书籍。强烈推荐这本书

Linux Kernel Programming: A comprehensive guide to kernel internals, writing kernel modules, and kernel synchronization

这本书详细讲解了内核的构建和安装,不过讲解的是5.4版本的内核。本文基于该书,总结一下 linux-5.15内核的构建和安装过程,以需要的时候能复习。

准备环境

本文所利用的虚拟机为 virtualbox虚拟机,其下载地址为Download VirtualBox

unbutun 20.0.4 TLS :提供的下载bt为 

ubuntu-20.04

virtualbox安装unbutun可参考:Oracle VM virtualbox安装Linux,并访问外网,和宿主机互通

源码下载

在完成上一节后,需要安装wget

sudo apt install wget

下载linux内核源码

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.1.tar.xz

解压缩内核源码到本地目录 详细可参考 如何解压缩 tar.xz 文件

tar -xvf linux-5.15.1.tar.xz

运行如下命令

sudo apt update

sudo apt install gcc make perl

sudo apt update

sudo apt install git fakeroot build-essential tar ncurses-dev tar xz-utils 

sudo apt install libssl-dev bc stress python3-distutils libelf-dev linux-headers-$(uname -r) 

sudo apt install bison flex libncurses5-dev util-linux net-tools linux-tools-$(uname -r) 

sudo apt install exuberant-ctags cscope sysfsutils gnome-system-monitor curl 

sudo apt install perf-tools-unstable gnuplot rt-tests indent tree pstree smem libnuma-dev 

sudo apt install numactl hwloc bpfcc-tools sparse flawfinder cppcheck tuna hexdump 

sudo apt install openjdk-14-jre trace-cmd virt-what

构建与安装

本次构建以及安装过程,需要给予你完成上述环境准备的基础之上进行。本文中的构建过程具体如下

1. 切换到相应的源码目录下,运行如下命令

lsmod > /tmp/mod.now

make LSMOD=/tmp/mod.now localmodconfig

上述命令会出现如下过程,红色圈中的只需要按 Enter键。

 最终会出现如下结果,说明此步运行正确。

同时在你的内核源码根路径下,会发现多了红色圆圈中的两个文件

2 运行如下命令,编辑相应的内核config文件

make menuconfig

该命令运行后会出现如下UI界面

关于这个UI界面的内容,如果后续有时间会写相应博客总结,目前先知道这是一个UI界面,且里面每个出现的均是相应的主菜单即可。其他的操作可以自己实验。

出现上述UI界面后,可参考如下表格,配置相应的config。该表格来自于Linux Kernel Programming: A comprehensive guide to kernel internals, writing kernel modules, and kernel synchronization

上述表格中具体说明如下

第一列为 配置项的说明

第二列为 配置项在UI界面中的路径

第三列为 配置项在.config文件中的变量名

第四列为 需要做的修改,如果y->n 表示你需要在相应的UI界面中找到相应配置项,并按下 空格键; 如果n->m 表示你需要找到相应配置项 按下m键。 关于n,m, y什么含义暂且不用理会,后续博客会讲解。

举例,通过UI界面来修改上述表格的第一行中的内容,在此我们改变相应的内容,改成-llkdqls01. 具体过程如下,

在主界面上,将光标移到如下高亮的部分

按enter键进入,出现如下界面 

根据表格路径找到相应的配置选项,如下所示

 按enter键进入后,显示如下方框,键入需要修改的内容,然后按enter键保存

 此后,会回到如下界面,选到红色方框中的save,并按enter键保存

至此,表格中的第一项配置设置完毕。剩下的配置只需要按照相应的配置来操作即可。

配置完成后可以通过如下命令,验证是否配置成功,譬如上述配置运行

grep CONFIG_LOCALVERSION .config

显示如下结果,表示配置成功

CONFIG_LOCALVERSION="-llkdqls01"
# CONFIG_LOCALVERSION_AUTO is not set

3 完成相应的配置后,开始构建内核,通过如下命令

make -j4

在构建的过程中,如果出现如下错误

make[1]: *** No rule to make target 'debian/canonical-revoked-certs.pem' , needed by certs/x509_revocation_list'. STOP. make: ***[Makefile:1851:certs] Error 2

可参考该解决方案:I am installing kernel in my ubuntu but getting an error

也即运行如下命令

scripts/config --disable SYSTEM_REVOCATION_KEYS

然后继续make,此后会等待较长时间。

4 安装内核模块(kernel modules)

完成构建后,运行如下命令

sudo make modules_install

如果此刻出现错误,则可参考Why virtualbox fails to install on Ubuntu20.04

解决方案为

sudo apt-get purge "^virtualbox-.*"

sudo apt-get autoremove && sudo apt-get autoclean && sudo apt-get clean

然后重新安装内核模块即可

5 生成initramfs image

在源代码根目录下运行如下命令

sudo make install

上述命令完成后,可以在/boot 目录下找到相应的initrd.img-5.15XXX的文件,表示生成成功。

6 修改GRUB 启动文件

先运行如下命令,对原生grub文件进行备份

sudo cp /etc/default/grub /etc/default/grub.orig

然后运行如下命令

sudo vim /etc/default/grub

将其内容修改为如下

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

#GRUB_DEFAULT=0
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.11.0-38-generic"
#GRUB_TIMEOUT_STYLE=menu
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

至此,所有准备工作构建完成,然后在你的虚拟机运行如下命令,使grub修改生效

sudo update-grub

安装新版内核

在你的虚拟机中,键入如下命令

sudo reboot

出现如下界面

 按enter键,出现如下页面

 出现了最新构建的内核,选择,并按enter,此后虚拟机会重启成功。

在虚拟机运行如下命令

uname -r

出现如下结果

 5.15.0-rc7llkdqls01

可知,最终我们构建并成功安装了最新内核。

总结

由于自己一直想研究内核,并且相信也有很多想研究内核,但想构建linux内核的同学,苦于网上找不到合适的构建安装教程,因此在我调研学习完后,便总结了该文档,希望能帮助感兴趣的同学构建linux内核。

关于文章中出现的一些术语,后续如果有时间会写相应的博客总结一下。此处就不再赘述了。

最后,祝愿大家都能享受构建,研究内核的乐趣。

附录

Ubuntu 20.04.3 LTS正式版iso镜像官方下载地址和bt种子(多种版本)

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qls315

感觉好可打赏几毛钱增强更新动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值