一种基于ARM11的无线AP进程移植方法
2013-08-13张剑英李宗为张祥忠
张剑英,李宗为,张祥忠,李 金
(1.中国矿业大学信息与电气工程学院,江苏 徐州 221008;2.中矿大华洋通信设备有限公司,江苏 徐州 221116)
责任编辑:魏雨博
1 无线AP简介
随着无线通信需求的不断提升,无线AP(Access Point)开始在生产生活、军用、商用等领域中扮演越来越重要的角色。它通过IEEE802.3以太网接口与有线网络连接,通过天线将网络信号向四周进行辐射,从而形成无线局域网(Wireless Local Area Network,WLAN),是连接以太网和无线网络的桥梁[1]。目前国内外基于ARM的无线AP设计,大都存在指令不够灵活、占用系统资源高等缺点[2],本设计当中提出的进程移植方法,能够有效地解决这些问题。设计无线AP的硬件构成图如图1所示,外围接口电路的搭建根据不同的应用背景进行修改,设计的重点在于核心CPU,使无线AP的功能从内核的层面得以实现。
图1 无线AP物理组成框图
2 无线AP的总体设计
设计的无线AP基于ARM11和嵌入式Linux操作系统,在移植可用的内核文件基础上,结合VMware Workstation虚拟Linux系统软件操作平台,移植hostapd进程。软件开发平台选用Linux的发行版Ubuntu,通过VMware Tools进行主机和虚拟机之间文件的共享操作,将库文件和进程源码共享在Linux环境下,通过交叉编译器对hostapd进程、运行库等进行编译,使其能够跨平台运行而完成进程等的移植操作[3],设计过程中使用DNW串口终端作为人机交互的界面,进行开发板启动信息、烧写进度的查看和输入指令等操作。常见的无线AP设计方法与本设计提出的方法对比情况如表1所示。
3 系统功能的实现
3.1 S3C6410的开机引导机制
S3C6410 芯片使用了 ARM11 作为内核[4-5],其程序文件的烧写方法与之前以ARM7或ARM9为内核的芯片使用USB下载线分步烧写系统文件的方法并不相同。首先需要使用SD卡作开机引导,如图2,然后才能顺利加载Bootloader,进行内核引导等操作。
表1 无线AP的一般设计方法与本设计提出的方法对比情况
图2 S3C6410的开机引导流程
首次进行程序的烧写或需要改换系统时,需在上位机运行相应程序选择引导文件,制作用于引导开机的SD卡。烧写完成后,调整为Nand Flash启动,从Flash加载系统。
3.2 无线AP数据转发模型
利用TCP协议完成服务器与客户端之间的连接,将客户端的IP信息与客户请求等映射到服务器用户空间。在图3所示无线AP数据转发流程当中,Socket作为应用进程与网络协议之间的接口,通过socket()函数建立通信端点,并用bind()命令在端点绑定地址,服务器端调用listen()函数监听连接请求,当受监听的端口接收到连接请求时,服务器开始创建数据收发线程。
图3 无线AP数据转发流程
3.3 hostapd 的移植
通过hostapd能够使得无线网卡切换为master模式,实现AP功能,并且在Linux环境修改其配置文件可以设置无线网卡的各种参数,如频率、信号等。hostapd的运行需要libnl和openssl两个库的支持,所以首先进行这两个库的移植。无线AP的实现方式如图4所示。
图4 无线AP实现方式
3.3.1 移植 openssl库
openssl是一个基于密码学的安全开发包,对它的移植首先要在Makefile中指定交叉编译器arm-linux-gcc,AR和ranlib使用相同的前缀,依赖libdl库,INSTALLTOP自定义路径/usr/local/arm/ssl/。编译并安装,可以在自定义的目录下看到openssl被编译成为了静态库。最后将该目录lib子目录下的内容拷贝至开发板的/lib目录。
3.3.2 移植 libnl库
在Linux环境下进行无线网卡的配置需要依赖libnl库,它是为了方便应用程序使用netlink接口而开发的一个库。移植libnl库需要注意很多细节问题,否则会导致编译不成功,其中较为重要且易被忽略的地方有:对include子目录中的netlink-local.h头文件进行修改并添加命令#include<limits.h>,需要定义ULONG_MAX数据类型等。然后配置安装路径并编译,可在指定目录下看到编译后的结果。
安装库到指定的目录下,将该目录lib子目录中的内容拷贝至开发板的/lib目录。
3.3.3 移植 hostapd 进程
设计选用 hosapd-1.0,首先需要修改.config配置文件,使它定义的配置满足需求。使CONFIG_DRIVER_NL80211=y,注释其他的 CONFIG_DRIVER,选择nl80211驱动并保存。在Makefile中分别指定ssl和libnl头文件和库文件的路径,它们是之前刚刚编译好的库文件,hostapd的运行需要这些库的支持。添加如下代码:
回到hostapd目录执行编译,可在同一目录下生成hostapd和hostapd_cli两个可执行文件,说明移植成功。将两个可执行文件拷贝到开发板上。
至此完成hostapd进程移植,系统工作流程图如图5所示。
图5 系统工作流程图
4 系统测试
在WLAN环境下,首先进行IP地址和网关的设置,并与无线网络建立连接,进行数据包ping测试:
如图6所示,无线网卡工作正常。
图6 ping通网关(截图)
然后对hostapd的移植结果进行测试。如前所述,用固化程序或第三代码在ARM中实现无线AP功能的方法,使用AP功能固件或用户转换卡,在RAM中转换802.11b协议识别的AP代码,CPU仅用于控制和管理,这样虽然占用CPU资源很少,但缺点在于指令使用的范围受到限制,无法做到如本设计中随时手动输入指令切换无线网卡工作模式这般灵活,直接在终端执行指令:
可以看到串口输出了版本信息和用户操作实现的AP方式,说明hostapd移植成功,且进程已能按要求运行,如图7所示。
图7 hostapd运行信息(截图)
主机AP方式(或称软AP解决方案),其软件易修改的特点决定了它具有较强的灵活性,但软件程序通过CPU运行的代码实现了几乎所有的IEEE802.11b控制功能,同时主机AP方式附带了路由、网桥等功能,导致它对CPU资源如时钟、处理性能、操作系统等方面要求很高。相比之下,本设计中提出的无线AP实现方式,只是在CPU后台开启了一个进程,且可以随时关闭。表2为客户端对服务器的数据包ping试验结果,客户端在以服务器为原点、半径3 m的圆形区域内移动,从测试结果可以看出,数据转发实时性很高,说明本设计方法对系统资源的占用很少,保证了系统的稳定性。
表2 数据包ping测试结果
5 结束语
本文首先介绍了无线AP的工作原理和国内外的研究现状,然后提出了一种基于ARM11的无线AP进程移植方法,介绍了S3C6410芯片的开机引导机制,并结合VMware Workstation搭建了软件开发平台。通过与现有的几种无线AP设计方法做出的对比,可以看出本设计具有指令灵活、占用资源少等优点。文中重点介绍对hostapd进程以及其运行库的编译下载,从最后给出的测试结果看到,成功在硬件平台上移植了hostapd进程,能够使用指令灵活地切换工作模式实现AP功能,解决了现有方法存在的不足。
[1]赵义平.802.11n协议的研究与无线接入点功能的实现[D].成都:西南交通大学,2009.
[2]黄智伟,邓月明,王彦.ARM9嵌入式系统设计基础教程[M].北京:北京航空航天大学出版社,2008.
[3]蔡立三.基于ARM的无线AP的设计[D].北京:中国科学院,2009.
[4]马文强,章专.基于S3C6410的无线视频传输节点设计[J].传感器与微系统,2011(10):96-98.
[5]郭巧云,许雪梅,李岸,等.基于ARM11的无线视频监控系统的设计[J].计算机测量与控制,2010(8):1786-1788.