HCRM博客

如何从源代码编译CentOS内核?

CentOS内核编译

1. 搭建编译环境

安装开发工具:在终端中输入以下命令,以安装必要的开发工具和库,这些工具包括GCC(编译器)、make(构建工具)和其他必需的开发软件。

如何从源代码编译CentOS内核?-图1
(图片来源网络,侵权删除)
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. 配置编译参数

复制现有内核配置:将当前系统的内核配置复制到新内核源码目录中,以便基于现有配置进行修改。

如何从源代码编译CentOS内核?-图2
(图片来源网络,侵权删除)
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命令将编译好的内核模块安装到系统中。

如何从源代码编译CentOS内核?-图3
(图片来源网络,侵权删除)
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
分享:
扫描分享到社交APP
上一篇
下一篇