前言

centos7默认内核没有带nbd的模块,可以通过下载跟当前版本匹配的内核源码,编译源码指定的模块,然后加载到系统

步骤

判断版本

[root@lab201 linux-3.10.0-957.el7]# uname -a
Linux lab201 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@lab201 linux-3.10.0-957.el7]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)
Release: 7.6.1810
Codename: Core

没更新过内核的话,就是centos7.6的3.10.0-957版本的内核

获取源码

wget https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.6.1810/os/Source/SPackages/kernel-3.10.0-957.el7.src.rpm

清华的源支持vault的库,比centos自带的vault要快,用这个下载

安装匹配版本的devel包

这个编译模块的时候需要

wget https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.6.1810/os/x86_64/Packages/kernel-devel-3.10.0-957.el7.x86_64.rpm
rpm -ivh kernel-devel-3.10.0-957.el7.x86_64.rpm

安装完了检查下,下面的目录应该不为空

ls /lib/modules/3.10.0-957.el7.x86_64/build

解压源码

rpm2cpio kernel-3.10.0-957.el7.src.rpm |cpio -div
xz -d linux-3.10.0-957.el7.tar.xz
cd linux-3.10.0-957.el7/drivers/block/

默认编译不会通过

报错如下

[root@lab201 block]# make CONFIG_BLK_DEV_NBD=m -C /lib/modules/3.10.0-957.el7.x86_64/build M=`pwd` modules
make: Entering directory `/usr/src/kernels/3.10.0-957.el7.x86_64'
CC [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/floppy.o
CC [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/brd.o
CC [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/loop.o
CC [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/pktcdvd.o
CC [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/osdblk.o
CC [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.o
/root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.c: In function ‘__nbd_ioctl’:
/root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.c:619:19: error: ‘REQ_TYPE_SPECIAL’ undeclared (first use in this function)
sreq.cmd_type = REQ_TYPE_SPECIAL;
^
/root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.c:619:19: note: each undeclared identifier is reported only once for each function it appears in
make[1]: *** [/root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.o] Error 1
make: *** [_module_/root/rbd/kernel/linux-3.10.0-957.el7/drivers/block] Error 2
make: Leaving directory `/usr/src/kernels/3.10.0-957.el7.x86_64'

修改代码

增加下面内容

这个是从../../include/linux/blkdev.h里面提取的

                mutex_lock(&nbd->tx_lock);
blk_rq_init(NULL, &sreq);
#ifdef __GENKSYMS__
REQ_TYPE_SPECIAL, /* driver defined type */
#else
REQ_TYPE_DRV_PRIV, /* driver defined type */
#endif
sreq.cmd_type = REQ_TYPE_SPECIAL;
nbd_cmd(&sreq) = NBD_CMD_DISC;

修改makefile

[root@lab201 block]# cat Makefile
#
# Makefile for the kernel block device drivers.
#
# 12 June 2000, Christoph Hellwig <hch@infradead.org>
# Rewritten to use lists instead of if-statements.
#
obj-$(CONFIG_BLK_DEV_NBD) += nbd.o

只保留一个需要的

再次编译

[root@lab201 block]# make CONFIG_BLK_DEV_NBD=m -C /lib/modules/3.10.0-957.el7.x86_64/build M=`pwd` modules
make: Entering directory `/usr/src/kernels/3.10.0-957.el7.x86_64'
Building modules, stage 2.
MODPOST 1 modules
CC /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.mod.o
LD [M] /root/rbd/kernel/linux-3.10.0-957.el7/drivers/block/nbd.ko
make: Leaving directory `/usr/src/kernels/3.10.0-957.el7.x86_64'

拷贝模块到当前的内核

[root@lab201 block]# cp -ra nbd.ko /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/block/
[root@lab201 block]# depmod -a
[root@lab201 block]# modprobe nbd
[root@lab201 block]# modinfo nbd
filename: /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/block/nbd.ko
···
[root@lab201 block]# lsmod |grep nbd
nbd 17554 0

完成模块的加载了

