Centos7 安装编译nbd模块

Centos7 安装编译nbd模块

未安装nbd模块

图1

查看linux版本

图2

安装

[root@test14 tmp]# yum install kernel-devel kernel-headers

注意: wget的地址需要根据自身的系统版本设定
Centos7 安装编译nbd模块_第1张图片

[root@test14 tmp]# cd /tmp/
[root@test14 tmp]# wget http://vault.centos.org/7.3.1611/os/Source/SPackages/kernel-3.10.0-514.el7.src.rpm

安装之后在/root/rpmbuild/SOURCES下生成linux-3.10.0-514.el7.tar.xz文件。
完整的编译安装过程如下:

[root@test14 SOURCES]# rpm -ihv kernel-3.10.0-514.el7.src.rpm
[root@test14 SOURCES]# cd ~/rpmbuild/SOURCES
[root@test14 SOURCES]# tar Jxvf linux-3.10.0-514.el7.tar.xz
[root@test14 SOURCES]# cd linux-3.10.0-514.el7/
[root@test14 linux-3.10.0-514.el7]# make mrproper
[root@test14 linux-3.10.0-514.el7]# cp /usr/src/kernels/$(uname -r)/Module.symvers ./
[root@test14 linux-3.10.0-514.el7]# cp /boot/config-$(uname -r) ./.config
[root@test14 linux-3.10.0-514.el7]# make oldconfig
[root@test14 linux-3.10.0-514.el7]# make prepare
[root@test14 linux-3.10.0-514.el7]# make scripts
[root@test14 linux-3.10.0-514.el7]# make CONFIG_BLK_DEV_NBD=m M=drivers/block
[root@test14 linux-3.10.0-514.el7]# cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
[root@test14 linux-3.10.0-514.el7]# depmod -a

错误处理

make scripts

错误:

Makefile:901: "Cannot use CONFIG_STACK_VALIDATION, please install libelf-dev or elfutils-libelf-devel"

解决办法:

yum install elfutils-libelf-devel

make CONFIG_BLK_DEV_NBD=m M=drivers/block

错误:

make[1]: *** 没有规则可以创建“drivers/block/floppy.o”需要的目标“tools/objtool/objtool”。 停止。

解决办法:

首先查看make scripts时是否出错,解决后,从make prepare命令开始重新执行make prepare

make CONFIG_BLK_DEV_NBD=m M=drivers/block

错误:

Centos7 安装编译nbd模块_第2张图片

解决办法:

经过搜索发现REQ_TYPE_SPECIAL变量是在./include/linux/blkdev.h文件中定义,其结构体定义如下图所示:
Centos7 安装编译nbd模块_第3张图片
由代码可知 REQ_TYPE_SPECIAL = 7:
修改drivers/block/nbd.c,将sreq.cmd_type直接定义为7,如下图所示,即为我修改后的结果:
图6
修改完之后,保存,重新执行 make CONFIG_BLK_DEV_NBD=m M=drivers/block

运行

Centos7 安装编译nbd模块_第4张图片

有很多位置参考这篇文章谢谢!

你可能感兴趣的:(Linux,学习)