一、安装内核源码树步骤
1、按照上述帖子操作之前,如果你的OS不是安装的开发版本,需要先安装kernel-devel
(1)可以使用命令sudo yum install kernel-devel安装;
(2)或者到如下网站下载对应的rpm包安装http://vault.centos.org/7.3.1611/updates/Source/SPackages/kernel-3.10.0-514.26.2.el7.src.rpm。
rpm -ivh xxx.rpm --nodeps --force
2、官方强烈建议不要以root身份编译内核源码,其实关系不大,不需要去新创建用户
3、查看OS的版本
[root@localhost host]# rpm -q centos-release
centos-release-7-9.2009.1.el7.centos.x86_64
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
二、安装过程中遇到的问题
/// 错误1:直接使用rpm安装的话,会提示一个错误:
#rpm -i kernel-3.10.0-862.el7.src.rpm
Warning: user mockbuild does not exist. using root
...
这时需要安装一个mock,并新建一个mockbuild用户:
#yum install mock
#useradd -s /sbin/nologin mockbuild
https://blog.csdn.net/weixin_50886514/article/details/115468624
https://vault.centos.org/7.9.2009/os/Source/SPackages/
/// 错误2:安装源码需要依赖的包
[root@localhost SPECS]# rpmbuild -bp --target=$(uname -m) kernel.spec
构建目标平台:x86_64
为目标x86_64构建
错误:构建依赖失败:
net-tools 被 kernel-3.10.0-1160.el7.x86_64 需要
bison 被 kernel-3.10.0-1160.el7.x86_64 需要
java-devel 被 kernel-3.10.0-1160.el7.x86_64 需要
python-docutils 被 kernel-3.10.0-1160.el7.x86_64 需要
[root@localhost SPECS]# yum install java-devel
[root@localhost SPECS]# yum install python-docutils
[root@localhost linux-3.10.0-1160.el7.x86_64]# pwd
/root/rpmbuild/BUILD/kernel-3.10.0-1160.el7/linux-3.10.0-1160.el7.x86_64
/// 错误3:执行编译命令后,insmod nvme-core.ko报错:
[root@localhost host]# make -C /usr/src/kernels/3.10.0-1160.83.1.el7.x86_64/ M=/root/rpmbuild/BUILD/kernel-3.10.0-1160.el7/linux-3.10.0-1160.el7.x86_64/drivers/nvme/host modules
[ 6241.247315] nvme_core: loading out-of-tree module taints kernel.
[ 6241.248204] nvme_core: module verification failed: signature and/or required key missing - tainting kernel
//按下面帖子应该可以解决上面2个错误,不过报这两个错误貌似也不影响KO加载
https://blog.csdn.net/u011050845/article/details/125699924 再自己的Makefile中加CONFIG_MODULE_SIG=n
https://blog.csdn.net/gzxb1995/article/details/105407014/ MODULE_INFO(intree, "Y");
///下面这个错误没有解决掉,是比较老的内核代码retpoline.S中的一个汇编符号
[ 6241.248558] nvme_core: Unknown symbol __x86_return_thunk (err 0)
重新安装一个比较新的OS镜像,按上面的步骤再执行一遍后,编译出来的KO可以加载:
make -C /root/rpmbuild/BUILD/kernel-3.10.0-1127.el7/linux-3.10.0-1127.el7.x86_64/ M=/root/rpmbuild/BUILD/kernel-3.10.0-1127.el7/linux-3.10.0-1127.el7.x86_64/drivers/nvme/host/
[root@localhost host]# insmod nvme-core.ko
[root@localhost host]# insmod nvme.ko
[root@localhost host]# lsmod |grep nvme
nvme 32382 0
nvme_core 63547 1 nvme
补充:
在qemu上装的centos8的虚拟机,安装python-devel时报错:
需要换一个安装包: