1. 程式人生 > >Android手機與開發板的Wi-Fi連線

Android手機與開發板的Wi-Fi連線

    首先說明這裡實現的是Android手機作為Wifi接入點(AP),PC機和ARM-Linux作為兩個終端接入。後面會說明一下怎樣讓開發板作與Android手機連線的其它方式,但是我的還沒有實現。
    一、環境介紹:
    PC機:Windows XP
    Android手機:Android 2.2
    開發板:mini2440 Linux 2.6.32.2
    wifi USB無線網絡卡:Realtek 8188
    二、基本概念
    一些非常基礎的或者非常專業的詞彙我不說,這裡僅易於理解的說明下在文中會用到的兩個概念。
    essid
    SSID(Service Set Identifier)服務集標識,通常由AP廣播出來,主要就是用來區分不同的網路,簡單認為就是這個網路的名稱;這一籠統的概念後又有BSSID和ESSID的,前者據說是由單一的AP和站點(終端)構成的一個小型區域網;後者可以擁有多個AP,構成較大規模的網路,通過essid來區分。因此你可以通過你的wifi無線網絡卡搜尋到很多可用網路並且連線網路時,就通過SSID來區分。
    在Linux無線網絡卡中一般會用到Mode,也就是配置你的裝置的工作模式:一般有Managed、ad-hoc/P2P、Master。Managed模式相當於你的裝置作為網路的終端節點,可以連線AP,訪問網路中的裝置;ad-hoc/p2p模式,可以稱之為點對點模式,就是在同ssid網路中,沒有AP裝置之間進行直接通訊,可以看看Ubuntu網站的幫助文件https://help.ubuntu.com/community/WifiDocs/Adhoc。Master模式就是使用無線網絡卡作為AP,允許其它裝置的連入,如果是softAP,那麼就相當於一個無線路由。可能說的不是很準確,有這樣一個概念。
   三、網路搭建
   說的有點大。就是相關的驅動安裝,使用。首先是Android手機進入“設定”->“無線和網路”->找到類似於熱點設定之類的(擔心這裡不同手機可能有不同的叫法),進入開啟行動式Wi-Fi熱點,可以進行網路ssid等的設定,這裡是預設的“AndroidAP”。

   PC機安裝隨盤的rtl818su驅動,或者從官網中選擇下載相應的software。從“模式”選單中選擇“基站”,從“可用網路”中找到ssid“AndroidAP”,選擇新增到配置檔案,如圖所示:


    連線後自動獲取IP,如圖所示:

    在Linux下,只要把rtl8180的驅動make一下,然後insmod載入上就可以了。要想在開發板上使用,只要配置相應的交叉編譯器,指明目標板核心原始檔路徑。在隨盤的linux驅動的config中修改如下:
CONFIG_PLATFORM_I386_PC=n
CONFIG_PLATFORM_ARM_S3C= y
在Makefile下可以修改如下:

ifeq ($(CONFIG_PLATFORM_ARM_S3C), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := arm-linux-
KVER  := 2.6.32.2
KSRC := /opt/arm_linux/kernel/linux-$(KVER)-mini2440
endif


如果是從官網上下載的驅動,只要改Makefile就可以了:

CONFIG_PLATFORM_I386_PC         =       n

CONFIG_PLATFORM_ANDROID_X86     =       n

CONFIG_PLATFORM_ARM_S3C         =       y

CONFIG_PLATFORM_ARM_PXA         =       n



ifeq ($(CONFIG_PLATFORM_ARM_S3C), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIANARCH := arm

CROSS_COMPILE := arm-linux-

KVER  := 2.6.32.2

KSRC := /opt/arm_linux/kernel/linux-$(KVER)-mini2440

endif



其中CROSS_COMPILE :交叉編譯器,KSRC是你的板子的核心目錄位置。
將生成的.ko檔案拷貝到板子上,通過insmod載入,然後插入usb無線網絡卡,即可。下面進行Managed模式配置,使其能夠與Android手機建立的AP連線。命令如下:
iwconfig wlan0 up
ifconfig wlan0 192.168.43.25     (手機上的預設IP為192.168.43.1,因此需要在一個IP段內)
iwconfig wlan0 mode Managed essid AndroidAP    (這些命令在網絡卡linux驅動的readme中有,AndroidAP是手機建立的AP名稱)
至於其它的什麼channel、rate等的可選。
好了,ping一下試試吧,我的如下:
[[email protected] /]# ifconfig wlan0 192.168.43.25
[[email protected] /]# ping 192.168.43.1
PING 192.168.43.1 (192.168.43.1): 56 data bytes
fwdbg:issue action: 00000003, 00000000, 00000000


fwdbg:ADDBA RSP: 00000001


64 bytes from 192.168.43.1: seq=0 ttl=64 time=15.797 ms
64 bytes from 192.168.43.1: seq=1 ttl=64 time=30.911 ms
64 bytes from 192.168.43.1: seq=2 ttl=64 time=25.923 ms
^C
--- 192.168.43.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 15.797/24.210/30.911 ms
[[email protected] /]# ping 192.168.43.23
PING 192.168.43.23 (192.168.43.23): 56 data bytes
64 bytes from 192.168.43.23: seq=0 ttl=64 time=84.997 ms
64 bytes from 192.168.43.23: seq=1 ttl=64 time=33.968 ms
64 bytes from 192.168.43.23: seq=2 ttl=64 time=29.037 ms
^C
--- 192.168.43.23 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 29.037/49.334/84.997 ms
    三、一些問題
    最開始,我是希望用開發板作為AP,手機、PC可以直接連線,但是由於購買的Realtek 8188系列的usb無線wifi網絡卡不支援Linux下的軟AP功能,因此作罷;然後又想通過使用ad-hoc模式連線手機和開發板,但是Android手機預設不支援ad-hoc模式,想要修改還得獲取手機root許可權,修改其中的wifi配置檔案,但是我的手機不是常見的google的G系列的,沒有找到網上所說的tiwlan.ini,更不要說修改了,結果看到wpa_supplicant的配置好像支援,但是試了幾次還是沒有獲取到root許可權,就沒有修改成功。最後又找到據說的hostapd,能夠使得無線網絡卡切換為master模式,模擬AP(通常可以認為是路由器)功能,也就是我們說的軟AP(Soft AP)。貌似很好了,結果包括ssl、libnl一通移植板子上,測試了下無法改成AP模式失敗退出,看了下支援的driver,沒有我的網絡卡。但是可以想到的是,既然該usb網絡卡可以在windows下實現軟AP的功能,說明硬體是沒有問題的,只不過在Linux因為其其他產品的存在而沒有此功能,所以,可以以hostapd為基礎,修改其driver的支援,實現在板子上的AP功能,記錄到此,以後要是可以了,再補上了!
    如果有實現的希望能交流,指教一下啊。我的郵箱[email protected]

這兩篇可能對你有幫助:
用ubuntu搭建無線wifi hotspot熱點/AccessPoint(AP):http://phoeagon.byethost15.com/2011/08/20/%E7%94%A8ubuntu%E6%90%AD%E5%BB%BA%E6%97%A0%E7%BA%BFwifi-hotspot%E7%83%AD%E7%82%B9accesspointap/
Linux Wifi共享上網指令碼,類似win 7的Connectify工具:http://blog.csdn.net/feifei454498130/article/details/6642140