现在的内核版本:
ok@ok-VirtualBox:~$ uname -a
Linux ok-VirtualBox 5.15.0-41-generic #44~20.04.1-Ubuntu SMP Fri Jun 24 13:27:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
5.15.0-41
下载新的内核源码:The Linux Kernel Archives
如果下载网络过慢,可以下载:linuxsrc5.15.58-Linux文档类资源-CSDN下载
1 安装环境
sudo apt-get install ncurses-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libelf-dev
sudo apt-get install libssl-dev
sudo apt install dwarves
sudo apt-get install zstd
解压源码
xz -d linux-5.15.58.tar.xz
tar -xvf linux-5.15.58.tar
2 配置内核相关参数项
首先进入代码根目录
ok@ok-VirtualBox:~/Downloads$ cd linux-5.15.58/
把本机config配置拷贝到我们前面解压出来的内核源码根目录下:
cp -v /boot/config-$(uname -r) .config
如果之前编译过内核源码,由于出错或者其它原因想重新编译,则需要先清理下之前的编译结果,执行:
make mrproper
采用基于文本的菜单配置,适用性强,也可用于远程编译内核
sudo make menuconfig
编译内核源码
执行make命令即可,但是内核源码庞大,编译下来很费时间(跟机器性能有关,一般需要数十分钟到几个小时),可以make加上-jn选项多线程编译内核来加速内核编译,如:
# j后面数字,可以设置成cpu个数
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make -j8
如果报错:
编译内核错误——*** 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list” 需求。 停止
sudo gedit .config
删掉双引号中的内容(保留双引号):
安装驱动
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make modules_install
完成:
在/lib/moudles下生成了:
当前版本:
生成内核压缩镜像文件
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# make bzImage
在 ./arch/x86/boot 下生成bzImage
bzImage:是压缩的内核镜像文件,bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。比zImage有更高的压缩率。
vmlinuz:是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。一般是一个软链接。但是,它已经丢失了调试信息等,不可用于调试,这就是为什么perf和systemtap等内核级别的调试软件安装的时候,需要重新编译内核的原因。同理,解压缩vmlinuz是可以得到vmlinux的。但是失去了调试信息。相对于vmlinux,它增加了解压缩和boot的部分
安装
拷贝镜像文件:
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cp arch/x86/boot/bzImage /boot/vmlinuz-5.15.58
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cp .config /boot/config-5.15.58
进入/lib/modules/5.15.58/
root@ok-VirtualBox:/home/ok/Downloads/linux-5.15.58# cd /lib/modules/5.15.58/
root@ok-VirtualBox:/lib/modules/5.15.58# ls
build modules.builtin.bin modules.softdep
kernel modules.builtin.modinfo modules.symbols
modules.alias modules.dep modules.symbols.bin
modules.alias.bin modules.dep.bin source
modules.builtin modules.devname
modules.builtin.alias.bin modules.order
root@ok-VirtualBox:/lib/modules/5.15.58# update-initramfs -c -k 5.15.58
更改系统启动参数
root@ok-VirtualBox:/lib/modules/5.15.58# update-grub
重启:
内核替换成功: