zoukankan      html  css  js  c++  java
  • Linux系统NBD驱动安装拓展篇

    前言

    最近在安装中标麒麟机器的时候,发现麒麟的操作系统找不到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系统:

    例如红帽系统:

    InsertPic_(05-25(06-11-12-36-58)

    三、常规安装NBD驱动

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

    以下是大概步骤:

      1 uname -r #-> 3.10.0-123.el7.x86_64
      2 yum install kernel-devel kernel-headers
      3 cd /tmp
      4 wget kernel-3.10.0-64.el7.x86_64.rpm
      5 rpm -ivh kernel-3.10.0-64.el7.x86_64.rpm (这时会在/root/rpmbuild/SOURCES下生成tar包)
      6 cd ~/rpmbuild/SOURCES
      7 tar jxf kernel-3.10.0-64.el7.x86_64.tar -C /usr/src/kernels/
      8 cd /usr/src/kernels
      9 mv $(uname -r) $(uname -r)-old
     10 mv linux-2.6.32-220.4.2.el6 $(uname -r)
     11 cd $(uname -r)
     12 make mrproper
     13 cp ../$(uname -r)-old/Module.symvers .
     14 cp /boot/config-$(uname -r) ./.config
     15 make oldconfig
     16 make prepare
     17 make scripts
     18 make CONFIG_BLK_DEV_NBD=m M=drivers/block
     19 cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
     20 depmod -a
     21 
     22 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文件包,手动安装。

  • 相关阅读:
    Nginx学习总结(4)——负载均衡session会话保持方法
    Java往事之《Ibatis动态sql语句》
    Java往事之《百度UEditor插件配置图片上传问题》
    Java往事之《截取指定字符串中的某段字符》
    Java往事之《批量插入数据》
    Java笔试题之《流行的框架与新技术》
    Java笔试题之《ejb部分》
    Java笔试题之《软件工程与设计模式》
    Java笔试题之《XML部分》
    Java笔试题之《数据库部分》
  • 原文地址:https://www.cnblogs.com/eva-blogs/p/9182905.html
Copyright © 2011-2022 走看看