ubuntu20.04 编译内核源码5.15.58

现在的内核版本:

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

ubuntu20.04 编译内核源码5.15.58_第1张图片 

如果下载网络过慢,可以下载: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

ubuntu20.04 编译内核源码5.15.58_第2张图片

ubuntu20.04 编译内核源码5.15.58_第3张图片 

 ubuntu20.04 编译内核源码5.15.58_第4张图片

 ubuntu20.04 编译内核源码5.15.58_第5张图片

编译内核源码

执行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

删掉双引号中的内容(保留双引号):
 

ubuntu20.04 编译内核源码5.15.58_第6张图片

 安装驱动

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

ubuntu20.04 编译内核源码5.15.58_第7张图片

在 ./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

 ubuntu20.04 编译内核源码5.15.58_第8张图片

 重启:

内核替换成功:

ubuntu20.04 编译内核源码5.15.58_第9张图片

 

你可能感兴趣的:(操作系统,ubuntu,linux,运维)