2010年5月1日

Ubuntu上安裝Marvell Gigabit LAN Driver

這篇算是補充,既然都寫了新版patch,舊聞也順便寫寫。

P5Q-E是張C/P值頗高的主機板,內建Dual Gigabit LAN,廠牌型號是Marvell 88E8056/88E8001,在Linux上支援備援線路於斷線時自動切換(Linux上看起來不支援頻寬合併,如有支援的消息請告知)。
這邊順便的告訴大家,現在買主機板時,幾乎都內建Gigabit LAN了,其中許多都是Dual NIC,當主機板支援Dual NIC時,哪個LAN要當主要的LAN要注意,可以仔細看說明書或者上網查主機板的規格,Dual NIC通常是一個PCI-E配一個PCI的,只有PCI-E的才能發揮Gigabit LAN的全部效能。
以P5Q-E來說,它內建的chip型號為88E8056/88E8001,會有2個型號,原因就在於它的Dual NIC,一個型號是PCI-E(88E8056),另一個則是PCI(88E8001)。
因為如此,在Linux當中兩個LAN Port的Driver並不同,分別是PCI-E(88E8056)的skge、PCI(88E8001)的sky2。
其中因為sky2是實驗性的Driver,因此穩定性是公認的糟糕,而我個人使用上,發現skge的穩定性也不怎麼好,高流量時也會出現watchdog timeout。
解決方案很簡單,使用Marvell原廠提供的sk98lin Driver即可,sk98lin Driver可同時支援88E8056和88E8001,安裝後可以直接取代skge和sky2。

而sk98lin安裝很討厭,要進行些步驟才能安裝成功,下面列出我的安裝步驟,如果有要安裝的看到本篇可以節省些時間,以下安裝是在Ubuntu上進行,相信Debian差別不大,其他則不確定。

1. 安裝或確認sk98lin安裝所需的套件
確定有安裝下列套件:
.Linux Kernel對應的linux headers
.Linux Kernel對應的linux source
.kernel-package
.libncurses5-dev

以Ubuntu 10.04版本來說,目前的Kernel版本為2.6.32-21-server(執行uname -a可查看),就需要安裝:
.linux-headers-2.6.32-21
.linux-source-2.6.32
.kernel-package
.libncurses5-dev

2. 下載sk98lin Driver

3. 設置或確認sk98lin安裝時所需的連結或目錄
.確認linux kernel source有解壓縮
Ubuntu/Debian的linux source套件只會下載linux kernel的壓縮到到/usr/src,不會自動解壓縮,所以先執行下面指令解壓縮:
# cd /usr/src
# tar jxvf linux-source-2.6.32.tar.bz2

.確認目前系統的kernel config已放入linux source目錄
sk98lin安裝編譯時,會要求要有kernel的config檔案,請到/boot/查找目前系統用的kernel(可用uname -a查詢)的config檔案。
例如:
# uname -a
Linux file 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux

則config檔案是/boot/config-2.6.32-21-server

接著把這個檔案複製到linux kernel source的目錄中,如下:
# cd /usr/src/linux-source-2.6.32
# cp /boot/config-2.6.32-21-server ./.config


.確認目前系統的kernel module目錄下是否有kernel source的連結
sk98lin安裝編譯時,會要求要有kernel module的目錄下要有linux kernel source的連結,如下建立:
# cd /lib/modules/2.6.32-21-server
# ln -s /usr/src/linux-source-2.6.32 source


/lib/modules/的目錄,一樣參考目前系統的kernel版本。

.確認有定義IGNORE_HEADER_MISMATCH這個環境變數
因為sk98lin安裝編譯時,會查詢目前的linux headers和目前系統的kernel是否符合,不符合不動作,但Ubuntu上headers和kernel通常版本不完全符合,因此要加上這個環境變數,如下。
(bash)
# export IGNORE_HEADER_MISMATCH=1
(tcsh)
# setenv IGNORE_HEADER_MISMATCH 1

4. 解開壓縮檔
# cd /tmp
# tar jxvf install_v10.84.3.3.tar.gz
# cd DriverInstall


5. 修改install.sh
#!/bin/sh改為#!/bin/bash,如下:
# vi /tmp/DriverInstall/install.sh
#!/bin/sh

to
#!/bin/bash


6. 執行sk98lin安裝程式
# ./install.sh

Q1:
1) installation 3) generate makefile
2) generate patch 4) exit

A1:
1

Q2:
Do you want proceed? (y/N)
A2:
y

Q3:
1) Do nothing
2) Deactivate diver
3) Remove driver

A3:
1

即會自動編譯sk98lin模組。

7. 載入sk98lin module
順利編譯成功後,可載入sk98lin module,執行如下:
# modprobe sk98lin

8. 修改blacklist.conf,強制不使用skge、sky2
編輯/etc/modprobe.d/blacklist.conf,檔案最上面加入
/etc/modprobe.d/blacklist.conf
blacklist sky2
blacklist skge
.....


9. 重新開機
# reboot

即可完成

2 則留言:

Tarık 提到...

Nice Blog...
Pc Keyfi

Jack Kung 提到...

Hi,how are you today?I have surfed your blog serveral times, your blog is great and having a lot of intresting idea. If you have time, you can visit my blog and feel free to give me some comment, more important thing is being my follower! Thank you very much.

(My blog is share-how-why.blogspot.com)