由于科研需要,想修自己修改源代码(或者配置文件)后安装Linux内核。此处修改的内核是Linux 5.19.7。
uname -r
dpkg --get-selections|grep linux
ls /boot | grep vmlinuz
和
ls /boot|grep initrd
也可以直接查询grub配置文件:
/boot/grub/grub.cfg
里面的"menuentry"后面的就是启动项,出现的顺序就是启动顺序:
grep menuentry /boot/grub/grub.cfg
方便查看安装新内核后启动执行到哪一步卡住了。
参考:https://www.jianshu.com/p/e40a14efa70f
编辑“/etc/default/grub"文件:
原文件:
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=""
参考:https://zhuanlan.zhihu.com/p/437506971
sudo make deb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion)-1
ls ../*.deb
出现这四个包就是成功了:
把这四个包一起放在一个文件夹里,进入这个文件夹,安装它们:
sudo dpkg -i *deb
成功安装后重启,进入系统后再次查询当前使用的内核版本,成功!
uname -r
# 5.19.7-custom
make
sudo make modules_install
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!”,如下图:
通过旧内核进入系统后,发现可以在grub启动选项中找到新内核,但是无法通过命令“dpkg --get-selections|grep linux”查到新内核。
目测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-*-*.*.*-**-*(*号用实际情况改写)
清理。