本文将介绍如何在优麒麟(UbuntuKylin)系统中编译与安装新内核,由于UBuntuKylin与Ubuntu系统类似,因此在Ubuntu系统上也可以完成。
知乎与CSDN上已经有一些此方面的教程:给Linux系统更换内核(基于优麒麟Linux) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/254766393优麒麟 20.04 pro更换内核_kylin更换内核-CSDN博客
https://blog.csdn.net/weixin_51760563/article/details/119408113
【优麒麟】编译linux kernel + 增加系统调用 + 编写批处理脚本_在优麒麟中编译新内核-CSDN博客https://blog.csdn.net/m0_54129327/article/details/128092802但是我在实践过程中总是会出现各种问题,于是去bing上用英文搜索,在How to Compile and Install the Linux Kernel on Ubuntu - David AugustatI show step by step how to compile the Linux kernel from source. I also explain how to installed the compiled kernel and how to make modifications to it.
https://davidaugustat.com/linux/how-to-compile-linux-kernel-on-ubuntu#:~:text=How%20to%20Compile%20and%20Install%20the%20Linux%20Kernel,kernel%20source%20...%208%20And%20that%E2%80%99s%20it%20
这篇文章的帮助下成功更换了优麒麟的内核,鉴于原文章作者在Ubuntu上的成功经历 ,因此该过程应该适用于Ubuntu以及优麒麟。
准备工作
本文章实现的基础是VMware 上的优麒麟22.04 LTS 操作系统,虚拟机设置CPU2*4,内存4GB,磁盘50GB,没有事先安装任何工具和依赖。唯一一点需要注意的是文件系统的硬盘大小,实测需要20GB左右的大小,但是在VMware分配50GB硬盘空间的条件下,优麒麟(全盘安装)文件系统只会被分配16GB左右大小,因此有两种解决办法:
1.VMware给虚拟机分配更多的硬盘空间(例如100GB)
简单粗暴,没什么好说的。(作者空间不足只能含泪方法二)
2.优麒麟里修改磁盘空间
进入优麒麟系统后点击左下角,在里面找到磁盘选择50+GB那个硬盘,
可以看到分区6有17GB的空间但是未挂载(未使用),我们选中后点击灰色区域最右端的“-”号删除这个分区,其中出现的提示不用管。
之后点击分区5也就是挂载文件系统的分区,点击灰色区域的齿轮选择调整大小,拉到最大即可,确认后会提示一次,此处不知道什么原因盘的大小不会改变,怎么办呢?再次调整一遍分区5的大小即可。(手动狗头,不知道为什么第二次就好了)
调整后如图所示,文件系统空间扩大了一倍:
安装依赖,下载linux内核
安装依赖之前更新一下工具:
sudo apt update
安装下列包:
sudo apt install flex bison build-essential libncurses-dev libssl-dev libelf-dev
额外安装以下包:
sudo apt install fakeroot dwarves
fakeroot包可以构建一个虚拟(fake)的管理员环境,避免在编译过程中的管理员权限需求,后续测试时发现编译时去除此命令仍然可行,所以可以不安装。
dwarves包不清楚作用,原作者说没有就不能成功,大家有时间可以尝试不安装试一下会发生什么,Debian -- 在 bullseye 中的 dwarves 软件包详细信息,这里有相关的解释。
之后在官网(kernel.org)或者镜像网站上下载linux内核源码,作者下载的是最新的longterm版本(6.6.22),可以自行选择其他版本,这里有两种方式:
1.命令式
进入资源文件夹:
sudo cd /usr/src
找到下载网址(使用你想使用的版本下载链接)后使用wget下载:
sudo wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.22.tar.xz
2.浏览器下载
在优麒麟自带的火狐浏览器里下载,之后将压缩包移动到/usr/src文件夹里,这里可能没有权限,在下载文件夹里打开终端,使用mv命令移动即可:
sudo mv linux-6.6.22.tar.xz /usr/src
下载内核源码压缩包后,进入资源文件夹解压:
cd /usr/src
sudo tar -xf linux.6.6.22.tar.xz
解压后删除压缩包即可:
sudo rm -f linux.6.6.22.tar.xz
配置内核
进入源码文件夹:
cd /usr/src/linux-6.6.22
使用本地模式生成配置文件:
sudo make localmodconfig
这里有很多种方式生成配置文件,
1.make menuconfig
此界面里各种配置信息可以自行设置,但是作者觉得非专业人士了解起来比较困难。(单纯作者懒得去了解)
2.cp -v /boot/config-$(uname -r) .config
这样是复制当前系统的配置文件,但是会包含大量不必要的驱动和内核模块,大大增加编译时间。
localmodconfig命令会查看你的系统已经装载的内核模块并使配置文件仅包含这些,减少生成的工作量。
执行上述命令时会出现很多选项让你抉择,我们一路回车就好。(不用回答)
最后需要进入.config文件修改一些信息,可以直接打开.config修改,也可以使用以下命令懒人式修改:
sudo scripts/config --disable SYSTEM_TRUSTED_KEYS
sudo scripts/config --disable SYSTEM_REVOCATION_KEYS
sudo scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
sudo scripts/config --set-str CONFIG_SYSTEM_REVOCATION_KEYS ""
编译
sudo fakeroot make -j4
fakeroot可以构建一个虚拟(fake)的管理员环境,避免在编译过程中的管理员权限需求,后续测试时发现编译时去除此命令仍然可行,所以可以不加。
-j后面的数字是编译的CPU核心数量,数字越大速度越快,但是不要超过虚拟机分配的数量。
此步时间比较长,在12代i5CPU,参数-j4的情况下作者使用了35分钟。
编译完成后,你可以使用以下命令查看是否成功:
sudo echo $?
输出0则编译成功,其他数字不成功。
安装
首先安装内核模块:
sudo make modules_install
接着安装内核:
sudo make install
安装完成后重启虚拟机即可。
检查
重启后打开终端,输入:
uname -rs
查看内核信息,如果显示版本与目标版本匹配,就大功告成了。
内核切换
安装新内核后,原来的内核仍然存在,可以在开机时长按shift,进入grub引导界面,选择高级,选择目标内核就可以了。