在嵌入式Linux上实现802.11b无线网关[摘自老古]

2019-07-12 20:29发布

摘要 介绍802.11b技术及其在应用方面的优点,阐述嵌入式Linux系统的基本原理。详细论述在嵌入式Linux系统基础上对802.11b无线网关的实现,并通过测试验证802.11b无线网关的基本功能。 关键词 802.11b 无线网关 嵌入式Linux 构成有线网络的传输媒介主要依赖铜缆或光缆;但有线网络在某些场合要受到布线的限制,特别是当要把相隔较远的节点连接起来时,敷设专用通信线路的布线施工难度大、费用高、耗时长,对正在迅速扩大的连网需求形成了瓶颈。无线局域网的出现克服了上述缺点,因此无线局域网发展比较迅速。基于802.11b的产品已成为应用主流。这些产品使用的是2.4 GHz频段,能够在短距离内实现11 Mb/s的接入速率,每个接入点可以同时支持多个用户的接入。而无线网关作为连接无线终端与有线网络之间的桥梁,是构成无限局域网的重要组成部分。作者重点要探讨的就是如何在嵌入式Linux系统上实现无线网关的功能。
1嵌入式Linux的基本原理
嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁减,适于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统由于硬件的先天限制,只具有极稀少的硬件资源,通常不具有磁盘而用小容量的Disk on Chip或Disk on Module等来代替。
Linux作为嵌入式操作系统是完全可行的。它能处理嵌入式任务和用户界面;将Linux看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其他的分拆的微内核到完整的服务器,支持所有的文件系统和网络服务。Linux作为嵌入式系统,对许多CPU和硬件平台具有易移植、稳定、功能强大、易开发的优点。Linux作为一种可裁减的软件操作系统,是发展未来嵌入式设备的绝佳资源。因为Linux的源代码公开,易于定制,提供完成嵌入式功能的基本内核和所需要的用户界面。
一个小型的嵌入式Linux系统需要三个基本要素:引导工具、Linux微内核(内存管理、进程管理和事务处理)和初始化进程。如果要它成为完整的操作系统且继续保持小型化,还得加上硬件驱动程序、文件系统以及提供所需功能的一个或多个应用程序。
2802.11b无线网关在嵌入式Linux上的实现
由于Linux开始是为台式机开发的,加上嵌入式系统硬件资源固有的一些限制,因此,要实现无线网关在嵌入式Linux系统上的应用,就需要对Linux系统进行特别定制,删除无线网关不需要的部分,真正做到精简系统,减少成本的目的。
2.1精简内核
Linux内核是可以根据特定的要求进行定制的,我们使用的是2.4.4的内核。在/usr/src/Linux目录下,使用make menuconfig,去掉内核对floppy、cdrom的支持选项;Second extended fs (ext2)是实际上的Linux文件系统的标准,所以除了此项,把对其他所有filesystem的支持去掉;去掉内核对sound的支持;去掉所有的字符设备(character device)等。
在去除的同时,要根据AP应用软件及一些特定功能的要求,在内核中留下对需要的驱动的支持,具体的有:① 无线网关连接无线网络与有线网络,因此要保留对网络的支持(network support),保留对TCP/IP stack的支持,保留对以太网卡如嵌入式最常用的RI8139驱动的支持,并且要在内核中设置模块项;② 嵌入式系统如果使用的是Disk On Chip,则内核中还要选中对它的支持:Msystems drivers;③ 在内核中保留对特定功能的支持,如要使用PPP(点对点协议),则编译的内核必须包含对PPP的支持。
配置完成后,重新编译内核,然后修改Linux系统引导器lilo的配置文件并最后以新编译的核作为启动内核。重启计算机,若运行一切正常,则精简内核的工作就完成了。
2.2缩小Linux文件系统
嵌入式Linux本身是一种操作系统。它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口。它存在的目的是为了管理所有的硬件资源,并且提供给应用软件一个合适的操作环境,因此在对嵌入式Linux系统进行大幅度删除、缩小的同时也要保留一些基本的命令和目录。
这些保留的命令和目录大体可以分为三类。一类是Linux系统启动所需要的。这类重要的文件有init、getty等,重要的目录与文件有/etc/rc.d、/etc/inittab等;在启动时还会调用目录/bin及/sbin下的一些命令,若已删除,可以根据启动时的出错信息进行添加。第二类是用于完成一些系统基本功能的保留命令和目录,最简单的如拷贝命令cp,进入和跳出目录的命令cd,列举目录下内容的命令ls等,这些命令完成操作系统最基本的功能。另一些命令需要与特定的配置文件或是存放配置文件的目录相对应,完成相对特殊的功能。当然,具体要实现什么功能要根据实际来定,并尽可能保留必要的命令与相应的目录或是配置文件,达到在完成功能的情况下尽可能少地占用存储空间。完成上面的裁减工作后,重启。若Linux能够正常启动、运行,表明初步的Linux嵌入式系统已经构架成功。最后一类就是使无线网关能够正常工作的。无线网关是以运行脚本命令pcmcia将驱动程序中已编译好的目标文件作为模块加载到系统中而启动的,Linux提供了depmod、insmod、rmmod及其他一些命令来保证适当的模块以正确的顺序加载,所以系统中必须保证存在这些命令,同时无线网关启动时还要读取配置文件。这些配置文件通知无线网关的驱动程序相关参数的设置,所以配置文件所在的目录/ect/pcmcia要保留。有了这些以后,无线网关就能正常启动了。
2.3无线网关功能的实现
如图1所示,无线网关需要完成的最重要的功能就是:与无线节点通信、桥接所有的无线节点、实现无线网络和有线网络的跨网段连接。
图1无线网络与有线网络的连接示意配置Linux的内核模块,用PCMCIA CardService的方式驱动PCMCIA,运行“make modeules”以及“make modeules_install”来产生和安装核心模组。由于标准发行的Linux内核源码中,桥接功能和封包过滤功能(NetFiliter)不能一起正常工作,因此为了要在同一台计算机上同时运行桥接功能和IPtables,需要对核心源码进行修补。相关补丁可以从http://bridge.sourceforge.net/上下载。另外,要获取PCMCIACS 3.2.1和PRISM2 HostAP的驱动程序包,移植PCMCIACS和PRISM2 HostAP的驱动程序。完成这一步工作需要具有Linux下编译程序源码的简单知识,主要是交叉编译器(GCC)的使用。编译好的模块*.o文件放在/lib/modules/2.4.4/misc下,然后用depmoda使此模块成为可加载模块。模块用insmod命令加载,用rmmod命令卸载,并可以用lsmod命令查看所有已加载的模块的状态。最后,桥接有线网卡和无线网卡,需要Linux下硬件(主要是网卡)配置和网络配置的一些基本知识。
模块搭建完毕后进行桥接功能的构建。解开桥接补丁bridgeutils.tar.gz,编译全部通过并且移植成功后,可以用“ifconfig a”命令查看所有的网络接口:lo——本地loopback设备;eth0——第一个以太网卡;eth1——第二个以太网卡;wlan0——无线网卡。用“ifconfig <设备> 0.0.0.0”命令改变除了lo设备以外所有网络接口的工作方式,以迫使系统进入杂乱模式,可以接收所有数据包。然后,执行“brctl addbr br0”命令来添加一个名字为br0的桥接设备,再用“brctl addif br0 eth0”和“brctl addif br0 wlan0”把无线端和有线端的接口绑定。接着,用“ifconfig br0 192.168.2.18 up”使桥接设备生效。
内核配置时选定General setup --->/[*/] Sysctl support,这样才会在板子的文件系统中/proc/sys/net/ipv4/出现ip_forward 文件,然后在应用程序中提供ena 程序(加到etc/init.d/rcS中一句/bin/ena e),将ip_forward 文件中默认的0 改为1,这样就打通了数据转发的通道。下面就是要加上iptables,以支持NAT(Network Address Translation)。从网上下载iptables1.2.5 软件,在iptables1.2.5 目录下执行make,编译通过后,将生成的可执行文件iptables 加到ramdisk里面,然后烧写到板子上进行配置即可。
iptables 对NAT的支持既需要Linux内核的支持,还需要iptables 命令的设置:
① 内核编译选项。在内核配置选单中的“Networking options --->”选项下,选中“Network packet filtering (replaces ipchains)”项,并且在下面的“IP: Netfilter Configuration --->”选项中选择全部选项。
② iptables 命令支持图3上位机与无线终端通信测试结果# !/bin/bash
# 打开端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward 
加入转发规则:iptables –t nat –A POSTROUTING–o eth1 –j MASQUERADE。
至此,构建无线网关的工作全部完成。
3测试结果
搭建无线网关的测试系统如图2所示。
将上位机的网关设置为172.17.248.169,用VB 6.0在上位机上开发一个负责监听网络的应用程序;在无线终端一方编写一个客户端程序,负责客户端数据的发送和接收显示,并在无线终端一方添加从网关到上位机的路由。然后,上位机运行ping命令,测试结果如下:
# ping 192.168.6.100 PING 192.168.6.100(192.168.6.100): 56 data bytes
64 bytes from 192.168.6.100: icmp_seq=0 ttl=255 time=1.8 ms
64 bytes from 192.168.6.100: icmp_seq=1 ttl=255 time=1.4 ms
64 bytes from 192.168.6.100: icmp_seq=2 ttl=255 time=1.4 ms
64 bytes from 192.168.6.100: icmp_seq=3 ttl=255 time=1.4 ms
--- 192.168.6.100ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.4/1.5/1.8 ms
上位机与无线终端通信的测试结果如图3所示。
图2无线网关的功能测试结语
至此,嵌入式Linux系统上802.11b无线网关的软件实现工作基本结束。测试结果表明,无线网关的基本功能,即与无线终端通信、桥接无线终端、实现无线网络和有线网络的跨网段连接已经实现。下面将对该无线网关做完善,以便进一步实现该无线网关在EPA(Ethernet for Plant Automation)控制网络中的应用。参考文献
1IEEE Std 802.11b1999
2邹思轶.嵌入式Linux设计与应用/[M/]. 第2版. 北京:清华大学出版社, 2002
3Breezecom Ltd. BreezeNet Pro.11 wireless Network Seria1 Products.Israel:2000
4ELHoiydi A Implementation options for the distribution system in the 802.11 wireless WLAN infrastructure network.Communications,2000. ICC 2000.2000IEEE International Conference on,2000(1):164~169
5John Clark Craig, Jeff Webb Visual, Basic 6.0程序开发环境/[M/]. 第1版. 北京:北京大学出版社, 1999
6Heegare C. Highperformance Wireless Ethernet. IEEE Communications Magazine, 2001,39(11):64~73