Linux作業系統下DriverDisk的製作方法

2021-05-25 21:17:36 字數 4363 閱讀 3347

如果常常在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

""

除了注釋行以外(以"#" 號開頭),首行必須是"version 0";

是硬體核心驅動的名稱(不包含路徑名也不包括副檔名)。

是硬體種類,目前僅支援網路裝置和scsi 裝置,網路裝置用eth 表示,

scsi/raid類裝置用scsi表示,前面必須插入tab 符或空格。

是該驅動模組的簡單說明,前面也必須插入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: [email protected]

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

該檔案用於描述本模組對其他模組的依賴關係。如果該模組依賴其它模組則需要在檔案中這樣描述:

: 

是本驅動模組的名稱,

是被依賴模組的名稱。該檔案格式和核心依賴關係

檔案modules.dep 相同,只是不包含目錄路徑名。

例如:在上面modinfo顯示的資訊中,我們可以看到 megaraid_sas 該驅動模組依賴於scsi_mod這個模組,所以modules.dep檔案的內容應該寫成如下:

megaraid_sas: scsi_mod

4、pcitable

該檔案用於硬體裝置的描述,以便使用者更好的識別該硬體。這些描述資訊使用者可以使用命令lspci -n 列出,也可以直接檢視檔案/proc/bus/pci/devices。

檔案格式如下:

"" ""

上述各項的表示如下:

:硬體廠商**

:裝置**

:"硬體驅動名"

:"硬體裝置驅動描述"

例如該驅動的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=***x.img bs=1k count=1440

# mkfs.ext2 ***x.img

Linux作業系統

本書以當前最流行的red hat linux的最新發行版本為基礎,論述作業系統的基本原理 基本思想和基本方法,並在此基礎上介紹linux網路作業系統的核心結構 安裝 配置 基本操作 系統管理及網路應用等,從而系統 完整地講述linux作業系統從基本原理到應用實踐的主要內容。本書注意理論內容的選取,注...

Linux 作業系統

linux 作業系統 計算機本身就是一堆硬體,最核心 就是cpu和儲存器裝置,為了能夠計算機獲得資料,有輸入裝置和輸出裝置,輸入輸出裝置通過南橋 北橋接入cache 接入系統的,彼此之間還有匯流排,比如記憶體到cpu的叫系統匯流排,各種鍵盤,滑鼠需要的匯流排也是不一樣的。為了進可能 利用計算機的資源...

Linux作業系統

linux的組成部分 linux核心 是整個作業系統的核心,管理著整個計算機的軟硬體資源。linuxshell 是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面 linux檔案結構 檔案結構是檔案存放在磁碟等儲存裝置上的組織方法,主要體現在對檔案和目錄的組織上。安裝方式 光碟安裝 硬碟安...