今天来做一个实验,目标如下:
把 Linux内核 5.11.0 编译安装成为 目前最稳定的Linux内核版本 5.15.11。
1、下载最新的linux内核
2、配置最新的linux内核
3、编译最新的linux内核
4、使用最新的 linux 内核启动 ubuntu
一、准备工作
1、先安装相关软件包。
命令如下:
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get update
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get upgrade
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install wget
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install build-essential
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install pkg-config
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install libgtk2.0-dev
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install libcanberra-gtk-module
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install glade libglade2-dev
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install flex bison
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install libssl-dev
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install libelf-dev
ubuntu@ubuntu-VirtualBox:~/桌面$ sudo apt-get install libncurses-dev
2、查看当前的linux内核版本。
命令如下:
ubuntu@ubuntu-VirtualBox:~$ uname -a
Linux ubuntu-VirtualBox 5.11.0-43-generic #47~20.04.2-Ubuntu SMP Mon Dec 13 11:06:56 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
二、下载并编译最新的linux内核
1、从 www.kernel.org 下载最新的 linux 内核
注意:目前Linux 稳定内核版本是 5.15.11,建议大家下载稳定版本的内核。
具体操作命令如下:
第一步:进入用户主目录
ubuntu@ubuntu-VirtualBox:~$ cd ~
ubuntu@ubuntu-VirtualBox:~$ pwd
/home/ubuntu
第二步:下载5.15.11最新Linux 稳定内核版本
ubuntu@ubuntu-VirtualBox:~$ sudo wget -c https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.11.tar.xz
第三步:解压
ubuntu@ubuntu-VirtualBox:~$ sudo tar xvJf linux-5.15.11.tar.xz
第四步:软链接
ubuntu@ubuntu-VirtualBox:~$ sudo ln -s `pwd`/linux-5.15.11 /usr/src/linux
2、配置内核特性
主要是配置最新的linux内核特性。
先给大家讲一点知识:
这步配置内核的方法有多种、每一个make就是一种方法、我们只在选其中一种就可以了:
make config:遍历选择所要编译的内核特性
make allyesconfig:配置所有可编译的内核特性
make allnoconfig:并不是所有的都不编译,而是能选的都回答为NO、只有必须的都选择为yes。
make menuconfig:这种就是打开一个文件窗口选择菜单,这个命令需要打开的窗口大于80字符的宽度,打开后就可以在里面选择要编译的项了
下面两个是可以用鼠标点选择的、比较方便哦:
make kconfig(KDE桌面环境下,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
menuconfig:使用这个命令的话、如果是新安装的系统就要安装gcc和ncurses-devel这两个包才可以打开、然后再里面选择就可以了、通这个方法也是用得比较多的:
或者
如果想方便点又不想用别的方法,那就复制当前系统上的 /boot/config-版本-平台,这个文件到/usr/src/linux/.config 覆盖这个文件,再改一下里面的配置信息;哪些用得着就保留。哪些用不着就删除了都可以。有什么新的也可以加进来,这就是按自己的需求来配置了。
注意:
这里建议大家用root用户来操作,因为普通用户操作的时候可能会提示没有权限。哪怕你用上“sudo”命令有时也没有用。
具体操作命令如下:
第一步:
为了方便,我就直接 复制当前系统上的 /boot/config-版本-平台,这个文件到 /usr/src/linux/.config 并覆盖它。
ubuntu@ubuntu-VirtualBox:~$ cd /usr/src/linux
ubuntu@ubuntu-VirtualBox:/usr/src/linux$ sudo cp /boot/config-`uname -r` .config
第二步:
make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config
root@ubuntu-VirtualBox:/usr/src/linux$ make oldconfig
第三步:配置内核特性(选择一种方法就可以了),一般有以下几种方法,上面也讲过。
make config:遍历选择所要编译的内核特性
make allyesconfig:配置所有可编译的内核特性
make allnoconfig:并不是所有的都不编译
make menuconfig:这种就是打开一个文件窗口选择菜单
make kconfig(KDE桌面环境下,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
为了方便,这里我就直接用“make gconfig”来操作。
root@ubuntu-VirtualBox:/usr/src/linux$ make gconfig
3、用“gconfig”来自定义内核配置
既然是自定义,我就做几个简单的示例吧!
第一步:将你的 ID 添加为本地版本
第二步:禁用二进制仿真
如果不禁用,会提示“arch/x86/Makefile:148: CONFIG_X86_X32 已启用但不支持 binutils“错误。
第三步:保存自定义的配置,可以直接如图下这样去操作。
第四步:配置系统受信任的密钥为空
如果不这样设置,会提示类似于如下的错误。
make[1]: *** 没有规则可制作目标“debian/canonical-revoked-certs.pem”,由“certs/x509_revocation_list” 需求。 停止。
make[1]: *** 正在等待未完成的任务....
CC certs/blacklist.o
CC kernel/watchdog_hld.o
make: *** [Makefile:1868:certs] 错误 2
make: *** 正在等待未完成的任务....
具体解决此问题的命令如下:
root@ubuntu-VirtualBox:/usr/src/linux# vim .config
再将
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
修改为
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
4、清理以前的编译(可选)
如果要重新编译,请执行以下命令清理之前的工作:这里我就先不操作了。
root@ubuntu-VirtualBox:/usr/src/linux# make clean
5、编译内核
编译最新的linux内核(漫长的等待)
说明:
make [-j #] : #号最多为CPU物理核心总数的两倍,这样会快点哦!
编译前请先查看:(这也是我在编译过程中遇到的问题,你们可以提前做好措施。)
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available 解决方法
FAILED: load BTF from vmlinux: No such file or directory 解决方法
root@ubuntu-VirtualBox:/usr/src/linux# make -j2
6、安装内核模块
root@ubuntu-VirtualBox:/usr/src/linux# sudo make modules_install
注意:
这步完了之后你可以查看一下 /lib/modules/ 目录下就会生成一个以版本号命名的一个文件模块了。
root@ubuntu-VirtualBox:/usr/src/linux# ls /lib/modules/
7、安装内核
root@ubuntu-VirtualBox:/usr/src/linux# sudo make install
注意:
安装完之后会在 /boot/ 目录下生成一个内核文件 vmlinuz-5.15.11、还有几个跟你当前编译的版本一样的文件、可以ls去看一下:
root@ubuntu-VirtualBox:/usr/src/linux# ls /boot/
8、重启并验证
用最新的 linux 内核启动 ubuntu,验正并测试。
注意:
重启后,或许你需要参考:end Kernel panic – not syncing:System is deadlocked on memory原因与解决方法
第一步:重启
root@ubuntu-VirtualBox:/usr/src/linux# sudo reboot
第二步:选择“ubuntu的高级选项 - Linux 5.15.11888新内核”。
第三步:查看当前内核
ubuntu@ubuntu-VirtualBox:~/桌面$ uname -a
Linux ubuntu-VirtualBox 5.15.11888 #3 SMP Fri Dec 24 18:50:53 CST 2021 x86_64 x86_64 x86_64 GNU/Linux
总结:
最来,简单来总结一下我们的安装步骤,如下:
1、获取内核源码,解压至/usr/src
# tar xf linux-5.15.11.tar.xz -C /usr/src
# ln -sv /usr/src/linux-5.15.11 /usr/src/linux
2、配置内核特性(选择以下其中一种方法就可以了)
make config:遍历选择所要编译的内核特性
make allyesconfig:配置所有可编译的内核特性
make allnoconfig:并不是所有的都不编译
make menuconfig:这种就是打开一个文件窗口选择菜单
make kconfig(KDE桌面环境下,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
3、编译内核
# make [-j #] : #号最多为CPU物理核心总数的两倍,这样会快点哦
4、安装内核模块
# make modules_install
5、安装内核
# make install
6、验正并测试
# cat /boot/grub/grub.conf 或 grub.cfg
查看新内核是否已经添加, 而后重启系统并测试