雖然說 Linux 日漸風行,
但還是有很多的硬體廠商就是不願完全支援 Linux,
所以還是有可能會買到無法支援 Linux 的硬體的。
之前在物色無線網路卡時,
發現蠻多廠商所採用的是 Realtek RTL8180L 的晶片,
在 Realtek 的網站上稍稍查了一下,
Realtek 有提供這個網路晶片的驅動模組;
加上之前就一直以為 Realtek 對於 Linux User 極為友善,
所以就沒有詳加考慮就買下去了...
結果踩到大地雷 - Realtek 只有放出它的 Binary 的驅動模組,
在我的電腦上雖然編譯成功了但卻無法驅動...
但,還好,在 Google 的協助之下,我發現了有個名為 NdisWrapper 的程式-
它可以將 Win32 版的 Binary 驅動程式模擬成一個 Linux 的驅動模組,
簡直是不可思議!
下載 NdisWrapper:
NdisWrapper 的官方網站提供了它的 deb 檔案的下載,位址為:
- 代碼: 選擇全部
deb http://rigtorp.se/debian/ unstable/
deb-src http://rigtorp.se/debian/ unstable/
請將其加到 /etc/apt/sources.list 後,
用 apt-get update 指令來更新 apt 的資料庫。
NdisWrapper 的安裝方法:(使用 apt 工具)
- 代碼: 選擇全部
# 先使用 apt 指令來下載必須的套件。
# 註:若您所使用的網路卡晶片為 Realtek RTL8180L,不妨同時下載 ndiswrapper-rtl8180 這個套件。
# 註:ndiswrapper-rtl8180 所使用的是 ftp://ftp1.realtek.com.tw/cn/wlan/rtl8180l/winxp-8180(169).zip,
# Realtek 的官方 Driver for MS Windows XP。
apt-get install ndiswrapper ndiswrapper-source diswrapper-rtl8180
# 由於等一下也要編譯 Kernel Module,所以也要安裝 kernel-package 及 debhelper 這兩個套件。
apt-get install kernel-package debhelper
# 對了,別忘了把 Kernel Headers 裝起來呀!其中的 Kernel 版本記得要隨著您的系統而改變。
# 而 2.4.x 的使用者可能就要安裝整個 Kernel Source 了。
apt-get install kernel-headers-2.6.8-1 kernel-headers-2.6.8-1-686
apt-get install kernel-source-2.4.26
# NdisWrapper 的官方所提供的 ndiswrapper-source 套件會將 ndiswrapper-source.tar.gz 放在 /usr/src 裡。
# 先將它解壓縮...
cd /usr/src
tar xvzf ndiswrapper-source.tar.gz
# 如果是 Kernel 2.6.x,則進入 Kernel-Headers 目錄,並進行編譯。
# 如果是 Kernel 2.4.x,則進入 Kernel-Source 目錄,並進行編譯。
cd kernel-headers-2.6.8-1
# 如果要清除之前所產生的 make-kpkg 模組,記得要下達 make-kpkg clean。
# 但可能有需要再重新安裝一次 Kernel Header。
# make-kpkg clean
# apt-get install --reinstall kernel-headers-2.6.8-1 kernel-headers-2.6.8-1-686
make-kpkg modules_image --append-to-version=-1-686
# 編譯完成之後,會在 /usr/src 目錄裡出現一個 ndiswrapper-modules-2.6.5_0.8-1+10.00.Custom_i386.deb
# 將它安裝起來就大功告成了。
dpkg -i /usr/src/ndiswrapper-modules-2.6.5_0.8-1+10.00.Custom_i386.deb
# 再下達以下指令來更新 Kernel 的模組組態設定
depmod -a
NdisWrapper 的安裝方法:(自行編譯)
在編譯 ndiswrapper-source 套件時,
如果是 Kernel 2.4.x 的使用者可能要替而下載整個 Kernel Source 才能使用 make-kpkg 指令來進行編譯,
感覺上未免過於勞師動眾!
所以我們也可以採用以下方式來自行編譯 Kernel 模組:
- 代碼: 選擇全部
# wget http://ovh.dl.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-0.9.tar.gz
--21:07:56-- http://ovh.dl.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-0.9.tar.gz
=> `ndiswrapper-0.9.tar.gz'
Resolving ovh.dl.sourceforge.net... 213.186.33.91
Connecting to ovh.dl.sourceforge.net[213.186.33.91]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 86,114 [application/x-tar]
100%[============================================================>] 86,114 28.57K/s
21:07:59 (28.54 KB/s) - `ndiswrapper-0.9.tar.gz' saved [86114/86114]
# tar xvzf ndiswrapper-0.9.tar.gz
ndiswrapper-0.9/
ndiswrapper-0.9/AUTHORS
ndiswrapper-0.9/ChangeLog
ndiswrapper-0.9/INSTALL
ndiswrapper-0.9/Makefile
ndiswrapper-0.9/README
ndiswrapper-0.9/ndiswrapper.spec.in
ndiswrapper-0.9/version
ndiswrapper-0.9/ndiswrapper.8
ndiswrapper-0.9/utils/
ndiswrapper-0.9/utils/Makefile
ndiswrapper-0.9/utils/ndiswrapper
ndiswrapper-0.9/utils/loadndisdriver.c
ndiswrapper-0.9/utils/wlan_radio_averatec_5110hx.c
ndiswrapper-0.9/driver/
ndiswrapper-0.9/driver/Makefile
ndiswrapper-0.9/driver/coffpe.h
ndiswrapper-0.9/driver/ndiswrapper.h
ndiswrapper-0.9/driver/loader.c
ndiswrapper-0.9/driver/loader.h
ndiswrapper-0.9/driver/ndis.c
ndiswrapper-0.9/driver/ndis.h
ndiswrapper-0.9/driver/hal.c
ndiswrapper-0.9/driver/ntoskernel.c
ndiswrapper-0.9/driver/ntoskernel.h
ndiswrapper-0.9/driver/iw_ndis.c
ndiswrapper-0.9/driver/iw_ndis.h
ndiswrapper-0.9/driver/wrapper.c
ndiswrapper-0.9/driver/wrapper.h
ndiswrapper-0.9/driver/proc.c
ndiswrapper-0.9/driver/misc_funcs.c
ndiswrapper-0.9/driver/divdi3.c
ndiswrapper-0.9/driver/longlong.h
ndiswrapper-0.9/debian/
ndiswrapper-0.9/debian/Makefile
ndiswrapper-0.9/debian/compat
ndiswrapper-0.9/debian/README.Debian
ndiswrapper-0.9/debian/control.modules
ndiswrapper-0.9/debian/control.utils
ndiswrapper-0.9/debian/copyright
ndiswrapper-0.9/debian/dirs.utils
ndiswrapper-0.9/debian/docs
ndiswrapper-0.9/debian/ndiswrapper-utils.install
ndiswrapper-0.9/debian/ndiswrapper.install
ndiswrapper-0.9/debian/ndiswrapper.substvars
ndiswrapper-0.9/debian/postinst.modules
ndiswrapper-0.9/debian/rules
# cd ndiswrapper-0.9
# make install
make -C driver install
make[1]: Entering directory `/tmp/ndiswrapper-0.9/driver'
make -C /lib/modules/2.6.5-1-686/build SUBDIRS=/tmp/ndiswrapper-0.9/driver DRV_VERSION="0.9" modules
make[2]: Entering directory `/usr/src/kernel-headers-2.6.5-1-686'
*** Warning: Overriding SUBDIRS on the command line can cause
*** inconsistencies
CC [M] /tmp/ndiswrapper-0.9/driver/wrapper.o
CC [M] /tmp/ndiswrapper-0.9/driver/iw_ndis.o
CC [M] /tmp/ndiswrapper-0.9/driver/loader.o
CC [M] /tmp/ndiswrapper-0.9/driver/ntoskernel.o
CC [M] /tmp/ndiswrapper-0.9/driver/ndis.o
CC [M] /tmp/ndiswrapper-0.9/driver/misc_funcs.o
CC [M] /tmp/ndiswrapper-0.9/driver/proc.o
CC [M] /tmp/ndiswrapper-0.9/driver/divdi3.o
CC [M] /tmp/ndiswrapper-0.9/driver/hal.o
LD [M] /tmp/ndiswrapper-0.9/driver/ndiswrapper.o
Building modules, stage 2.
MODPOST
CC /tmp/ndiswrapper-0.9/driver/ndiswrapper.mod.o
LD [M] /tmp/ndiswrapper-0.9/driver/ndiswrapper.ko
make[2]: Leaving directory `/usr/src/kernel-headers-2.6.5-1-686'
mkdir -p /lib/modules/2.6.5-1-686/misc
install -m 0644 ndiswrapper.ko /lib/modules/2.6.5-1-686/misc
/sbin/depmod -a
make[1]: Leaving directory `/tmp/ndiswrapper-0.9/driver'
make -C utils install
make[1]: Entering directory `/tmp/ndiswrapper-0.9/utils'
cc -Wall -g -c -o wlan_radio_averatec_5110hx.o wlan_radio_averatec_5110hx.c
gcc -o wlan_radio_averatec_5110hx wlan_radio_averatec_5110hx.o
cc -Wall -g -c -o loadndisdriver.o loadndisdriver.c
gcc -o loadndisdriver loadndisdriver.o
install -m 755 loadndisdriver /sbin
install -m 755 ndiswrapper /usr/sbin
install -m 755 wlan_radio_averatec_5110hx /usr/sbin
make[1]: Leaving directory `/tmp/ndiswrapper-0.9/utils'
NdisWrapper 的使用方式:
在 ndiswrapper 套件中則提供了 ndiswrapper 這個程式來管理所載入的 Win32 驅動程式:
- 代碼: 選擇全部
-i inffile
藉由 inf 檔案來安裝 Win32 驅動程式。
-e driver
移除 Win32 驅動程式。
-l
顯示已安裝的 Win32 驅動程式列表。
-m
將 modprobe 設定寫入設定檔中。
如果您有安裝 ndiswrapper-rtl8180 套件,
使用 ndiswrapper -l 就可以看到已安裝了 net8180 這個 Win32 驅動程式:
- 代碼: 選擇全部
# ndiswrapper -l
Installed ndis drivers:
net8180
否則,請用以下指令來下載並安裝 net8180 這個 Win32 驅動程式:
- 代碼: 選擇全部
// 建立一個名為 rtl8180l 之目錄
# mkdir rtl8180l
# cd rtl8180l/
// 下載 Win32 版的驅動程式
# wget 'ftp://ftp1.realtek.com.tw/cn/wlan/rtl8180l/winxp-8180(169).zip'
--16:47:19-- ftp://ftp1.realtek.com.tw/cn/wlan/rtl8180l/winxp-8180(169).zip
=> `winxp-8180(169).zip'
Resolving ftp1.realtek.com.tw... 152.104.125.40
Connecting to ftp1.realtek.com.tw[152.104.125.40]:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD /cn/wlan/rtl8180l ... done.
==> PORT ... done. ==> RETR winxp-8180(169).zip ... done.
Length: 108,647 (unauthoritative)
100%[==============================================>] 108,647 101.15K/s
16:47:21 (100.91 KB/s) - `winxp-8180(169).zip' saved [108647]
// 將其解壓縮
# unzip winxp-8180\(169\).zip
Archive: winxp-8180(169).zip
inflating: Release.txt
inflating: rtl8180.sys
inflating: Net8180.cat
inflating: NET8180.INF
// 進行安裝
# ndiswrapper -i NET8180.INF
Installing net8180
// 檢視是否正確安裝了
# ndiswrapper -l
Installed ndis drivers:
net8180
載入 ndiswrapper:
在 Win32 版的驅動程式安裝完成後,
使用以下方法來載入 ndiswrapper 模組:
- 代碼: 選擇全部
# modprobe ndiswrapper
若沒有任何錯誤訊息,
則使用以下指令來檢視 Linux 是否能正確地驅動您的無線網路卡:
- 代碼: 選擇全部
# ifconfig -a
wlan0 Link encap:Ethernet HWaddr 00:09:44:C2:15:F0
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:11 Memory:20800000-208000ff
一般而言,無網網路卡的裝置多以 wlan# 來命名。
但有很多應用程式只能偵測到 eth%d 的裝置,
對於 wlan%d 的支援度並不是很好,如:pppoeconf 等等。
如果您希望在載入 ndiswrapper 時所使用的裝置名稱是 eth%d 的話,
可以替而用以下指令來載入 ndiswrapper:
- 代碼: 選擇全部
# modprobe ndiswrapper if_name=eth%d
讓 Linux 開機時即自動載入 ndiswrapper:
如果一切都沒有問題,
就把它寫入 /etc/modules 或是 /etc/modules-2.6 吧:
- 代碼: 選擇全部
# echo 'ndiswrapper if_name=eth%d' >> /etc/modules
這樣子 Linux 在開機時就可以抓到無線網路卡了。
後記:
將 Win32 版的 Binary 驅動程式模擬成一個 Linux 的驅動模組?
真訝於 Linuxer 山不轉路轉的跳躍式思考模式。
在 Linux 裡實在有太多不可思議的技術、創意及巧思,
在此我們又欣賞到了一段極炫目華麗的不凡演出。
Linux 真的是讓人處處充滿驚奇呀!
順便慶祝一下個人的灌水第 1900 篇。
快突破 2000 篇大關囉∼∼,嘻∼∼