2012年12月7日 星期五

在 Fedora 17 安裝「EDIMAX EW-7811Un」的驅動程式

使用電腦經驗較久的人,身邊總有會有幾台『堪用』但不『夠用』的舊電腦、舊筆電。尤其是舊筆電,不是沒有無線網路,就是較慢的舊版(註:802.11b 理論頻寬才 11 Mbps),相較於最新的無線網路標準 IEEE 802.11n 的 150 ~ 450 Mbps 實在是少得可憐。加裝新的無線網卡當然可以解決問題,但是,考量舊筆電有限的剩餘壽命,這個投資可要三思(註:PCMCIA 或 ExpressCard 的無線網卡應該不容易買到,將來也不太用得到)。
    USB 介面的無線網卡應該是最佳選擇了,當然是上網去找比較快,目標是給舊筆電用的,因此列了幾個條件:
USB 介面:舊筆電多有這個介面,將來也可以用在別個地方。
尺寸要小:給筆電用,要考慮收到保護袋時,不需拔開;以及使用時,不需再插回。貪圖個方便嘛!
802.11n 標準:至少有 150 Mbps 的傳輸率,就算加上訊號干擾因素打個折,也比較舊版的無線網路快許多。
支援 Linux:舊筆用 Windows XP 應該還沒問題,想用最新版的作業系統,可就要考慮 Linux 了,否則效能上會令使用者受不了。
經過一番搜尋,找到符合這些條件的好物,EDIMAX EW-7811Un:USB 2.0、尺寸(寬×高×深: 14.8×7.1×17.4 mm)、IEEE 802.11b/g/n 標準、支援 Windows / Linux 作業系統。也有類似的產品,但是尺寸都略大於它。(:時間有限,以可迅速購得為優先,故恐有遺珠之憾。)
    收到無線網卡,立即在已安裝 Fedora 17 的舊筆電測試,
  • Fedora 17 可以測得新網卡,載入驅動程式,跳出無線網路連線設定,輸入密碼。但是,只有享受到短暫的喜悅,接著就再也不能連線成功。
  • 查詢 Linux Wireless wiki 也沒有支援 EDIMAX 這個型號的網卡。
  • 上 EDIMAX 公司網站找 EW-7811Un 的驅動程式,下載、編譯、安裝。失敗!檢查一下它支援的 Linux 的核心版本,只看到 2.6.x 等數字,不能確定是否支援 Fedora 17 最新的 3.6.x 版。
看來只剩幾個選擇:使用 Windows,使用舊版的 Fedora,或是退貨。突然,靈光一閃,產品廠商不支援,試試找上游晶片廠商,看有否可能得到支援。

:這才是學習 Linux 的正面態度,不輕言放棄。

一、找尋解答的線索

從 EDIMAX 下載的驅動程式碼中,去尋找所使用的晶片之線索,
不斷出現的『rtl8192c』字眼,似乎暗示著它所使用的晶片型號。再進入看程式碼,幾乎可以確認所使用的晶片應該是:Realtek 的 RTL8192CU。

二、下載晶片原廠的驅動程式

知道使用的晶片廠商、型號,二話不說立即連上網站(註:當然是用另一台電腦),找到晶片型號並順利下載它的開源碼驅動程式。說是『開源碼』,裏面還是有些商業機密的東西被隱藏起來,畢竟這是人家賺錢的本事。不過,編譯是沒有問題的。
感謝原廠的貼心服務,沒有放棄 Linux 的使用者。
由晶片原廠下載的 Linux 驅動程式,因為要支援眾多 Linux 分支,要經過編譯的過程是很正常的。用 unzip 解開壓縮檔,
[SiB@Celeron-D ~]# unzip RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip
所幸,編譯的準備工作很簡單,Realtek 也貼心地寫好編譯、安裝的程序檔。

三、編譯驅動程式的核心

