前言

最近在安装中标麒麟机器的时候,发现麒麟的操作系统找不到src.rpm包,且系统内部也没有内核文件,导致正常方法安装NBD驱动无法实施。故这里找了另一种办法帮助此类型操作系统安装NBD驱动。

一、 中标麒麟系统类型及内核信息

系统镜像名称

内核版本

Kylin-4.0-1E-desktop_20160401-final-x86_64-2016-04-01 3.16.0-23-generic
NeoKylin-Linux-Advanced-Server-6.7 2.6.32-573.el6.x86_64
NeoKylin-sws-3.2(64) 2.6.32-220.2.1.2.ky3.2.x86_64
YHKylin-4.2-5-x86_64-server 2.6.32-431.29.2.3.ky3.1.x86_64

对于以上4个内核版本的机器,其中3.16.0-23-generic和ubuntu(ubuntu-14.10-desktop-amd64)内核版本一模一样,而且/lib/modules/3.16.0-23-generic/kernel/drivers/block文件夹下已经有编译好的nbd.ko文件,测试发现可以插入到目标机器麒麟系统中。

二、查找相同内核的其他Linux系统:

例如红帽系统:

三、常规安装NBD驱动

在相同内核的系统(该系统可以通过常规方法安装NBD)上安装NBD驱动

以下是大概步骤:

 uname -r #-> 3.10.0-123.el7.x86_64
yum install kernel-devel kernel-headers
cd /tmp
wget kernel-3.10.0-64.el7.x86_64.rpm
rpm -ivh kernel-3.10.0-64.el7.x86_64.rpm (这时会在/root/rpmbuild/SOURCES下生成tar包)
cd ~/rpmbuild/SOURCES
tar jxf kernel-3.10.0-64.el7.x86_64.tar -C /usr/src/kernels/
cd /usr/src/kernels
mv $(uname -r) $(uname -r)-old
mv linux-2.6.32-220.4.2.el6 $(uname -r)
cd $(uname -r)
make mrproper
cp ../$(uname -r)-old/Module.symvers .
cp /boot/config-$(uname -r) ./.config
make oldconfig
make prepare
make scripts
make CONFIG_BLK_DEV_NBD=m M=drivers/block
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
depmod -a modprobe nbd 启用nbd模块

四、拷贝nbd驱动到目标主机

通过在redhat机器中,成功编译安装NBD,然后将/lib/modules/$(uname -r)/kernel/drivers/block/目录下的nbd.ko文件拷贝到目标机/lib/modules/$(uname -r)/kernel/drivers/block/目录下。

五、加载驱动模块

方法一:
进入SHT21.ko驱动模块文件所在的目录,然后直接
insmod SHT21.ko
即可

方法二:
将SHT21.ko文件拷贝到/lib/modules/$(uname -r)/kernel/drivers/block/目录下,这里,#uname -r#意思是,在终端中输入
uname -r后显示的内核版本及名称,例如mini2440中#uname -r#就是2.6.32.2-FriendlyARM。

然后
depmod(会在/lib/modules/#uname -r#/目录下生成modules.dep和modules.dep.bb文件,表明模块的依赖关系)
最后
modprobe SHT21(注意这里无需输入.ko后缀)
即可

两种方法的区别:

modprobe和insmod类似,都是用来动态加载驱动模块的,区别在于modprobe可以解决load module时的依赖关系,它是通过/lib/modules/#uname -r/modules.dep(.bb)文件来查找依赖关系的;而insmod不能解决依赖问题。

也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。

查看已加载的驱动模块列表

在任何目录下,
lsmod
即可

卸载驱动模块

在任何目录下,
rmmod <module_name>
即可
注意其中”module_name”是lsmod显示的模块名称,而不是对应的ko文件名

六、总结

1) 常规安装NBD过程之前,首先查看/usr/src/kernels/目录下是否含有$(uname -r)文件夹,如果没有则需要手动下载kernel-devel-2.6.32-220.el6.x86_64.rpm文件下载头文件手动安装。

参考链接(http://vault.centos.org/6.2/os/x86_64/Packages/)(不同操作系统安装不同内核的头文件)。

2) yum install kernel-devel kernel-headers只会下载最新的内核头文件,容易导致系统所正在运行的内核与kernel-header版本不一致,编译NBD失败;

