2012年12月16日 星期日

在 Fedora 安裝 HighPoint RocketRAID 的驅動程式

由於 Fedora 15 之後改用 GNOME 3,再加上忙著別的事,伺服器就停留在 Fedora 14 沒有升級。自 Fedora 17 釋出以來,這幾個月使用上覺得還蠻穩的,下個月正逢 Fedora 18 要釋出,也有些空閒時間,有種想要升級的衝動。畢竟,Fedora 14 也被社群宣告壽終正寢(註:2011-12-9)。
    趁著等待 Fedora 18 的這段時間,整理一下之前安裝 HighPoint RocketRAID 驅動程式的筆記,不知道到時候 Fedora 18 正式釋出時是否可以用上。

    記得當時為了這幾張卡,花了不少時間找資料,也研究了原廠的安裝程序,最後才順利安裝成功。目前找到的筆記資料只剩從 Fedora 11 到 14 的記錄,安裝成功的卡有 RocketRAID 1740, 2220, 2320 三張卡。

:筆者那時還沒有用「部落格」做記錄的習慣。
    HighPoint 原廠提供的驅動程式只到 Fedora 10 而已,Fedora 11 以後的驅動程式都要自己編譯、安裝。接下來就是整理出來的筆記:

一、自 HighPoint 下載 Linux 的開源碼驅動程式

幸好 HighPoint 有提供「開源碼驅動程式」,讓系統管理者在安裝時,萬一沒有預設包好的安裝套件時,有自力救濟的機會。這是上述三張卡的下載點
RocketRAID 1740RocketRAID 2220RocketRAID 2320
在各型號的『驅動程式下載』中,標示為『Linux Opensource』下的檔案,這是『.tar.gz』壓縮檔。下載後,用命令 tar 解壓縮備用。以 RR2220 為例,
[SiB@Celeron-D ~]$ tar zxf rr222x-linux-src-v1.9-090924-1445.tar.gz
會在 SiB 的家目錄下產生一個新目錄『 ~/rr222x-linux-src-v1.9 』。

二、安裝 Fedora 編譯核心模組的套件

編譯驅動程式的核心模組,需要一些準備工作,就是安裝作業系統提供的編譯核心所需的套件,這步驟要先切換為 root 身份,再下這個命令
[root@Celeron-D ~]# yum install kernel-devel gcc

:不確定是否已安裝過,再下一次命令也沒關係,yum 會檢查是否曾經安裝過,已安裝會自動忽略。

三、編譯驅動程式的核心模組

編譯驅動程式的核心模組並不需要用 root 身份,在一般用戶的權限即可。從 Fedora 11 到 14,三張 RocketRAID 卡的編譯過程都相同(:當然目錄是不一樣的啦!)。
[SiB@Celeron-D ~]$ cd ~/rr222x-linux-src-v1.9/product/rr2220/linux/
[SiB@Celeron-D linux]$ make KERNELDIR=/lib/modules/2.6.35.6-45.fc14.x86_64/build/ KERNEL_VER=2.6
第一個命令是切換「工作目錄」。第二個命令是編譯命令,其中的參數 KERNELDIR 是指定編譯所需的檔案目錄(標頭檔、函式庫等),也就是指定是編譯給哪個 Linux 核心用的;參數 KERNEL_VER 則是指定 Linux 核心的主版本。
    如果是編譯剛更新的 Linux 核心,上例中 KERNELDIR 參數中的版本數字,就要更換成剛更新的版本編號,可以用這個命令查出
[SiB@Celeron-D ~]$ ll /lib/modules
會看到數個版本的目錄,剛更新的版本就是數字最大的那個。
    編譯完成後,在「工作目錄」下會看到一個編譯好的核心模組檔案 hptmv6.ko,這是 RR2220 的核心模組,另外兩張卡的核心模組分別為:rr174x.ko (RR1740),rr232x.ko (RR2320)。將它複製到隨身碟,待會安裝 Linux 新系統時要用到。

注意:如果版本編號打錯了,安裝到錯誤的核心模組,就不能開機了。所幸 Linux 早就解決這個問題了,Linux 將不同版本的作業系統,及其核心模組都分開放置,當因為驅動程式不合而不能啟動時,只要重開機,在開機選單選擇由其它版本啟動即可。

四、安裝新系統時,同時加入驅動程式的核心模組

