赞
踩
本文主要通过编译和使用包管理器俩种方法来给大家讲一下如何实现 Linux 内核的升级,这里以最新版 6.7.1 版本来进行详细的说明。
俩种方法:第一种可以从 Kernel 官方网站(可以直接点击跳转)直接下载 Linux 内核对应版本的 tar.xz 文件,将其传到对应的服务器上;另一种方法是复制对应版本链接地址,使用 wget 命令直接下载到服务器上。(可根据自身的网络情况选择合适的下载方式)
具体操作如下:
#下载内核源代码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.1.tar.xz
#将源代码解压到/usr/src目录下(该目录为存放内核源代码的存储库或者是各种开源软件)
sudo tar -xvf linux-6.7.1.tar.xz -C /usr/src/
这里建议先安装一些必要的依赖包,以防后续出现诸如以下等问题:
yum install -y gcc bc build-essential libncurses-dev bison flex libssl-dev libelf-dev ncurses-devel elfutils-libelf-devel openssl-devel
拓展:为什么需要依赖 gcc 软件?
因为内核的源代码是用 C 语言编写的,需要使用 C 编译器将其编译成二进制可执行文件,而 gcc 是一个广泛使用的 C 编译器,可以完美的将 Linux 内核源代码编译成可执行的内核映像文件,同时在编译内核时,需要使用一些特定的头文件和库文件,恰好 gcc 能够提供这些头文件和库文件,并将它们链接到编译过程中,使得内核可以在不同的硬件平台上运行,所以 gcc 是编译和升级 Linux 内核所必需的软件之一。
进入内核源代码目录配置内核选项,在配置窗口中,你可以按照需要选择或取消选择各个选项。完成配置后,保存并退出窗口。(不知道怎么选择默认即可)
cd /usr/src/linux-6.7.1/
#将已安装的内核的配置文件复制到当前目录下的 .config 文件作为基础进行进一步的内核配置和编译
sudo cp /boot/config-3.10.0-957.el7.x86_64 ./.config
make menuconfig
执行编译操作时,可能会出现 gcc 版本太低的情况,根据要求可以从 GCC官网下载(可以直接点击跳转)到合适的版本。
具体操作如下:
#删除环境中存在的低版本的gcc软件
#sudo yum remove -y gcc
#从官网下载合适的版本
wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz --no-check-certificate
#将源代码解压到/usr/local目录下
sudo tar -xvf gcc-13.2.0.tar.gz -C /usr/local/
#下载gcc相关的依赖包
sudo yum install -y gcc-c++ glibc-devel glibc-devel.i686 libgcc libgcc.i686 gmp-devel mpfr-devel libmpc-devel
#创建一个用于构建gcc的目录
cd /usr/local/gcc-13.2.0/ && mkdir build && cd build
#运行configure脚本来配置构建选项。运行以下命令来生成 Makefile,并指定安装路径为/usr/local/gcc,依赖包路径也为/usr/local/gcc
../configure --prefix=/usr/local/gcc --enable-languages=c,c++ --disable-multilib
#编译gcc(时间较长)
make -j$(nproc)
#安装编译好的gcc
sudo make install
#更新系统环境变量,在配置文件中添加如下俩行内容
vim /etc/profile
...
export PATH=/usr/local/gcc/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/gcc/lib64:$LD_LIBRARY_PATH
#使环境变量生效
source /etc/profile
#验证gcc版本
gcc --version
继续 make menuconfig ,显示如下界面表示依赖包安装完全,配置窗口可用。这里只是演示,不做更改直接保存并退出窗口即可。
这里就不详细讲解菜单中所涉及到的参数了,如有需要后续博主会出相应的博客供大家参考。
编译内核是一个十分漫长的过程,因此可以对 make 加 -j 参数来提高编译的效率,同时可使用 $(nproc) 获取系统上可用的处理器核心数。
#编译内核,此命令将使用所有可用的 CPU 核心进行编译,以加快编译速度
sudo make -j $(nproc)
#安装内核模块
sudo make modules_install
#安装内核
sudo make install
GRUB 作为一个重要的引导加载程序,它可以帮助计算机在启动时加载操作系统,提供了灵活的引导选项。而在内核更改的过程中,需要重新加载内核,因此需要更新 GRUB 配置来使之生效。
#更改GRUB引导的配置文件
vim /etc/default/grub
...
#指定默认启动项,值为0,表示默认选择第一个启动项作为默认启动项,这里也就是新升级内核版本
GRUB_DEFAULT=0
...
#重新生成GRUB配置文件,以便应用更改并将新内核添加到启动选项中
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
#验证内核
uname -a
至此,通过编译的方法实现 Linux 内核的升级讲解完毕,但这里有个小小的问题,就是在实际过程中,make 编译动辄几十分钟或几个小时,非常耗时间,因此,也可以通过使用包管理器升级 gcc 和 Linux 内核。
下面讲解下如何使用包管理器升级 Linux 内核和 gcc 软件来达到我们所需要的环境:
ELRepo 作是一个第三方的软件仓库,它是专门为企业级Linux发行版(如 CentOS 、Red Hat Enterprise Linux 等)提供额外软件包的。包括最新版本的 Linux 内核软件包、各种硬件驱动程序的软件包和其他一些常用软件包,如文件系统工具、系统监控工具、网络工具等等,该仓库的目标是为企业用户提供一些不包含在官方发行版中的软件包,以满足其特定需求。
#更新yum仓库
yum -y update
#启用ELRepo仓库(这里以Centos7版本为例,不同的版本需要下载不同版本的rpm包)
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-6.el7.elrepo.noarch.rpm
#查找可用的内核版本
sudo yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#下载选择要安装的内核版本
sudo yum --enablerepo=elrepo-kernel install kernel-ml.x86_64
#更改默认启动项为0
vim /etc/default/grub
...
GRUB_DEFAULT=0
...
#重新生成GRUB配置文件
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
#验证内核版本
uname -a
首先通过包管理器来安装 gcc 软件需要借助与第三方仓库,这里以 SCL 仓库为例。但 SCL 仓库中的 gcc 版本可能并不是最新的,这是因为 SCL 仓库的目标是提供一组独立于操作系统版本的软件包。它由 Centos 团队来进行维护,经过测试以确保稳定性和兼容性。但是,由于 gcc 的开发和发布过程较为复杂,新版本的 gcc 可能需要更多的时间才能被纳入到 SCL 仓库中。
如果您非常迫切的需要最新版本的 gcc 软件,可以考虑使用上述用源码进行编译安装的方法获取,但需要注意在安装和使用时遵循官方文档和最佳实践,以确保系统稳定性和安全性。
#更新yum仓库
yum -y update
#安装Development Tools组
sudo yum -y groupinstall "Development Tools"
#Centos7默认仓库中提供的gcc版本可能较旧,这里安装scl仓库来获取高版本
sudo yum -y install centos-release-scl
#查看可用的gcc版本
sudo yum list devtoolset-\*
#安装所需的gcc版本
sudo yum -y install devtoolset-11
#启用已安装的gcc版本,使用SCL安装的gcc版本需要手动启用
scl enable devtoolset-11 bash
#验证gcc版本
gcc --version
拓展:为什么需要用到 Development Tools工具?
首先 Development Tools 是一组用于软件开发和构建的工具,包括编译器、链接器、汇编器、构建系统等。这些工具是编译和构建软件所必需的,因为它们提供了将源代码转换成可执行文件或库文件所需的基础设施。而由于 gcc 本身就是一个编译器,它需要将源代码转换成可执行文件或库文件,因此需要用这个工具来协助完成这个过程。
最后总结一句,博主写的有可能不够完善、不够详细,望大家在评论区积极留言,共同探讨,感谢大家支持!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。