建议使用(1)中的方法,找到相同版本内核heards & devel rpm文件包,手动安装。

Linux系统NBD驱动安装拓展篇的更多相关文章

  1. Jenkins:VMware虚拟机Linux系统的详细安装和使用教程

    jenkins:VMware虚拟机Linux系统的详细安装和使用教程 (一) 不是windows安装虚拟机可跳过 1.Windows安装VMware 2.VMware安装linux系统 3.windo ...

  2. Linux系统无线网卡的安装【转】

    转自:http://www.linuxidc.com/Linux/2013-03/81473.htm 现在的很多的可移动无线网卡都是usb接口的,把这种网卡应用到windows操作系统上是很容易就能起 ...

  3. Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门

    Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...

  4. linux系统下怎么安装.deb文件

    linux系统下怎么安装.deb文件? deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是de ...

  5. linux系统下怎么安装.deb文件?

    linux系统下怎么安装.deb文件? deb 是 ubuntu .debian 的格式. rpm 是 redhat .fedora .suse 的格式. 他们不通用(尽管能够转换一下). deb是d ...

  6. 【Oracle RAC】Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂)

    [Oracle RAC]Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂) 2 Oracle11gR2 RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件 ...

  7. 【Oracle RAC】Linux系统Oracle12c RAC安装配置详细记录过程V2.0(图文并茂)

    [Oracle RAC]Linux系统Oracle12c RAC安装配置详细过程V2.0(图文并茂) 2 Oracle12c RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件下载3 ...

  8. MySQL5.7.20 二进制包 在Linux系统中的 安装和配置

    01, 下载安装包 =>  https://dev.mysql.com/downloads/mysql/ 02, 上传到linux系统, 笔者这里安装在 root 目录下, 常见安装在 var/ ...

  9. Linux 系统下Eclipse安装及使用

    Linux 系统下Eclipse安装及使用 我们在搞上层开发的时候,都是在Windows下使用Eclipse,那么如果是Linux应用开发,就必须要在Linux中安装Eclipse,用于C/C++开发 ...

随机推荐

  1. javascript获取元素样式值

    使用css控制页面有4种方式,分别为行内样式(内联样式).内嵌式.链接式.导入式. 行内样式(内联样式)即写在html标签中的style属性中,如<div style="width:1 ...

  2. Python-并发编程(进程)

    接下来我们用几天的时间说一说python中并发编程的知识 一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作 ...

  3. 为什么canvas宽高要设置在标签内>>宽高设置在style和设置在canvas的区别

    一直很困惑为什么canvas标签和其他标签不一样,宽高需要设置在canvas标签里,设置在style里就会有问题. 纯粹个人理解,有错误欢迎指出. > 结论写在头 设置在style里有问题其实是 ...

  4. 使用dojo.connect()添加事件的注意事项

    使用dojo.connect()添加事件处理器是很方便的,不用再考虑跨浏览器的问题了.但要想正确地使用这个方法,仍然要注意几个问题:        1.用dojo.byId()获取的是dom元素,而用 ...

  5. Creator4.2建模心得与技巧1——树的建立与跟随摄像机旋转

    Creator建模: 树一般在虚拟现实程序中都用面来实现,一种方法是通过两个面相互垂直成90度叠放在一起,另一种方法是让树面正对着视角一起旋转.这里主要说一下第二种方法. 主要思路:把树面一直正对着摄 ...

  6. Unable to create a constant value of type 'System.Object'. Only primitive types or enumeration types are supported in this context.

    代码如下: var query = from s in db.LoginUserServices join ss in db.Services on s.ServiceType equals ss.C ...

  7. Linux下分布式项目部署环境搭建与使用(druid-1.0.25.jar)数据库连接加密

    一.JDK安装 1.执行命令:cd Downloads/ 2.上 传:jdk-8u111-linux-x64.tar.gz 到Downloads 3.执行命令:tar -zxvf jdk-8u111- ...

  8. abstract(抽象)修饰符

    abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半 ...

  9. Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕

    本课主题 Spark Executor 工作原理图 ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕 Executor 具体是如何工作的 Spark Executor 工作 ...

  10. 设置C++ cout输出精度

    cout.precision(5); 数字表示小数点位数 // modify precision #include <iostream> // std::cout, std::ios in ...