這個步驟是在安裝新系統時,同時載入驅動程式,所以整個作業系統都在 RAID 的容錯保護下,而不是只有資料碟。HighPoint 的安裝套件只提供到 Fedora 10,之後的版本未提供。再加上 Fedora 12 又有些改變,只好參考 HighPoint 驅動程式的套件內容,和它的安裝說明,找出以下這個安裝程序,分成兩階段:安裝 Fedora 之前、Fedora 裝妥重開機前。
    以下說明以 Fedora 14 及 RocketRAID 2220 為例,命令中的 hptmv6.ko 是 RR2220 的核心模組,另外兩張卡的核心模組分別為:rr174x.ko (RR1740),rr232x.ko (RR2320)。

開始安裝 Fedora 之前

  1. 放入光碟片開機,在『開機選單』畫面出現時,按【Tab】鍵以加入參數『 sata_mv.noprobe=1 』,
    使開機載入時,不會嘗試去測試 stat_mv 這個核心模組。
  2. 按【Enter】開機,當畫面出現【Next】按鈕時,暫停一下。
  3. 同時按 [Alt]-[Ctrl]-[F2] 三個鍵,切換至「終端機」,這時可以插入已存入前一步驟已存入核心模組之隨身碟。
  4. 將隨身碟掛載到一個臨時性目錄,並將工作目錄切換過去,用命令『modprobe hptmv6』或『insmod hptmv6』將核心模組載入。若成功載入,當切換到第三或第四「終端機」時,可以看到系統偵測到 RocketRAID 的訊息。(註:時間有點久遠,已經不太確定。)
  5. 同時按 [Alt]-[Ctrl]-[F6] 三個鍵,將畫面切換回原安裝圖形畫面,按【Next】鈕繼續平常的安裝步驟。
安裝好 Fedora 後,重新開機之前
  1. 當 Fedora 系統安裝完後,在重開機前會停在一個有【重新開機】或【Reboot】按鈕的畫面。別急著按下去!
  2. 同時按【Alt + Ctrl + F2】三個鍵,切換至「終端機」,開始接下來安裝驅動程式的核心模組的操作。
  3. 待會要切換到新系統做些操作,要先複製隨身碟中的驅動程式之核心模組到新系統的 tmp 目錄中,以方便切換根目錄後還能找到這個核心模組。
    [anaconda root@localhost ~]# cp hptmv6.ko /mnt/sysimage/tmp/
    其中『 /mnt/sysimage/ 』是新安裝作業系統的根目錄,而『 /mnt/sysimage/tmp/ 』則是新系統的命令中的暫時目錄 /tmp。hptmv6.ko 是 RR2220 的核心模組,另外兩張卡的核心模組分別為:rr174x.ko (RR1740),rr232x.ko (RR2320)。
切換到新系統的根目錄,進行核心模組安裝
  1. 這個操作有些複雜,請小心操作。新安裝的系統的根目錄在『 /mnt/sysimage 』,因為驅動程式是要裝在新系統上,所以要將目前檔案的根目錄切換過去,
    [anaconda root@localhost ~]# chroot /mnt/sysimage/
    
    接下來的操作,就會作用在新系統上。
  2. 抑制系統載入程式使用『 sata_mv.ko 』這個模組,它會測試到 RocketRAID 所用的晶片,並載入系統執行,但是又不支援 RocketRAID 的 RAID 功能,導致其不能正常運作。要抑制『 sata_mv.ko 』這個模組的載入,有兩個作法:
    [anaconda root@localhost ~]# echo "blacklist sata_mv" >> /etc/modprobe.d/blacklist.conf
    
    將『 sata_mv.ko 』列入開機載入模組的測試「黑名單」。或是直接刪除『 sata_mv.ko 』這個模組,
    [anaconda root@localhost ~]# rm -f /lib/modules/2.6.35.6-45.fc14.x86_64/kernel/drivers/ata/sata_mv.ko
    
    其中,2.6.35.6-45.fc14.x86_64 是 Fedora 14 DVD 中 Linux 核心的編號。

    注意:如果用直接刪除,則每次更新 Linux 核心後,都要刪除一次。
  3. 複製暫時目錄 /tmp 中的驅動程式核心模組到新系統的驅動程式目錄中
    [anaconda root@localhost ~]# cp /tmp/hptmv6.ko /lib/modules/2.6.35.6-45.fc14.x86_64/kernel/drivers/ata/
    命令中的 hptmv6.ko 是 RR2220 的核心模組,另外兩張卡的核心模組分別為:rr174x.ko (RR1740),rr232x.ko (RR2320)。
  4. 準備建立開機載入 ramdisk 的映像檔,先檢查各模組的相依性,
    [anaconda root@localhost ~]# depmod -a 2.6.35.6-45.fc14.x86_64
    做為重新建立開機載入 ramdisk 的映像檔之用。
  5. 接著,建立載入 ramdisk 的映像檔,Fedora 12 及之後的版本所用的命令為
    [anaconda root@localhost ~]# dracut --add-drivers hptmv6 /boot/initramfs-2.6.35.6-45.fc14.x86_64.img 2.6.35.6-45.fc14.x86_64
    命令中的 hptmv6.ko 是 RR2220 的核心模組。在 Fedora 11 及以前的版本,則是用另一個命令,
    [anaconda root@localhost ~]# mkinitrd /boot/initrd-2.6.30.10-105.2.16.fc11.x86_64.img 2.6.30.10-105.2.16.fc11.x86_64
