Linux升级内核--编译安装

2020-12-14 15:20:33 浏览数 (1)

读前须知:

有的新功能只有新版的linux内核才支持. 所以我们可能会遇到升级内核的情况

目前最新的稳定版本是5.9.14, 但是编译该版本的内核需要高版本的gcc, 生产环境gcc尽量保持与发行版本一致

所以我们本次环境以5.5.9为例

kernel官网:https://www.kernel.org/

kernel-5.5.9国内地址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.5.9.tar.gz

1.下载kernel并解压

得提前准备14GB的空间, 解压内核要1G, 编译之后要占12GB

代码语言:javascript复制
wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.5.9.tar.gz
tar -xvf linux-5.5.9.tar.gz -C /usr/local
cd /usr/local/linux-5.5.9

2. 设置环境

主要是安装一些常用的依赖, 现在不安装,等编译时候报错再安装也一样的. 因为我安装过的, 所以知道有哪些依赖

代码语言:javascript复制
yum install elfutils-libelf-devel bc ncurses-devel flex bison -y

3.配置内核

3.1

我们编译内核的原因是因为我们要定制它, 但是有好几千个选项, 我们不可能一个个去选, 我们可以参考其它发行版本的配置,做一点点修改

代码语言:javascript复制
cp -p  /boot/config-3.10.0-1127.el7.x86_64 /usr/local/linux-5.5.9/.config  #版本要换成你自己的

3.2 编辑内核配置

CONFIG_XXX=y 的表示直接编译到二进制文件里的,

CONFIG_XXX=m 是编译为模块的

3.2.1 方法1 图形化

我们可以用make menuconfig配置

代码语言:javascript复制
make menuconfig
大概就是这样子,看不清楚的下载下来看,或者翻译一下大概就是这样子,看不清楚的下载下来看,或者翻译一下

我们本次环境就简单点, 修改个透明大页就是了

Memory Management options --> Transparent Hugepage Support 设置为空

有很多选项的, 自己慢慢去研究, 我这里讲不了多少有很多选项的, 自己慢慢去研究, 我这里讲不了多少
修改完了记得保存啊,也就是选中save,敲回车修改完了记得保存啊,也就是选中save,敲回车

3.2.2 方法二 编辑文件

觉得麻烦的也可以直接修改 .config 文件

我再演示下修改.confg文件吧....

用vim或者sed或者edit之类的工具编辑 .config 文件即可, 为方便给命令我就使用sed了

代码语言:javascript复制
sed -i '/CONFIG_LOCALVERSION=/cCONFIG_LOCALVERSION="ddcw__modifid_kernel"' .config  #我修改的名字而已,表面这玩意是我改的

还有很多参数(没得的就表示不支持, 没有选中的功能,一般会用注释说明的):

如透明大页: CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS

硬件厂商应该也有.config的例子, 毕竟内核要跑在他们的硬件上.

4. 编译内核 和 安装内核 和 安装模块

4.1 编译内核

编译内核非常慢, 我的环境配置还行,我就用12线程跑,结果还是跑了半小时.

代码语言:javascript复制
make -j 12
M就表示编译为模块了,此过程非常慢, 毕竟编译之后12GB啊M就表示编译为模块了,此过程非常慢, 毕竟编译之后12GB啊

4.2安装模块

就是刚才编译的那些模块

代码语言:javascript复制
make modules_install

安装后/usr/lib 目录增大了很多,主要是驱动太大.

4.3 安装内核

代码语言:javascript复制
make install

至此安装结束, 接下来就是测试了

5.测试并设置默认启动内核

5.1测试

就直接重启,重启的时候选择我们刚才编译的内核

选择我们编译的内核,然后回车选择我们编译的内核,然后回车

5.1.1 检查内核版本

代码语言:javascript复制
[root@ddcw ~]# uname -r
5.5.9ddcw__modifid_kernel
这个名字有点不好看, 下次可以换个名字这个名字有点不好看, 下次可以换个名字

5.1.2 验证透明大页功能

代码语言:javascript复制
[root@ddcw ~]# cat /sys/kernel/mm/transparent_hugepage/enabled   #这是centos的透明大页位置,redhat有点名字区别
cat: /sys/kernel/mm/transparent_hugepage/enabled: No such file or directory
[root@ddcw ~]# 
没得这个功能了没得这个功能了

5.2 没得问题的话, 就设置为默认启动就行

5.2.1查看当前有哪些可选启动项

代码语言:javascript复制
[root@ddcw ~]# grep 'menuentry ' /boot/grub2/grub.cfg 
menuentry 'CentOS Linux (5.5.9ddcw__modifid_kernel) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-0c09efad-a4bf-4385-b564-8bef37062843' {
menuentry 'CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-0c09efad-a4bf-4385-b564-8bef37062843' {
menuentry 'CentOS Linux (0-rescue-4420387e65d64ba29fe9cbc54731d59f) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-4420387e65d64ba29fe9cbc54731d59f-advanced-0c09efad-a4bf-4385-b564-8bef37062843' {
[root@ddcw ~]# 

5.2.2 设置默认启动内核

代码语言:javascript复制
grub2-set-default 'CentOS Linux (5.5.9ddcw__modifid_kernel) 7 (Core)'  #也可以修改/etc下的配置文件,但是太麻烦
grub2-editenv list  #列出当前默认启动内核
#然后再重启一下,默认就是我们设置的内核了

6. 内核rpm包

编译安装太麻烦,

也可以去下载编译好的rpm包来升级,

也可以自己编译好了做成RPM包,

也可以直接tar打包然后拷贝到模板环境再安装都是可行的

做RPM包的时候最好是参考官网给的SRPM来做

发行版本官网一般都有SRPM目录来放RPM源码包的

如centos7.8的内核SRPM包: https://archive.kernel.org/centos-vault/7.8.2003/os/Source/SPackages/kernel-3.10.0-1127.el7.src.rpm

感兴趣的可以自己去整整, 也可以参考我之前写的nginx制作为RPM包 ,虽然不够专业,但是够简单

特别说明: 生产环境尽量别升级内核, 除非你很想要某个新功能. 稳定大于一切!!!

0 人点赞