Linux操作系统下DriverDisk的制作方法

    如果常常在IBM、HP等这些服务器上安装linux,多多少少都会遇到需要手工加载SCSI/RAID卡驱动情况,而我们遇到这种情况时,都会向硬件厂 商或者linux厂商需求驱动,因为几乎所有的硬件厂商只提供redhat、suse上的驱动,假如安装的红旗Linux遇到这种情况,那么就只能向红旗 寻求驱动了。我们拿到手的驱动文件通常都常img格式的文件,究竟这个img文件里面装的是什么东西呢?而这个img又是怎么制作的呢?今天终于抽时间研 究了一把。

  我拿了Redflag DC5.0下的一个megaraid_sas-v00.00.03.03-1-DC5.0-all.img文件,实际上这里的img文件就是一个ext2文件系统的映象文件,用mount命令挂载后就能直接查看,如下:

# mount -oloop megaraid_sas-v00.00.03.03-1-DC5.0-all.img /mnt

# cd /mnt

# ls

disk-info modinfo modules.cgz modules.dep modules.pcimap pci.ids pcitable rhdd

  实际上在一个driver disk里面,只需要有modinfo、modules.cgz、modules.dep、pcitable、rhdd这五个文件就可以了,而在这个 driver disk里除了这五个文件外,还有disk-info、pci.ids、modules.pcimap这三个文件,其中disk-info记录的是驱动模 块名称以及驱动版本的信息,pci.ids、modules.pcimap与pcitable的内容是一样的,这两个文件放在这里面我不清楚他们具体存在 的意义。所以下面我们只需要好好研究前面这五个文件就足以。关于在这几个文件的详细介绍如下:

  1、modinfo

  该文件用于驱动程序的描述,文件格式是:

 

     
     
      
      Version 0
<module-name>
<module-type>
"<description>"

 

 

  除了注释行以外(以"#" 号开头),首行必须是"Version 0";

 

 

       
       
        
        <module-name> 是硬件内核驱动的名称(不包含路径名也不包括扩展名)。
<module-type> 是硬件种类,目前仅支持网络设备和SCSI 设备,网络设备用eth 表示,
SCSI/RAID类设备用scsi表示,前面必须插入tab 符或空格。
<description>是该驱动模块的简单说明,前面也必须插入tab 符或空格,
同时必须用双引导将说明内容括起来。

 

 

  例如该驱动的modinfo内容如下:

 

Version 0

megaraid_sas

     scsi

     "LSI Logic megaraid_sas Driver ver v00.00.03.03"

  2、modules.cgz

  文件modules.cgz 是DriverDisk 中包含的所有驱动模块的cpio 压缩档。使用如下命令可以解开该文件:

 

# zcat modules.cgz |cpio -idm

# find

.

./2.6.9-11.19AXsmp

./2.6.9-11.19AXsmp/x86_64

./2.6.9-11.19AXsmp/x86_64/megaraid_sas.ko

./2.6.9-11.19AXsmp/i686

./2.6.9-11.19AXsmp/i686/megaraid_sas.ko

./2.6.9-11.19AXhugemem

./2.6.9-11.19AXhugemem/i686

./2.6.9-11.19AXhugemem/i686/megaraid_sas.ko

./2.6.9-11.19AX

./2.6.9-11.19AX/x86_64

./2.6.9-11.19AX/x86_64/megaraid_sas.ko

./2.6.9-11.19AX/i686

./2.6.9-11.19AX/i686/megaraid_sas.ko

  现在我们可以很清楚的看该文件的整个结构了,每个核心对于一个目录,在每个核心下又分为32和64两种不同的平 台,不同的平台存放着对应的驱动文件。所以在制作驱动盘的时候,把不同核心不同平台的.ko的文件,按照这种结构做成包就可以了。一般情况下只要 Redhat与Redflag的核心相差很小话(这个很小的定义是,内核前面的版本号完全匹配,仅仅只是最后一段的可以有细微的差别,就像 “2.6.9-11.EL”与“2.6.9-11.19”),Redflag是可以兼容Redhat的驱动。通过如下命令可以看出:

 

# modinfo 2.6.9-11.19AX/i686/megaraid_sas.ko

filename: 2.6.9-11.19AX/i686/megaraid_sas.ko

license: GPL

version: 00.00.03.03

author: sreenivas.bagalkote@lsil.com

description: LSI Logic MegaRAID SAS Driver

vermagic: 2.6.9-11.EL 686 REGPARM 4KSTACKS gcc-3.4

depends: scsi_mod

alias: pci:v00001000d00000411sv*sd*bc*sc*i*

alias: pci:v00001000d00000060sv*sd*bc*sc*i*

alias: pci:v00001000d00000413sv*sd*bc*sc*i*

