您的位置:首页 > 移动开发 > Android开发

Android手机与开发板的Wi-Fi连接

2011-10-31 14:27 507 查看
首先说明这里实现的是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一下试试吧,我的如下:

[root@FriendlyARM /]# ifconfig wlan0 192.168.43.25

[root@FriendlyARM /]# 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

[root@FriendlyARM /]# 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功能,记录到此,以后要是可以了,再补上了!

如果有实现的希望能交流,指教一下啊。我的邮箱w.7849516230@163.com

这两篇可能对你有帮助:

用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: