基于ARM&Linux的EVDO 3G路由器设计
2012-07-25郭育红欧海燕
郭育红,欧海燕
(1.杭州海康威视数字技术有限公司,杭州310012;2.杭州电子科技大学,杭州310018)
1 引言
一直以来,用户接入Internet的业务大都采用固网,移动网所能提供的Internet接入业务因为网络速度受限而无法普及使用。2009年1月,工业和信息化部发放了我国的3G牌照。3G时代的到来,为移动网的Internet无线高速接入提供了良好的解决方案。第三代移动通信系统传输速率的最低要求为:在高速移动环境中144kbps,步行慢步移动环境中384kbps,静止状态下2Mbps。该速率完全能满足普通用户接入 Internet的需要。国际电信联盟(ITU)接受的3G标准主要有以下三种:WCDMA、CDMA2000和 TD-SCDMA。随着国内 WCDMA、CDMA2000、TD-SCDMA三种标准3G网络的进一步覆盖,越来越多的个人使用3G移动接入互联网,为了让多台计算机组成的小型无线局域网能够共享3G宽带接入服务,就需要使用能够接入3G网络的路由器设备;另外,在安防监控、电力、交通、建筑等行业,采用3G路由器对原有网络接入设备进行改造,可以提高不同行业应用对带宽的要求,并且将改变特殊环境下有线接入难以实施的状况。CDMA2000是由窄带CDMA(CDMA IS95)技术发展而来的宽带CDMA技术,该标准提出了从CDMA IS95(2G)-CDMA2000 1X-CDMA2000 1X EVDO(3G)的演进策略。CDMA2000 1X EVDO是CDMA2000 1X的增强型技术。它是针对支持高速无线互联分组数据的传输而优化的网络和频谱资源。本文讨论了基于ARM&Linux 平台和中兴通讯的CDMA2000 1X EVDO模块MC8630的EVDO 3G路由器设计。在EVDO网络环境下,它可以以无线的方式接入Internet,同时可以组建小型局域网,局域网内的计算机可以通过它访问Internet。
2 路由器硬件设计
路由器的硬件电路结构简图如图1所示。根据系统要求,路由器主芯片的工作频率应该在200MHz左右。目前市场上推出的3G无线模块大都采用USB的方式同主控芯片连接,因此需要路由器的主控芯片带USB HOST接口。本文讨论的3G路由器采用Atmel公司的工业级ARM9微处理器AT91RM9200作为主控芯片。AT91RM9200是基于ARM920T内核构建的具有丰富外设,低功耗、低成本、高性能的32位微处理器,可广泛应用于工业、自动控制、通信等领域。工作在180MHz频率时,处理速度高达200MIPS,片内含有16K的SRAM和128K的ROM。具有丰富的接口资源,包括USB2.0全速USB HOST接口,10/100 Base-T型以太网接口,带有独立的媒体接口(MII)或简化的独立媒体接口(RMII),4个通用同步/异步接收/发送器(USART)等[1]。由于其具有优良的性能,在业内得到越来越广泛的应用,并且很好地得到了嵌入式 Linux、VxWorks和WinCE等常用嵌入式操作系统的支持,可以显著地减少在该平台上移植相关操作系统的工作,缩短产品研发时间。
在嵌入式系统中,常用的电源有低压差稳压电源(LDO)和开关电源(DC/DC)。低压差稳压电源是一种线性稳压电源。稳压电源自身的功率损耗与输入输出电压的压差成正比。现在常用的低压差稳压电源的压差一般可达1.2V,具有外围电路相对简单,价格便宜等特点。DC/DC开关电源用PWM脉宽调制来调节电路开关器件的导通时间,从而控制电路的平均输出电压。开关电源具有输出功率大,转换效率高等优点,但相对于LDO,开关电源的设计较为复杂,LC滤波电路性能要求较高,同时对PCB布线要求也较高。本文讨论的路由器采用12V直流电源供电,采用了一片 DC/DC开关电源LM2596-5.0来产生5.0V电源,一片DC/DC开关电源LM2596-3.3来产生3.3V电源,一片低压差稳压电源LM1117来产生1.8V电源。
如图1所示,通过微处理器的地址/数据总线外扩了16M的NOR FLASH E28F128J3A-150和8M的SDRAM MT48LC8M16A2。本文讨论的3G路由器采用中兴通讯公司的MC8630 Evolution Data Only(EVDO)3G无线模块。该模块具有语音、短信和高速数据业务等功能,可广泛应用于高速数据传输、智能抄表、智能家电和车载监控等领域。该模块采用CDMA2000 1X EVDO制式,工作在800MHz频段,发射时824~849MHz,接收时869~894MHz。该模块采用了主天线和辅助天线,通过双天线接收分集技术和均衡技术,使得前向数据速率最高可达3.1Mbps,反向数据速率最高可达1.8Mbps,通过USB 2.0接口和微处理器AT91RM9200相连接[2]。
图1 路由器结构框图
3 路由器软件设计
以下讨论的3G路由器的软件设计基于嵌入式Linux来实现。Linux是真正意义上的多任务、多用户操作系统,内置了TCP/IP协议,它提供了强大的网络功能,已经被成功移植到各种硬件平台,可以大大缩短产品的研发时间,它是免费开源的,用户可以根据嵌入式系统FLASH和SDRAM等资源受限等特点,针对嵌入式产品的功能需求对嵌入式操作系统进行裁减,其高度模块化的设计使得添加部件非常便利。在本文所讨论的嵌入式3G路由器产品设计中,移植了版本为2.6.23的Linux内核,并在该内核基础上完成了Ramdisk、jffs2文件系统以及相关应用程序的开发。其可执行镜像依次存放在系统的存储设备上,系统采用的存储设备为16M的Nor FLASH,系统的各个软件模块在其中的存放位置如表1所示。
表1 FLASH中镜像存放地址
3.1 Linux下EVDO模块USB口驱动设计
经过重新定制的内核,已经集成支持了系统板上绝大多数外围设备的驱动程序,包括串口、以太网接口以及USB HOST等设备的驱动程序。但对于3G路由器,还需要对具体3G模块支持的驱动程序。Linux下对于一个硬件设备的驱动,可以分为两种方式:一种是直接加载到内核模块代码中,启动内核时就会驱动此硬件设备;另一种是以模块的方式,编译后生成一个.o文件,当应用程序需要时再加载到内核空间运行[3]。ZTE MC8630 EVDO模块最高速率达3.1Mbps,采用USB 2.0接口与CPU连接。对于标准USB接口的调制解调器设备,一般采用映射为串口方式进行通信,MC8630也不例外。在Windows下使用USBlyzer进行观察,得到该设备的USB配置信息,其中 Vendor ID为0x19D2,Product ID为0xFFFE。在Linux 2.6.23内核当中,已经带有通用型的USB转串口驱动USB Generic Serial Driver,可以在内核配置中将其选择为模块编译,配置方式如下所示:
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
执行make modules编译出相应的模块usbserial.ko后,再通过NFS或者TFTP下载到目标板上,执行如下命令进行驱动加载:
insmod usbserial.ko vendor=0x19d2 product=0xfffe
这样,将在文件系统/dev下面生成ttyUSB0、tty-USB1、ttyUSB2、ttyUSB3 这四个节点。其中,ttyUSB0为数据业务节点,ttyUSB1为诊断节点,ttyUSB2为语音节点,ttyUSB3为扩展节点。如此就可以使用Linux下串口编程的方法来操作 ttyUSB0和 tty-USB1,从而实现数据拨号功能及短信功能。
3.2 路由器的应用软件设计
一般来说,路由器的功能可以分为网络管理、网络服务、网络安全和系统管理等四个方面。本文以下部分仅对iptables工具和动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)功能的实现做了简单介绍。
从1.1内核开始,Linux就已经具备了包过滤功能,从2.4内核以后开始采用iptables内核包过滤管理工具,它可以增加、插入或者删除核心包过滤表格(链)中的规则。实际上执行这些过滤规则的是netfilter及其相关模块。netfilter包含了INPUT、FORWARD和OUTPUT 3个链,每一条链中包含了若干条规则。当一个数据包到达一个链时,系统就会从第一条规则开始检查,判断是否符合该规则所定义的条件。数据包在filter表中的流程如图2所示。
图2 数据包在filter表中的流程
当有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链。如果数据包的目的地址是本机,则系统将数据包发往INPUT链,如果通过规则检查,则该包发给相应的本地进程处理,如果没有通过规则检查,系统就会丢弃该数据包;如果数据包的目的地址不是本机,则这个包将被转发,系统将数据包发往FORWARD链,如果通过规则检查,该包将被发给相应的本地进程处理,如果没有通过规则检查,系统就会将这个数据包丢掉;如果数据包是由本地进程产生的,则系统将其发往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理,否则系统丢弃该数据包。使用iptables工具编写的规则举例如下:
使用IP包过滤功能,如:
iptables-A FORWARD-p tcp-s 202.96.102.3-d 192.168.8.33-dport 80-j DROP
该规则在FORWARD链上,将源地址为202.96.102.3发往目的地址为192.168.8.33端口号为80的tcp数据报丢弃。
目的地址NAT功能,如:
iptables-t nat-A PREROUTING-p tcp-i ppp0-dport 80 -j DNAT -to-destination 192.168.8.33:10000
该规则在PREROUTING链上,将从ppp0接口接收到的目的端口为80的tcp数据包转发至目的地址为192.168.8.33的设备上,目的端口改为10000。
DMZ功能,如:
iptables-t nat-A PREROUTING-i ppp0-j DNAT-to-destination 192.168.8.64
该规则将192.168.8.64设备设置为DMZ主机。
DHCP可让主机自动进行网络配置。这个协议用于向计算机自动提供IP地址、子网掩码和路由信息[4]。网络管理员通常会分配某个范围的IP地址来分发给局域网上的客户机。当设备接入这个局域网时,它们会向DHCP服务器请求一个网络配置信息,DHCP服务器会给每个请求的设备分配一个地址,直到分配完该范围内的所有 IP地址为止。Linux下常见的DHCP软件有dhcpd和dhcpcd,dhcpd用于搭建DHCP服务器,dhcpcd是DHCP的客户端程序,用于接收DHCP服务器的配置信息。启动时dhcpd自动读取它的配置文件/etc/config/dhcpd.conf。dhcpd将客户的租用信息保存在/etc/config/dhcpd.leases文件中。本文所讨论的3G路由器的DHCP配置信息如下所示:
当dhcpd启动后,就可以向DHCP客户端配置以上信息。
4 实验结果
本文讨论的3G路由器提供了小型局域网到Internet的无线接入方式,系统结构如图3所示。路由器提供了多达10个以太网接口,经实际测试,当单台PC机通过路由器接入Internet,使用迅雷等下载工具下载数据时,最高速率可达3.1Mbps。
图3 系统连接图
5 结束语
基于ARM9微处理器AT91RM9200和嵌入式Linux操作系统设计实现了EVDO 3G路由器,系统方案可行,性价比高,具有较大的产品化价值。该方案只需做少量的修改即可适应于WCDMA和TDSCDMA等其它制式的3G路由器设计。本文讨论的3G路由器已经进入小批量试制阶段,在电力视频监控、公交视频监控等高速无线数据传输领域进行了试用,取得良好的效果。
[1] Atmel Corporation.ARM920T-based Microcontroller AT91RM9200[EB/OL].http://www.atmel.com/dyn/resources/prod_documents/doc1768.pdf,2009.
[2] ZTE Corporation.中兴通讯MC8630模块技术规格书[EB/OL].http://www.cmtekchina.com/doc/中兴通讯%20MC8630模块技术规格书_V1.0.pdf,2008.
[3] 罗苑棠.嵌入式Linux驱动程序和系统开发实例精讲[M].北京:电子工业出版社,2009.
[4] R Droms.RFC2131,Dynamic Host Configuration Protocol[EB/OL].March 1997.