首页 > 系统相关 >CentOS 7编译Linux内核(6.5.7)详细步骤

CentOS 7编译Linux内核(6.5.7)详细步骤

时间:2023-10-18 22:49:12浏览次数:32  
标签:CentOS make sudo 编译 6.5 内核 Linux 安装

CentOS 7编译Linux内核(6.5.7)详细步骤

前言

对于一件要完成的任务,如果已有现成的、完善的方法文档可供参考,则博文只需引用链接即可,无需重复写一遍。写博客是结合自身需求,总结之前网络上没有的方法。本文即基于CentOS 7 64位,给出编译当前最新版Linux(6.5.7)的详细步骤。

参考链接:

  1. 下载解压部分参考:Linux 内核动手编译实用指南 - LinuxEden
    比较详细,可用于了解原理,但没有给出针对CentOS 7的方案(实验室用到的openEuler基于CentOS,所以需要CentOS的方案)。
  2. 配置编译安装参考: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种:

  1. make config (基于文本的配置界面)
  2. make menuconfig (基于文本菜单的配置界面)
  3. make xconfig (基于图形窗口的配置界面)
  4. 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/17773153.html

相关文章

  • Linux 环境下(Ubuntu)webbench的安装问题解决与使用
    webbench最多可以模拟3万个并发连接去测试网站的负载能力。并发能力比较高,可以测试https及动态静态页面。适合中小型网站测试承受能力。原理:父进程fork若干个子进程,每个子进程在用户要求时间或默认的时间内对目标web循环发出实际访问请求,父子进程通过管道进行通信,子进程通过......
  • 【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页
    问题描述在AppServiceLinux环境中,如部署Tomcat应用后,如果访问的页面找不到,应用会返回一个由Azure生成的404页面,那么是否可以修改它呢? PS:如果是AppServiceforWindows,可以参考博文[ AppServiceforWindows环境中为Tomcat自定义4xx/5xx页面 : https://www.cnblogs.com......
  • Noi-Linux 2.0 装机+使用整合
    写在前面网上的东西比较多,也比较杂乱,不是很方便,所以我整合了一些关于Noi-Linux2.0虚拟机装机方法+代码编辑环境+实地编程的介绍,看完至少能用起来打代码了。NOI官网公告(JS开始使用Noi-Linux2.0作为唯一操作系统):https://www.noi.cn/gynoi/jsgz/2021-07-16/732450.shtmlPar......
  • 如何在虚拟机上安装linux操纵系统
    1.下载linux操作系统的镜像文件(iso文件),官网链接(CentOSMirrorsList) (3)下载大小为4G或者4.几G的iso镜像文件 2.下载我发的VMwareWorkstation16直接安装完成  2、开始安装centos7:(1)创建新的虚拟机可以选“自定义”,也可使用默认推荐的类型。选择稍后安装操作系统。......
  • Linux查看进程的CPU和内存使用情况
    ps-aux|grep"spring-native-hello"结果:chkusr106110.00.0131313253364pts/1Sl19:560:00./spring-native-hellochkusr131920.00.0112812972pts/1S+20:040:00grep--color=autospring-native-hello每列的含义:USER:这一......
  • NOI Linux 2.0 用法以及 Windows 下的对拍
    一、NOILinux2.0用法打开终端。Ctrl+Alt+T进入超级管理员。sudosu列出当前文件夹下的子目录。ls进入下层文件夹a。cda在当前目录(下面同样)新建一个文件a.cpp。toucha.cpp编辑a.cpp。gedita.cpp编译a.cpp。g++.exea.cpp-oa.exe......
  • Linux线程
    task_struct是用来描述进程的,它里面有一个指针指向mm_struct(虚拟地址空间)在地址空间中,栈区可以可以由ebp,esp来进行限定它的区域,那么堆区怎么来确定呢?怎么知道每次开辟的空间是多大范围的呢?这里还有一个结构来描述每次开辟堆区的大小——vm_area_struct,该结构的start,end就可以确定堆......
  • Linux进程间通信
    因为进程间具有独立性,你们想用进行进程间通信,难度还是比较大的。进程间通信的本质就是让不同的进程看到同一份资源。为什么要进行进程间通信——交互数据、控制、通知等目标进程间通信的技术背景进程是具有独立性的。虚拟地址空间+页表保证进程运行的独立性(进程内核数据结构+进程......
  • Linux-ssh
    目录远程登录服务器配置远程服务器相关信息创建config文件配置config文件配置密钥登陆先创建密钥配置密钥文件执行命令scp传文件copy文件copy文件夹远程登录服务器sshuser@hostnameuser:用户名hostname:IP地址或域名第一次登陆会显示信息:Theauthenticityofhost'123.......
  • linux文件权限2
    ACL权限基本用法:getfacl文件/目录:展示文件或目录的ACL权限:包括文件或目录位置,所属用户,所属组,所属用户权限,所属组权限,其用户权限例如getfaclfile01setfacl-mu/g/o:指定用户:权限文件:添加文件或目录的ACL权限:......