编译内核前需安装必要的工具链和依赖库,确保系统具备构建能力。常用命令如下:
# 安装基础开发工具组(含make、gcc等)
sudo yum groupinstall "Development Tools" -y
# 安装内核编译关键依赖(OpenSSL、NCurses、Elfutils等)
sudo yum install -y openssl-devel ncurses-devel elfutils-libelf-devel bison flex
这些工具用于解析内核配置、编译源码及生成引导文件。
CentOS默认GCC版本(如7.6)可能较旧,无法支持新内核特性。建议升级至较新版本(如GCC 8+):
# 添加SCL源(Software Collections)
sudo yum install centos-release-scl -y
# 安装Devtoolset(如GCC 8)
sudo yum install devtoolset-8-gcc* -y
# 启用新GCC版本(临时生效)
scl enable devtoolset-8 bash
# 永久替换旧GCC(可选)
mv /usr/bin/gcc /usr/bin/gcc-old
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
升级后需验证版本:gcc --version。
从官方或镜像站点获取内核源码(推荐LTS版本,如6.9.4),解压至指定目录:
# 下载内核源码(以6.9.4为例,使用清华镜像加速)
wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.9.4.tar.gz
# 解压源码包
tar -xzf linux-6.9.4.tar.gz
# 进入源码目录
cd linux-6.9.4
注意:避免使用wget直接下载未校验的源码,优先选择镜像站点或官方签名包。
内核配置决定了功能模块的包含与否,需根据需求调整:
# 复制当前系统内核配置(保留现有驱动和设置)
cp /boot/config-$(uname -r) .config
# 更新配置(基于现有配置,询问新增选项)
make oldconfig
# 或通过图形界面配置(需ncurses-devel)
make menuconfig
make oldconfig:快速生成配置,适合基于现有内核升级;make menuconfig:交互式配置,可手动启用/禁用功能(如驱动、文件系统)。使用GCC并行编译以提升速度(-j参数指定CPU核心数,如-j4):
# 编译内核(并行编译,节省时间)
make -j$(nproc)
# 编译内核模块(去除debug信息,减少体积)
make INSTALL_MOD_STRIP=1 modules_install
nproc命令自动获取CPU核心数,INSTALL_MOD_STRIP=1可移除模块中的调试符号,节省磁盘空间。
将编译好的内核镜像和模块安装至系统目录:
# 安装内核镜像至/boot目录
sudo make install
# 更新GRUB引导配置(CentOS 7/8均适用)
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig会自动检测新内核,并将其添加至引导菜单。
若需将新内核设为默认启动项,可通过GRUB配置调整:
# 查看内核启动项顺序(0为第一项)
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
# 设置默认启动项(如第0项)
sudo grub2-set-default 0
重启后系统将自动加载新内核。
重启系统以加载新内核,验证版本是否正确:
# 重启系统
sudo reboot
# 检查内核版本
uname -r
若输出为新内核版本(如6.9.4),则说明编译安装成功。
注意事项:
yum provides命令查找并安装对应包;/boot目录,可通过GRUB菜单选择启动,确保系统兼容性。