Ubuntu18.04 LTS从源码编译安装Linux 5.x内核小结

引言

由于科研需要,想修自己修改源代码(或者配置文件)后安装Linux内核。此处修改的内核是Linux 5.19.7。

查询现有信息

(1)查询我们当前使用的内核:

uname -r

(2) 查询系统中安装了多少内核:

dpkg --get-selections|grep linux

(3) 查询在grub引导界面中可以选择的内核启动项:

ls /boot | grep vmlinuz

ls /boot|grep initrd

也可以直接查询grub配置文件:

/boot/grub/grub.cfg

里面的"menuentry"后面的就是启动项,出现的顺序就是启动顺序:

grep menuentry /boot/grub/grub.cfg

(4)控制台显示启动信息

方便查看安装新内核后启动执行到哪一步卡住了。

参考:https://www.jianshu.com/p/e40a14efa70f

编辑“/etc/default/grub"文件:

  1. 注释GRUB_CMDLINE_LINUX_DEFAULT
  2. GRUB_CMDLINE_LINUX后写上text。
  3. 去掉GRUB_TERMINAL=console的注释(我未使用)

原文件:

GRUB_CMDLINE_LINUX_DEFAULT=”quiet"

GRUB_CMDLINE_LINUX=""

...

#GRUB_TERMINAL=console

修改后的文件:

#GRUB_CMDLINE_LINUX_DEFAULT=”quiet"

GRUB_CMDLINE_LINUX="text"

...

GRUB_TERMINAL=console

别忘记更新grub:

sudo update_grub2

环境配置

需要安装dwarves,否则编译vmlinux可能会失败。

sudo apt-get install dwarves

【我只遇到了这一个失败,可能其他依赖的环境已经装好了。】

源码下载

直接去官网好像只能下载最新版的,我在这个网站上下载了Linux 5.19.7的源代码。

下载好后解压,进入源码目录

tar xvJf ./linux-5.19.7.tar.xz
cd linux-5.19.7

清理上次编译残留的所有中间文件

make mrproper

这里会把config文件删掉,所以先清理再配置内核。

配置内核

方便起见,先复制现有的配置文件”打底“:

cp /boot/config-`uname -r` .config

编辑配置文件:

vim .config

找到"CONFIG_SYSTEM_TRUETED_KEYS"和”CONFIG_SYSTEM_REVOCATION_KEYS",把里面的内容修改为空,以免编译失败。

原文件:

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-revoked-certs.pem"
...
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-certs.pem"

修改后的文件:

CONFIG_SYSTEM_TRUSTED_KEYS=""
...
CONFIG_SYSTEM_REVOCATION_KEYS=""

编译、安装方法一:压缩成deb包(成功)

参考:https://zhuanlan.zhihu.com/p/437506971

(1) 编译内核(会花费1~2小时)

sudo make deb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion)-1

(2) 查看deb包

ls ../*.deb

出现这四个包就是成功了:

(3)安装内核 

把这四个包一起放在一个文件夹里,进入这个文件夹,安装它们:

sudo dpkg -i *deb

成功安装后重启,进入系统后再次查询当前使用的内核版本,成功!

uname -r
# 5.19.7-custom

编译、安装方法二:make install(失败)

(1) 编译内核(make即make bzImage + make modules)

make

(2) 把对应模块拷贝到目录下

sudo make modules_install

(3) 安装

sudo make install

重启后可以在grub引导项中看到我们新安好的内核,但是进入后一直黑屏(或者紫屏),没有出现Ubuntu欢迎界面,也无法进入tty模式(ctrl+alt+F1-8均失败)

通过”advance Ubuntu“进入后,无论有无recovery模式,均卡在”加载初始化内存盘“这一步,也没有Recovery Menu,同时没有输出任何控制台启动信息。

注:若可以进入recovery menu,则以下博客可以参考(未验证)

https://blog.csdn.net/zkw12312/article/details/99656285

https://blog.csdn.net/u013810296/article/details/86683559

把GNOME改为lightdm之后也没用。

按照网上的办法,按"e" 编辑recovey模式,把倒数第三行的”ro quiet splash“修改为”rw init=/bin/bash"之后,则提示“No bootable devices were found!”,如下图:

Ubuntu18.04 LTS从源码编译安装Linux 5.x内核小结_第1张图片

通过旧内核进入系统后,发现可以在grub启动选项中找到新内核,但是无法通过命令“dpkg --get-selections|grep linux”查到新内核。

(4)安装失败的可能原因

目测initrd.img出问题了,不然应该不会一直卡在“加载初始化内存盘”,连recovery模式都进不去。

这个人的情况和我有点类似,据他所说是显卡驱动出现问题,但我还没验证。

也可能是源代码没有复制到/usr/src目录下安装?

删除多余内核

参考:(1条消息) Ubuntu删除多余旧内核_chengkni的博客-CSDN博客_ubuntu删除旧内核

需要删除header和image:

sudo apt-get purge linux-image-*.*.*-**(*号用你想删除的实际情况改写)
sudo apt-get purge linux-headers-*.*.*-**(*号用你想删除的实际情况改写)

删除好后查看是否删除成功:

dpkg --get-selections|grep linux

 有的内核后面会显示deinstall,则需要通过

sudo dpkg -P linux-*-*.*.*-**-*(*号用实际情况改写)  

清理。

你可能感兴趣的:(内核编译,linux,ubuntu)