CentOS内核编译详细步骤
1. 搭建编译环境
在开始内核编译之前,需要确保系统中已经安装了必要的编译工具和库,可以使用以下命令安装所需的软件包:
sudo yum install gcc g++ make gdb ncursesdevel elfutilslibelfdevel openssldevel bison flex bc y
如果这些工具和库已经安装,则可以跳过此步骤。
2. 下载内核源码
从[Linux内核官方网站](HTTPS://www.kernel.org/)下载所需版本的内核源码,下载4.1.16版本:
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux4.1.16.tar.xz
3. 解压内核源码
将下载的内核源码解压到指定目录,如/usr/src/kernels/
:
mkdir p /usr/src/kernels tar xvJf linux4.1.16.tar.xz C /usr/src/kernels/ cd /usr/src/kernels/linux4.1.16/
4. 配置编译参数
使用已有的内核配置文件作为基础进行配置:
cp /boot/config$(uname r) .config make oldconfig
这一步会生成一个新的.config
文件,用于保存本次内核编译的配置参数。
5. 查看CPU信息
为了提高编译速度,可以利用多核CPU并行编译:
cat /proc/cpuinfo
假设系统有16个CPU核心,可以使用以下命令进行编译:
make j16 all
6. 安装内核模块
编译完成后,安装内核模块:
sudo make modules_install
7. 注册启动项并安装内核
将新内核注册给引导程序:
sudo make install
新内核已经安装完成,但可能还需要手动更新GRUB配置以启用新内核。
8. 更新GRUB配置(可选)
如果新内核没有自动添加到GRUB引导菜单中,可以手动更新GRUB配置:
sudo grub2mkconfig o /boot/grub2/grub.cfg
常见问题及解决方案
问题一:/boot分区空间不足
问题描述: 在执行sudo make install
时,由于/boot分区空间不足,导致安装失败。
解决方案: 可以通过以下方法解决:
1、清理/boot分区中不再需要的旧内核版本。
2、增加/boot分区的大小。
问题二:UUID不匹配问题
问题描述: 在重启后选择新内核启动时,提示找不到UUID对应的分区。
解决方案: 手动更新GRUB配置,确保新内核指向正确的UUID:
1、删除之前生成的有问题的启动项。
2、手动复制新的内核镜像和配置文件到/boot目录。
3、使用dracut
命令生成新的initramfs文件。
4、更新GRUB配置。
以下是具体步骤:
删除有问题的启动项 sudo rm rf /boot/vmlinuz4.1.16 sudo rm rf /boot/initramfs4.1.16.img sudo rm rf /boot/grub2/grub.cfg 复制新的内核镜像和配置文件到/boot目录 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 生成新的initramfs文件 sudo dracut force kver 4.1.16 k /lib/modules/4.1.16/ kernelcmdline "root=UUID=youruuidhere" initramfs4.1.16.img 更新GRUB配置 sudo grub2mkconfig o /boot/grub2/grub.cfg
通过上述步骤,可以成功编译并安装CentOS的新内核,同时解决常见的问题,希望这份详细的指南能够帮助你顺利完成内核编译。