本文主要通过编译和使用包管理器俩种方式来给你们讲一下怎样实现Linux内核的升级,这儿以最新版6.7.1版本来进行详尽的说明。
1.1、下载安装内核
俩种方式:第一种可以从Kernel官方网站(可以直接点击跳转)直接下载Linux内核对应版本的tar.xz文件安装linux内核源代码,将其传到对应的服务器上;另一种方式是复制对应版本链接地址,使用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/
1.2、根据需求配置内核选项
这儿建议先安装一些必要的依赖包,以防后续出现例如以下等问题:
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编译器将其编译成二补码可执行文件linux更改ip地址,而gcc是一个广泛使用的C编译器,可以完美的将Linux内核源代码编译成可执行的内核映像文件安装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
继续makemenuconfig,显示如下界面表示依赖包安装完全,配置窗口可用。这儿只是演示,不做修改直接保存并退出窗口即可。
这儿就不详尽讲解菜单中所涉及到的参数了,如有须要后续博主会出相应的博客供你们参考。
1.3、编译并安装内核
编译内核是一个非常漫长的过程,因而可以对make加-j参数来提升编译的效率,同时可使用$(nproc)获取系统上可用的处理器核心数。
#编译内核,此命令将使用所有可用的 CPU 核心进行编译,以加快编译速度
sudo make -j $(nproc)
#安装内核模块
sudo make modules_install
#安装内核
sudo make install
1.4、更新GRUB配置
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软件来达到我们所须要的环境:
2.1、更新yum库房并启动ELRepo库房
ELRepo作是一个第三方的软件库房,它是专门为企业级Linux发行版(如CentOS、RedHatEnterpriseLinux等)提供额外软件包的。包括最新版本的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
2.2、下载合适的内核版本并验证
#下载选择要安装的内核版本
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
2.3、下载安装GCC软件并验证
首先通过包管理器来安装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
拓展:为何须要用到DevelopmentTools工具?
首先DevelopmentTools是一组用于软件开发和完善的工具,包括编译器、链接器、汇编器、构建系统等。这种工具是编译和完善软件所必需的,由于它们提供了将源代码转换成可执行文件或库文件所需的基础设施。而因为gcc本身就是一个编译器,它须要将源代码转换成可执行文件或库文件,因而须要用这个工具来协助完成这个过程。
最后总结一句永久免费linux服务器,博主写的有可能不够健全、不够详尽,望你们在评论区积极留言,共同阐述,谢谢你们支持!
文章评论