切換回原安裝過程,進行最後的安裝操作
  1. 在「終端機」中鍵入命令『 exit 』,將根目錄切換回原安裝過程。

    注意:如果不能確定自已目前的根目錄在哪個系統,可以用命令『 ls /mnt 』測試一下,如果有其它目錄在其下,這時你應該已經回到『原安裝過程』中;如果沒有任何目錄,那就是還在『新系統」中。
  2. 同時按【Alt + Ctrl + F6】三個鍵,將畫面切換回原安裝圖形畫面,按【重新開機】或【Reboot】按鈕繼續安裝步驟,應該是重新開機了。
  3. 重新開機後,依一般安裝過程設定,可以先使用新系統,不要急著更新,看完下一段文章後,再進行更新。

五、舊系統或系統更新後,加裝驅動程式的核心模組

因為驅動程式的核心模組是用 HighPoint 提供的「開源碼驅動程式」編譯而得,因此每次只要 Linux 核心更新,這個核心模組就要再編譯一次。所幸,Linux 核心更新後,編譯驅動程式核心模組的過程比較簡單。
    假定更新後的 Linux 核心為 2.6.35.14-106.fc14.x86_64,而從 HighPoint 下載的「開源碼驅動程式」,將其解壓縮後的目錄在 root 之下,則所需的命令如下:
[root@Celeron-D ~]# cd ~/rr222x-linux-src-v1.9/product/rr2220/linux/
[root@Celeron-D linux]# make KERNELDIR=/lib/modules/2.6.35.14-106.fc14.x86_64/build/ KERNEL_VER=2.6
[root@Celeron-D linux]# cp hptmv6.ko /lib/modules/2.6.35.14-106.fc14.x86_64/kernel/drivers/ata/
[root@Celeron-D linux]# depmod -a 2.6.35.14-106.fc14.x86_64
[root@Celeron-D linux]# mv /boot/initramfs-2.6.35.14-106.fc14.x86_64.img /boot/initramfs-2.6.35.14-106.fc14.x86_64.img.save
[root@Celeron-D linux]# dracut --add-drivers hptmv6 /boot/initramfs-2.6.35.14-106.fc14.x86_64.img 2.6.35.14-106.fc14.x86_64
其中,『 mv ... 』那一列命令是將原來之映像檔換個檔名,做個備份。其他命令與文章前段相同,請參考前面說明。若是在 Fedora 11 及以前的版本,最後一列命令改為
[root@Celeron-D linux]# mkinitrd /boot/initrd-2.6.30.10-105.2.16.fc11.x86_64.img 2.6.30.10-105.2.16.fc11.x86_64
接著,就可以重新開機,測試新系統了。

已測試版本:

  • Fedora: 11 ~ 14
  • RocketRAID: 1740, 2220, 2320
註一:Fedora 8 ~ 10 當時也都成功安裝、使用,只是記錄未留下。
註二:雖然,這程序只在 Fedora 測過,其它類 Linux 分支(如:CentOS, RHEL, Ubuntu, Scientific Linux (SL), ... 等,可能需要略做修改),應該也是可行。

參考資料:(僅列出與安裝 RocketRAID 2220 有關)

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)