ubuntu降内核到指定版本

1,618 阅读1分钟

基于项目要求,某段代码只能在linux内核版本4上运行,可是我的内核版本却是5.4,代码无法编译,所以不得不降级,看了网上的一些教程,大同小异,并且都有一些坑,所以将我成功的过程发出来,以便其它人遇到同样的问题能够解决。

1.首先查看自己的内核版本

liyunxiao@ubuntu:~$ uname -r
5.4.0-91-generic

2.查看当前已经安装的 Kernel Image

linux-image-5.4.0-84-generic			deinstall
linux-image-5.4.0-90-generic			install
linux-image-5.4.0-91-generic			install
linux-image-generic-hwe-18.04			install

3.查询当前软件仓库可以安装的 Kernel Image 版本,如果没有预期的版本,则需要额外配置仓库。

apt-cache search linux | grep linux-image

image.png 4.安装指定版本的 Kernel Image 和 Kernel Header。

sudo apt-get install linux-headers-4.15.0-76-generic linux-image-4.15.0-76-generic

5.查看当前的 Kernel 列表

grep menuentry /boot/grub/grub.cfg

image.png

6.修改 Kernel 的启动顺序:如果安装的是最新的版本,那么默认就是首选的;如果安装的是旧版本,就需要修改 grub 配置,将GRUB_DEFAULT=0修改为GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-76-generic"。

$ vi /etc/default/grub

# GRUB_DEFAULT=0
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-76-generic"

7.生效配置。

$ update-grub

8.到了这一步就比较关键,看到大部分教程都让重启,所以踩了坑,这里去把其它内核文件全部删除

  find . -name "*5.4.0" |xargs rm -rfv

9.重启后uname -r查看当前内核版本

备注: 如果系统存在多个内核版本,需要进行删除 可以先查询不包括当前内核版本的其它所有内核版本:

$ dpkg -l | tail -n +6| grep -E 'linux-image-[0-9]+'| grep -Fv $(uname -r)
...
ii  linux-image-4.15.0-101-generic         4.15.0-101.102                                  amd64        Signed kernel image generic

Kernel 状态:

rc:表示已经被移除。

ii:表示符合移除条件(可移除)。

iU:已进入 apt 安装队列,但还未被安装(不可移除)。 删除指定的 Kernel:

dpkg --purge linux-image-4.4.0-21-generic