基于项目要求,某段代码只能在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
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
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