centos7单独编译nbd内核模块的更多相关文章

  1. 单独编译使用WebRTC的音频处理模块

    块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...

  2. 烂泥:centos单独编译安装gd库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...

  3. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015                 本文主要对从 ...

  4. android 单独编译某个模块

    第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了And ...

  5. SystemTap----将SystemTap脚本编译成内核模块

      当运行SystemTap脚本时,会根据脚本生成一个内核模块,然后插入到系统中执行后退出.这个过程总共分为5个阶段:parse, elaborate, translate, compile, run ...

  6. Ubuntu为已经安装的PHP7单独编译mysqli

    编译安装PHP7后没有在ext中没有生成mysqli.so等文件,现在单独编译安装mysqli php7安装的位置:/usr/local/php7/ 我的扩展目录:/usr/local/php7/li ...

  7. centos7.6编译安装php7.2.11及redis/memcached/rabbitmq/openssl/curl等常见扩展

    centos7.6编译安装php7..11及redis/memcached/rabbitmq/openssl/curl等常见扩展 获取Php的编译参数方法: [root@eus-api-cms-bac ...

  8. delphi中单独编译pas生成dcu文件

    delphi中单独编译pas生成dcu文件 在网上下载了一个带源码的组件,结果碰到提示说缺少xxx.dcu.一看它的目录下确实没有,那能不能生成一个呢? 当然可以! 方法是使用delphi的安装目录\ ...

  9. centos7下编译安装php-7.0.15(PHP-FPM)

    centos7下编译安装php-7.0.15(PHP-FPM) 一.下载php7源码包 http://php.net/downloads.php 如:php-7.0.15.tar.gz 二.安装所需依 ...

随机推荐

  1. CentOS7克隆多个虚拟机

    VMware+centos7克隆虚拟机 步骤一:打开虚拟机,右键选中已经配置好的虚拟机,选择manage下面的clone选项.这里有一个需要注意的地方,就是虚拟机在启动或者挂起的状态下是不能clone ...

  2. dom4j api 详解【转】

    1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP. DOM4J ...

  3. 大白话聊OSI七层模型和TCP/IP四层模型

    前言 今天和大家聊的是一个比较基础的问题,OSI七层模型和TCP/IP四层模型. 小伙伴们可能有疑问,这个东西还用写文章吗,太基础了吧,网上文章多的是,随便一搜索就能找到. 确实是这样,网上资料确实很 ...

  4. 获取和设置pdf目录

    目录 前言 工具 获取pdf目录 获取toc格式目录 获取json格式目录 设置pdf目录 结语 前言 获取pdf目录:主要场景是为了拿到目录信息做编辑,从pdf软件里面一个个复制那肯定费时费力. 设 ...

  5. CentOS7 Nginx-1.10.3编译安装

    cat > nginx.sh <<EOF #停止apache,避免抢占端口号 systemctl stop httpd #创建nginx运行账户,非登录用户,不创建家目录 usera ...

  6. Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper

    Mybatis的dao层实现 接口代理方式实现规范 Mapper接口实现时的相关规范: Mapper接口开发只需要程序员编写Mapper接口而不用具体实现其代码(相当于我们写的Imp实现类) Mapp ...

  7. 记一次微信公众号(微信H5)网页对接腾讯云慧眼人脸核验开发笔记

    需求是这样的,客户需要一个在观看学习视频前弹出人脸识别核验真人的功能,客户找了个APP作为参考,但是在微信上第三方人脸识别是无法直接调取到前置摄像头的,都是通过用户自己获取用户的身份信息或者照片,然后 ...

  8. NOIP 2017 Day1 解题报告

    总分:100分 T1,小凯的疑惑, 100分 T2,时间复杂度,0分 T3,逛公园,0分 T1 ###题意简化: 给定两个互质的数字,输出最大不能表示的数: 基础数论题目 代码: #include&l ...

  9. uniApp打卡日历

    功能 滑动切换时间,打点功能,支持月周切换日历组件    这是一款支持滑动切换以及周模式和月模式切换功能的日历组件,可以设置打卡信息,自定义样式. 组件样式使用了sass所有需要项目中先安装node- ...

  10. uniApp朋友圈(参考)

    介绍 功能:回复,点赞(笔芯),评论,图片(最多六张). 码云地址:https://gitee.com/sunliusen/friend 例: