在Cubieboard 1 上使用ASUS N10 USB 無線網卡

在Cubieboard 1 上使用ASUS N10 USB 無線網卡

前言

我的Cubieboard 1 想使用無線網路來上網, 但是家裡沒有一塊USB 無線網卡是可以用在linux 中的, 剛好看到這篇文章“Aximcom MR-102n 變成網樂通的無線網卡” , 家裡也剛好有一台MR-102N 已經很久沒用了, 於是廢物利用一下, 我的Cubieboard 1 果然順利可以無線上網了.

可是好景不常, MR-102N 極度不穩定, 常常開機1~2天候, 設定就無冤無故跑掉, 每次都得登入MR-102N重新設定. 有時1~2小時就不穩定了, 因為我的Cubieboard 1 是需要24小時開機並連線使用的, 所以對於MR-102N 這麼不穩定, 實在是受不了. 就決定買一塊USB 無線網卡來將MR-102N 替換掉.

購買之前, 先上PCHome 看了一下, ASUS N10 Nano 很便宜, 而且網路上有需多文章, RPi USB Wi-Fi Adapters都說Respberry Pi 可以使用ASUS N10, 只要載入r8712u module 就可以了, 看了一下我的Cubieboard 1 當初編譯的kernel modules , 果然有編譯r8712u 這個module, 然後就很放心的在PCHome 下單購買ASUS N10 無線網卡了.

出問題了

然而買回來之後, 才是悲劇的開始.

將無線網卡插入Cubieboard 1 的USB port 後, 依樣畫葫蘆, 使用如下指令

modprobe r8712u

??!! 奇怪為何看不到網卡. 看了一下dmesg, 發現r8712u 這個kernel module 根本不理會這張網卡.
使用 lsusb 指令看一下

# lsusb
Bus 002 Device 002: ID 0b05:17ba ASUSTek Computer, Inc. 
Bus 004 Device 002: ID 045e:0779 Microsoft Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

有啊, 有看到Bus 002 Device 002: ID 0b05:17ba ASUSTek Computer, Inc. , 為何r8712u 這driver 不理會他.

仔細再觀察一下, 哇勒, 網路這篇文章 RPi USB Wi-Fi Adapters, 裡面的USB Vendor/Device ID 是0b05:1786, 而我的ASUS N10 USB ID 卻是0b05:17ba

難怪, driver 不理會這個裝置. 繼續上網查資料, 看到這篇Asus USB-N10 Nano 這個網卡的晶片是Realtek RTL8188CUS, 因此要採用rtl8192cu 這個kernel driver. 趕緊在查一下kernel modules, 還好, 之前也有編譯rtl8192cu 這個modules. 再來modprobe 一次

modprobe rtl8192cu

??!! 還是看不到網卡, dmesg 中然沒有wlan0 的介面相關訊息……

明明driver 都已經載入了啊.

查了一個下午, 都沒頭緒, 後來在這個討論串中Asus N-10 wifi not working 看到可以使用modinfo 來查看module 的相關訊息, 嗯, 使用如下指令, 來看看這個module 是否有支援個網卡.

# modinfo 8192cu.ko | grep 17BA

果然什麼資訊都沒有, 也就是認不到裝置是正常的.

解決方法

那只好用最後一招, 把kernel driver 的source code 抓出來看看了.
發現問題出在drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c 中並沒有含ASUS N10 nano 的USB ID, 修改很簡單, 請看如下patch file.

diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
index 79eb196..2854d71 100644
--- a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
+++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
@@ -114,6 +114,7 @@ static struct usb_device_id rtw_usb_id_tbl[] ={
        {USB_DEVICE(0x4856, 0x0091)},//NetweeN - Feixun
        {USB_DEVICE(0x2019, 0x4902)},//Planex - Etop
        {USB_DEVICE(0x2019, 0xAB2E)},//SW-WF02-AD15 -Abocom
+       {USB_DEVICE(0x0B05, 0x17BA)},//ASUS N10 

        /****** 8188 RU ********/
        {USB_DEVICE(0x0BDA, 0x317F)},//Netcore,Netcore

OK!, 再重新編譯新的kernel 及 modules, 放入cubieboard 的TF Card , 搞定!!


參考資料:

  1. cubieboard 1 linux kernel source code
  2. 從source code 開始打造最基本的Debian linux system
This entry was posted in embedded system and tagged , , , . Bookmark the permalink.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *