CentOS内核编译
1. 搭建编译环境
安装开发工具:在终端中输入以下命令,以安装必要的开发工具和库,这些工具包括GCC(编译器)、make(构建工具)和其他必需的开发软件。
sudo yum groupinstall "Development Tools" y
安装其他依赖包:确保系统已安装所有必要的依赖包,例如openssldevel、elfutilslibelfdevel等。
sudo yum install openssldevel elfutilslibelfdevel ncursesdevel bison flex gdb make bc y
2. 下载内核源码
访问内核官网:访问HTTPS://www.kernel.org/,下载所需版本的Linux内核源码,选择长期支持版或最新的稳定版。
下载并解压源码:将下载的源码包解压到/usr/src/kernels/
目录下。
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux4.1.16.tar.gz tar zxvf linux4.1.16.tar.gz C /usr/src/kernels/ cd /usr/src/kernels/linux4.1.16/
3. 配置编译参数
复制现有内核配置:将当前系统的内核配置复制到新内核源码目录中,以便基于现有配置进行修改。
cp /boot/config$(uname r) .config
使用旧配置进行配置:运行make oldconfig
命令,根据提示进行配置,可以选择默认配置。
make oldconfig
4. 编译内核
查看CPU信息:确定系统中CPU的核心数量,以便在编译时利用多核加速。
cat /proc/cpuinfo
执行编译命令:使用make jN
命令进行编译,其中N
为CPU核心数,对于16核CPU,使用j16
选项。
make j16 all
5. 安装内核模块
安装模块:使用make modules_install
命令将编译好的内核模块安装到系统中。
sudo make modules_install
6. 安装内核
注册启动项:使用make install
命令将新内核注册到引导程序中。
sudo make install
更新GRUB配置:确保新内核被添加到GRUB配置文件中,并设置为默认启动项。
sudo grub2mkconfig o /boot/grub2/grub.cfg sudo awk F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg sudo grub2setdefault 0
7. 验证新内核版本
重启系统:重启系统后,通过uname r
命令检查新内核是否成功加载。
uname r
常见问题与解答
问题1:为什么在执行sudo make install
时提示“/boot分区空间不足”?
解答:这是因为新内核的安装需要写入一些文件到/boot
目录,如果该目录空间不足,会导致安装失败,解决方法包括清理/boot
目录中的旧内核文件或者重新分配更多的空间给/boot
分区,可以通过以下命令删除旧内核来释放空间。
sudo packagecleanup oldkernels y
问题2:为什么在启动新内核时提示“/dev/disk/byuuid/XXXX does not exist”?
解答:这个问题通常是由于新内核无法找到启动分区的UUID导致的,可以通过手动注册新内核的启动项来解决,删除之前生成的有问题的启动文件,然后手动复制内核镜像和配置文件到启动分区,并使用dracut生成新的启动文件。
sudo rm rf /boot/vmlinuz4.1.16 /boot/initramfs4.1.16.img /boot/config4.1.16 sudo cp /usr/src/kernels/linux4.1.16/arch/x86_64/boot/bzImage /boot/vmlinuz4.1.16 sudo cp /usr/src/kernels/linux4.1.16/.config /boot/config4.1.16 sudo dracut force kver 4.1.16 k /lib/modules/4.1.16/ kernelcmdline root=UUID=[启动分区的UUID] initramfs4.1.16.img