編譯驅動程式的核心模組,需要一些準備工作,就是安裝作業系統提供的編譯核心所需的套件,這步驟要先切換為 root 身分,再下這個命令(以 Fedora 為例)
[root@Celeron-D ~]# yum install kernel-devel gcc
安裝這兩個套件後,切換目錄到『RTL8188C_8192C_USB_linux_v3.4.4_4749.20121105』,這是上一步驟中解開壓縮檔所產生的目錄,再執行 Realtek 所提供的編譯、安裝的程序檔
[root@Celeron-D RTL8188C_8192C_USB_linux_v3.4.4_4749.20121105]# sh install.sh
經過一小段等待時間,待畫面停止後,編譯、安裝就完成了。還要再進行一些設定,才可以開始測試。

四、抑制 Linux 原有核心模組的載入

在文章前面已經提過了,Linux 原有的核心模組『rtl8192cu』不能正常運作,但是 Linux 在作業系統載入階段,會辨認出 RTL8192CU 這個晶片,並載入內建的核心模組。因此,需要將 Linux 的內建模組抑制其載入,Linux 就會載入新安裝的核心模組『8192cu』。在檔案『/etc/modprobe.d/blacklist.conf』加入『blacklist rtl8192cu』這列文字,或用這個快速命令,
[root@Celeron-D ~]# echo "blacklist rtl8192cu" >> /etc/modprobe.d/blacklist.conf
即可抑制 Linux 內建的核心模組『rtl8192cu』的載入。這時可以插入 EDIMAX EW-7811Un 測試,如果編譯、安裝是在無線網卡 EW-7811Un 插入後才進行,就要先將 Linux 已載入的內建核心模組卸載,並再載入新的核心模組,
[root@Celeron-D ~]# rmmod rtl8192cu
[root@Celeron-D ~]# modprobe 8192cu
祝各位讀者使用愉快。

後記:


已測試版本:

  • Fedora: 17
  • EDIMAX EW-7811Un
:雖然,這程序只在 Fedora 測過,其它類 Linux 分支(如:CentOS, RHEL, Ubuntu, Scientific Linux (SL), ... 等,可能需要略做修改),應該也是可行。

2 則留言:

  1. 您好! 我是CY. 因工作的電腦無法登入, 所以我已匿名的方式留言. 您應看得出來, 我是第一次安裝Fedora的使用者. 很高興遇到像您這樣願詳細介紹與指導的前輩.
    我安裝Fedora 18的筆電是Dell Inspiron 1210 (Mini12),有內建網卡, 但我不知是否有故障, 總之, Fedora無法透過它找到無線訊號. 適巧, 我有一支 EDIMAX EW-7318Ug USB無線網卡. 結果Fedora的無現網路設定可以偵測到它, 並透過它連上無線網路. 不需作任何的修改. 算很幸運吧?!
    Fedora 開機時有兩個選項, 若我選擇下面那個(好像比較進階), 結果無線網路就連不上. 若重啟動選上面那個(Default), 則又可以自動連上網路. 這我就不知道為什麼了?
    看到您這篇指導無線網卡驅動的文章. 讓我想說自己的使用情形.
    若我要趨動Dell Inspiron 1210 (Mini12)的內建網卡, 需要給特殊的命令嗎?

    Thanks!

    回覆刪除
    回覆
    1. 你一次說了這麼多,就分點一一回答:
      ● 這是我認為能夠為 Linux 社群做點回饋的方法,用了這麼久的免費軟體,是應該有些回報。
      ● 以前的 Linux 太著重於作業系統的開發,最近積極支援硬體的驅動程式,也加強一般使用者體驗。總之,現在的使用者比以前幸福多了。
      ● 你應該是指安裝好的系統吧!通常 Fedora 是將最新版的系統放在放最上面的選項,你說的那個選項,相當於 Windows 的安全模式,要再加參數才行。
      ● 你所說的情形,是 Linux 不認得或不支援這張網卡的晶片,所以自帶的驅動程式不會載入。要特殊命令或等晶片商支援就不一定,現在有 Google 的協助,上網找些「直接」或「間接」的解決辦法就方便多了。

      刪除

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