CentOS 7编译Linux内核(6.5.7)详细步骤
参考链接:
- 下载解压部分参考:Linux 内核动手编译实用指南 - LinuxEden
比较详细,可用于了解原理,但没有给出针对CentOS 7的方案(实验室用到的openEuler基于CentOS,所以需要CentOS的方案)。 - 配置编译安装参考:CentOS 7 下编译安装 Linux 4.14 内核 - 知乎
内核版本比较旧了,不过影响很小。
准备编译环境
如果运行过sudo yum update
,则编译所需工具链大概率已经装好。可通过下列指令检验:
sudo yum install gcc g++ gdb make
提示Nothing to do.
则表明已装好,否则会自动安装上述工具链。
下载和解压内核
下载内核
Linux内核官网:https://www.kernel.org。本文以6.5.7为例,下载到了~/Downloads
文件夹。
解压内核
将下载的内核解压到CentOS7的内核源码文件夹/usr/src/kernels/
:
cd /usr/src/kernels/
sudo tar -xvf ~/Downloads/linux-6.5.7.tar.xz
# tar命令,-x表示解压,-v表示显示过程,-f表示后面接压缩包文件名
配置编译参数.config
进入解压好的目录:
cd /usr/src/kernels/linux-6.5.7/
这里将本机的CentOS 7的.config配置文件拷贝过来:
sudo cp /boot/config-3.10.0-1160.99.1.el7.x86_64 ./.config
注意:CentOS 7在进行下一步之前,需要安装较新的GCC版本,否则:
[zh@localhost linux-6.5.7]$ sudo make oldconfig
***
*** C compiler is too old.
*** Your GCC version: 4.8.5
*** Minimum GCC version: 5.1.0
***
scripts/Kconfig.include:44: Sorry, this C compiler is not supported.
弯路:原本想参考文章解决CentOS7中gcc编译器版本过低的问题,采用GCC最新稳定版(12.3.0)的清华源链接进行编译安装,结果发现make编译需要几十分钟到几小时!以后软件优先找直接安装的方法(如下),省时省力!
按照如下方法安装GCC 7.3.1(参考链接):
sudo yum install centos-release-scl
sudo yum install devtoolset-7
scl enable devtoolset-7 bash
安装完成后可查看当前GCC版本:
gcc --version
gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
Copyright (C) 2017 Free Software Foundation, Inc.
注意:如果系统重启,需要重新使用指令scl enable devtoolset-7 bash
以开启GCC7.3.1。
接下来即可进行编译参数的配置,主要分为以下4种:
- make config (基于文本的配置界面)
- make menuconfig (基于文本菜单的配置界面)
- make xconfig (基于图形窗口的配置界面)
- make oldconfig (基于原来内核配置的基础上修改)
make menuconfig
下面以menuconfig为例,首先安装前置插件:
sudo yum install ncurses-devel
然后运行配置命令:
sudo make menuconfig
如果只是看一下编译过程,不想深究每一项,执行make menuconfig
之后直接保存退出(双击Esc)即可。
make oldconfig(如已做过menuconfig则跳过此项)
sudo make oldconfig
之后将会提示一连串选项(下面是第1条选项),只要全程按住回车即可配置完成。
Compile also drivers which will not load (COMPILE_TEST) [N/y/?] (NEW)
编译源码
配置项选完,.config
配置文件生成之后,就可以开始编译了,编译需要 elfutils-libelf-devel
的支持,执行下面的命令安装:
sudo yum install elfutils-libelf-devel
为了避免编译过程中提示 致命错误:openssl/opensslv.h:没有那个文件或目录
,预先执行下列指令安装依赖:
sudo yum install openssl-devel
执行make
即可开始编译,不过更建议使用如下命令:
sudo make -j$(nproc) 2>&1 | tee log
参数-j$(nproc)
表示“使用与(本机CPU线程数)相同的(并行编译任务数)”,提高效率。可通过cat /proc/cpuinfo
查看本机的CPU线程数。
参数2>&1 | tee log
表示将make
过程输出到log
文件,如编译过程遇到错误,可通过grep Error log
查看。(注:提示tee指令没有权限,此问题尚未解决,影响很小)
编译时间比较长,需要耐心等待。我的i5-12400F(分配给虚拟机8核)只要15分钟左右就完成了。
安装模块
sudo make modules_install
安装核心
sudo make install
更新引导
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
后记
思路总结:下载解压源码 - 配置参数 - 编译源码 - 安装模块 - 安装核心 - 更新引导。
尽管重启之后看到编译好的新内核了,但运行此系统时提示Failed to insert module 'autofs4'
。
找了解决方案修改了配置重新编译,启动界面如下:
但又出现了新的报错(SMbus host controller not enabled):
问题难以解决,因为报错信息一闪而过就自动转为CentOS 7启动了,没有在原系统输入指令的机会!当然肯定有办法解决,但路漫漫其修远兮,只好今后有精力再探索了。
标签:CentOS,make,sudo,编译,6.5,内核,Linux,安装 From: https://www.cnblogs.com/EndPoem-ZH/p/17825933.html