Centos7更换指定版本内核并搭建内核开发环境

时间:2024-05-20 09:54:28

一、更换指定内核版本

1.由于项目需求,需要更改内核版本并搭建内核开发环境。

当前内核版本
Centos7更换指定版本内核并搭建内核开发环境
指定内核版本:3.10.0-327.el7.x86_64

2.下载指定内核rpm安装包

下载地址:http://vault.centos.org/7.2.1511/os/x86_64/Packages/kernel-3.10.0-327.el7.x86_64.rpm
也可以在该网站http://vault.centos.org获取其他版本的安装包。

3.安装

rpm -ivh kernel-3.10.0-327.el7.x86_64.rpm --force

4.更新引导

grub2-mkconfig -o /boot/grub2/grub.cfg

之后重启虚拟机并选择安装的内核进入

二、搭建内核开发环境

搭建内核开发环境有两种方式,一种是安装和内核版本相同的kernel-devel;另一种是下载相同版本的内核源码包并编译。第一种方法比较简单,但是没办法满足修改内核源码的需要,其具体操作见我另一篇博客linux内核编程环境搭建并编写helloworld模块。本次由于项目需要,涉及到修改内核源码,所以本次采用第二种方法搭建内核开发环境。

1.下载内核源码包

下载地址:http://vault.centos.org/7.2.1511/os/Source/SPackages/kernel-3.10.0-327.el7.src.rpm
对于其他版本的源码包,可以到http://vault.centos.org/自寻下载。

2.安装内核源码包

rpm -i kernel-3.10.0-327.el7.src.rpm

执行安装命令后可能会出现如下提示

Centos7更换指定版本内核并搭建内核开发环境

这是需要安装mock,并新建一个builder用户。注意上图红框内容,提示哪个用户不存在就新建一个哪个用户,这里是builder。
安装mock

yum install mock

新建builder用户

useradd -s /sbin/nologin builder

继续执行源码安装命令

rpm -i kernel-3.10.0-327.el7.src.rpm

安装各种依赖包

yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel java-devel
yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel

回到root根目录,会有一个rpmbuild目录,进入到该目录下的SPEC目录,并执行rpmbuild命令。

cd ~/rpmbuild/SPECS/
rpmbuild -bp --target=$(uname -m) kernel.spec

之后,便可以在~/root/BUILD目录下找到对应版本的源码包。

3.创建符号链接

进入指定目录

cd /lib/modules/3.10.0-327.el7.x86_64

删除软连接

rm ./build

创建软连接

ln -s /root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64/ build

之后便可以编写内核模块进行测试。

三、其他

1、采用方法二搭建完内核开发环境之后,测试安装自己编写的内核模块时,可能会报以下错误:
fatal error: generated/autoconf.h: No such file or directory。
解决办法: 重新编译内核源码。
安装编译依赖

yum install ncurses-devel
yum install elfutils-libelf-devel

进入源码目录编译

cd /root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64
make

make 编译内核源码时非常耗时,需要耐心等待。

2、修改内核源码。
若有需要修改内核源码时,修改后需要重新编译内核源码并生成新的内核。

cd /root/rpmbuild/BUILD/kernel-3.10.0-327.el7/linux-3.10.0-327.el7.x86_64

选择配置项,若没有特殊需求,可以不用修改直接save,生成.config文件。利用该命令可以新生成的内核名字进行命名。

make menuconfig

开始编译

make

安装

make modules_install
make install

更新引导文件

grub2-mkconfig -o /boot/grub2/grub.cfg

最后,重启系统选择对应版本的内核即可。