網頁

2013年10月11日 星期五

[Ubuntu] Install Wi-Fi Adapter EW7711UAN

電腦上有一個Wi-Fi 的晶片, 我打算把他設定成 Wi-Fi Access Point, 這樣就可以透過 WiFi 從別的電腦連接到這一臺電腦. 但是, 這樣就不能同時連上 internet. 所以找來一枝USB 介面的 Wi-Fi adapter. 型號是 EdiMax EW-7711UAn. 接下來, 我們要把它安裝到電腦上, 用它來連上 internet.

1. Plug-In USB Wi-Fi Adapter


        這個動作很簡單, 把它插到電腦上.
        然後, 我們要先看一下, 電腦是不是有識別到這一個裝置. 執行以下指令

        $ lsusb

        這個指令會把所有 USB 的裝置列出來, 包含 root hub. 但是我們關心的, 是我們剛剛加到系統的裝置. 可以找到以下資訊:

        Bus 001 Device 003: ID 7392:7711 Edimax Technology Co., Ltd EW-7711UTn nLite Wireless Adapter [Ralink RT2870]

        這表明, 這是 Edimax EW-7711UTn 的無線網卡, 晶片組是 Ralink RT2870.

2. Download RT2870 Linux driver


         前面部分的資訊很重要. 因為要去 Edimax 找這張卡的 Linux driver 的時候, 會找不到. 只能用 Ralink RT2870 driver.
 
        更巧的是, Ralink 這家公司, 已經在 2011年的 5 5 賣給 MediaTek, 所以, 要從以下的連結下載 source code. 就是 RT2870USB(RT2870/RT2770) 的那一個檔案.
        http://www.mediatek.com/_en/07_downloads/01_windows.php?sn=501

3. 複製檔案到 Linux


        由於 Ubuntu 安裝的是 server, 沒有 browser, 因此需要自行下載後, 複製到系統中. 我是用 SD card.

        1. 檢視系統中的 SD card device


        $ sudo fdisk -l

        這個命令將會列出系統中的磁碟設備. 其中 /dev/sdb 是我的 SD card driver. 下面列出來的 /dev/sdb1 是這張 SD card

        2. 掛載 SD card file system


        $ mkdir /mnt/SD
        $ sudo mount -t vfat /dev/sdb1 /mnt/SD

        3. 複製到工作區


        $ cd ~
        $ mkdir EW-7711
        $ cd EW-7711
        $ cp /mnt/SD/*.bz2 .

4. 解壓縮檔案


        $ cd ~
        $ cd EW-7711
        $ tar xvf 2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2

5. 修改設定檔


        $ cd ~
        $ cd EW-7711
        $ cd 2010_0709_RT2870_Linux_STA_v2.4.0.1
        $ cd os
        $ cd linux

        修改 config.mk,

       

        HAS_WPA_SUPPLICANT=n

        HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n

        改成       

        HAS_WPA_SUPPLICANT=y

        HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

6. 重新編譯


        $ cd ~
        $ cd EW-7711
        $ cd 2010_0709_RT2870_Linux_STA_v2.4.0.1
        $ make

7. 編譯失敗


        編譯的過程, 出現如以下的錯誤:
     
        error : implicit declaration of function 'usb_buffer_alloc,....
        ...
        error : implicit declaration of function 'usb_buffer_free,....

        原因是 usb_buffer_alloc, usb_buffer_free 這兩個函式, 在新的 kernel 2.6.35 之後, 已經取消, 改用 usb_alloc_coherent, usb_free_coherent 代替.

修改\include\os\rt_linux.h


#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr)                              usb_buffer_alloc(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr)


#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)    usb_buffer_free(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)

改成

#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr)                              usb_alloc_coherent (pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr)


#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)    usb_free_coherent (pUsb_Dev, BufSize, pTransferBuf, Dma_addr)


修改 \os\linux\rt_usb_util.c


        ...

        return usb_buffer_alloc(dev, size, mem_flags, dma);

        ...

        usb_buffer_free(dev, size, addr, dma);

 

改成

        ...

        return usb_alloc_coherent (dev, size, mem_flags, dma);

        ...

        usb_free_coherent (dev, size, addr, dma);

 

        再重新編譯, 就可以完成, 並且產生 rt2870sta.ko

 

8. 安裝驅動程式


        切換到剛剛產生的 rt2870sta.ko 的目錄, 也就是 /os/linux, 以下列命令安裝驅動程式

        $ sudo insmod rt2870sta.ko

 

9. 啟動 Wi Fi Adapter


        安裝的驅動程式, 並不會自己啟動. 用以下命令, 可以確認它目前的狀態

        $ sudo lshw -class network

        可以看到類似的訊息

        * -network DISABLED

                description: Wireless interface

                physical id : 1

                bus info : usb@1:3

                logical name : wlan1

                .....

        接下來我們手動啟動它

        $ sudo ifconfig wlan1 up

        再用前面的命令去檢視它的狀態, 已經沒有 DISABLED 的訊息了
 

10. Wi Fi Adapter 設定為自動啟動

修改 /etc/network/interfaces. 由於我們本來就有 Wi Fi 的連線在 wlan0, 只要把 wlan0 換成 wlan1 就可以啟動 wlan1, 而不啟動 wlan0.

        # The primary network interface
        auto wlan1

        iface wlan1 inet dhcp
                wpa-ssid (SSID)
                wpa-psk  (PASSWORD)

 .
        然後重新啟動, , 這樣就完成了. 再用以下命令去確認.
        $ sudo lshw -class network
 
 
 

沒有留言:

張貼留言

請提供您寶貴的意見