alias: pci:v00001028d00000015sv*sd*bc*sc*i*

  从modinfo的信息里面可以看出,这个驱动是在RHEL4上编译的,但放在Redflag DC5.0下同样也能使用。所以当我们拿到RHEL4上的驱动后,只需要把解开modules.cgz后看到的核心目录名称改为Redflag对应核心再 重新打包即可,例如将“2.6.9-11.EL”改为“2.6.9-11.19”、“2.6.9-11.ELsmp”改为 “2.6.9-11.19smp”等。从新生成cgz包的命令是:

 

# find . | cpio -oH crc | gzip -9 > /tmp/modules.cgz

  3、modules.dep

  该文件用于描述本模块对其他模块的依赖关系。如果该模块依赖其它模块则需要在文件中这样描述:

     
     
      
      <target-module>: <depeding-module>
<target-module> 是本驱动模块的名称,
<depending-module>是被依赖模块的名称。该文件格式和内核依赖关系

  文件modules.dep 相同,只是不包含目录路径名。

  例如:在上面modinfo显示的信息中,我们可以看到 megaraid_sas 该驱动模块依赖于scsi_mod这个模块,所以modules.dep文件的内容应该写成如下:

 

megaraid_sas: scsi_mod

  4、pcitable

  该文件用于硬件设备的描述,以便用户更好的识别该硬件。这些描述信息用户可以使用命令lspci -n 列出,也可以直接查看文件/proc/bus/pci/devices。

  文件格式如下:

 

     
     
      
      <Vender-ID> <Device-ID> "<driver-name>" "<description>"
     
     

 

 

 

  上述各项的表示如下:

 

 

       
       
        
        <Vender-ID>:硬件厂商代码
<Device-ID>:设备代码
<driver-name>:"硬件驱动名"
<description>:"硬件设备驱动描述"

 

 

 

 

  例如该驱动的pcitable文件内容:

 

0x1000 0x0411 "megaraid_sas" "LSI|MegaRAID"

0x1028 0x0015 "megaraid_sas" "LSI|MegaRAID"

0x1000 0x0413 "megaraid_sas" "LSI|MegaRAID"

0x1000 0x0060 "megaraid_sas" "LSI|MegaRAID"

  上面是 megaraid_sas 驱动盘的pcitable 文件,第一列是厂商号,LSI 的厂商号是0x1000(0x1028是DELL的厂商号,因为DELL机器上的这块卡是OEM LSI的),第二列是设备号,即改驱动支持上述列出的设备。/usr/share/hwdata/pci.ids中给出了设备类别和大部分厂商号的定义。

  5、rhdd

  该文件是红旗linux操作系统设备驱动软盘标志文件。文件中可以写入任何一行不以空格开头的字符串,但文件名必须是rhdd!如该驱动的rhdd内容是:

 

# cat rhdd

megaraid_sas-v00.00.03.03 driver disk for DC5.0 (IA32&x86_64)

  把上述准备的文件(即 modinfo,modules.cgz,modules.dep,pcitable,rhdd)拷贝到软盘上就可以使用了。或者制作一个软盘映象,将软 盘映象挂载到系统上,然后把上述准备的文件拷贝到软盘映象中(这就是我们从硬件厂商或者linux厂商得到img文件),再将软盘映象dd 到软盘上。

  制作一个软盘映象的命令是:

 

# dd if=/dev/zero of=xxxx.img bs=1k count=1440

# mkfs.ext2 xxxx.img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统下,连接数据库可以使用MySQL客户端工具或者编程语言提供的API来实现。下面分别介绍一下两种方式: 1. 使用MySQL客户端工具连接数据库 在Linux系统下,你可以使用MySQL客户端工具来连接数据库。MySQL客户端工具包括mysql和mysqladmin命令,可以通过终端窗口使用。 例如,要连接到本地MySQL服务器,可以使用以下命令: ``` mysql -u <username> -p ``` 其中,`<username>`是MySQL服务器的用户名,使用该命令后,系统会提示你输入密码,输入密码后即可连接到MySQL服务器。 2. 使用编程语言提供的API连接数据库 在Linux系统下,你可以使用Java、Python等编程语言提供的API来连接MySQL数据库。以Java为例,你可以使用JDBC API来连接MySQL数据库。 以下是使用Java连接MySQL数据库的示例代码: ``` import java.sql.*; public class MySQLConnector { public static void main(String[] args) { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=<username>&password=<password>"); System.out.println("Connected to database"); // Do something with the connection } catch (SQLException ex) { // handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } catch (Exception e) { // handle any errors System.out.println("Exception: " + e.getMessage()); } finally { // release resources try { if (conn != null) { conn.close(); System.out.println("Disconnected from database"); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } } } } ``` 其中,`<username>`和`<password>`分别是MySQL服务器的用户名和密码。使用以上代码,你可以连接到MySQL服务器并进行相应的操作。 希望能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值