基于ElanSC520微控制器和Linux操作系统的ADSL网关研究

描述

  作者:钟晓建,潘贵敦,梁小宇

引言

随着互联网上的内容越来越丰富多彩,人们对传输带宽的需求也逐渐增大,传统Modem的56K带宽日益显得不堪重负。如何充分有效利用现有的电话线资源来获得足够的带宽呢? ADSL(不对称数字用户环路)是一个很好的答案。ADSL技术利用电话线上高于话音频带的带宽(4K~1.1MHz),采用离散多音频调制技术来调制高速数字信号(传统的Modem是用话音频带来调制数字信号),下行速率可达8Mbit/s,上行可达1.5Mbit/s。随着超大规模集成威廉希尔官方网站 (VLSI)和数字信号处理(DSP)技术的不断进步,DSL技术也不断趋于成熟。ADSL完成A/D、D/A变换,采用FFT/IFFT作DMT和卷积编码调制,既实现了高带宽利用率,又保证了传输的低误码特性。我们所设计的ADSL网关采用Itex的Apollo 3 ADSL PCI解决方案作Internet的接入部分,另一侧用以太网或无线局域网接多用户,接口为RJ-45和无线访问点(AP)天线,提供了灵活方便的组网方式,可以广泛应用于家庭、小型办公室的接入。在软件上,我们采用根据硬件结构来定制Linux内核的方法,整合了必要的驱动模块来作网关的操作系统,不仅完成对ADSL接入模块、以太网模块以及无线局域网(WLAN)无线接入点AP模块的驱动,还提供DHCP、SNMP以及IP防火墙等应用功能。

一、 硬件体系结构

1.AMD微控制器总体构架

AMD公司推出的ElanSC520功能强大,适用于在嵌入式环境下用作协议处理器和网络处理器,兼容PC/AT,支持32位PCI外部总线,而且其传输的低延迟和低价位使其获得了广泛的应用。ElanSC520集成了一个工业级的X86处理器,从而为与X86结构适配的软件提供了良好的接口和易移植性,支持包括Linux和Windows在内的多种操作系统,内建的高速PCI总线接口符合PCI V2.2规范,可扩展1~5个PCI总线设备,通过其内部的PCI总线仲裁机制来决定与哪一个PCI设备进行相互通信。PCI总线的最高传输速率可达132MB/s。在ADSL网关设备的设计中,我们使用了三个PCI总线设备,这三个总线设备共享PCI总线与ElanSC520进行通信。ElanSC520微控制器还带有高性能的SDRAM和ROM/Flash接口,同时还有用于配置和调试的UART串行接口,可以接模拟终端。基于ATM的ADSL网关的硬件体系结构如图1所示:

Linux

图1:ADSL硬件体系结构

2. ADSL接入设备

ADSL接入端采用Itex的Apollo 3的PCI解决方案,其芯片组包括线路驱动、模拟前端和数字收发器,完成对电话线路上信号的发送和接收滤波、放大、A/D和D/A转换、FFT/IFFT等数字信号处理,并通过PCI总线与ElanSC520进行通信。该组芯片将PCI到UTOPIA(标准信元接口)的转换功能集成到DMT收发器和ATM的成帧器中,将线路接收器集成到模拟前端中。由于控制由主处理器完成,Apollo3不需要额外的存储设备和控制器,使板上的控制需求减少到最小,从而大大降低了功耗。该芯片组符合以下协议标准:G.992.1(G.DMT), G.992.2(G.LITE), G.994(G.HS), T1.413 Issue 2(1998)

其结构如图2所示:

Linux

图2:ADSL线路接入端结构

信号由RJ-11电话线接口进来,收端通过接收滤波器送到接收部分进行滤波、信号放大,经A/D变换,FFT解调,送往处理器进行处理;而在发端,由处理器出来的数字信号经过IFFT进行DMT调制,再经过线路驱动模块,滤波后发送到电话线路上进行传输。

3.以太网接口

以太网采用的是Realtek 的RLT8029AS芯片,与NE2000兼容,符合标准的802.3CSMA/CD协议规范。其全双工特性允许同时发送和接收,集成了曼彻斯特编解码器,可以用于无盘工作站。

4.WLAN_AP接口

为了方便笔记本电脑共享电话线上网,我们在用户端还提供了WLAN_AP接口,可以方便的进行无线局域网的组网,在这里我们使用了TI公司的PCI1410A桥芯片将PCI信号转为PCMCIA信号,接无线网卡,将数据包封装为符合IEEE802.11b协议的帧进行传输。

二、 软件体系结构

由于Linux操作系统的稳定性、开放性以及可扩展性,使它在嵌入式系统中获得较为广泛的应用,然而由于Linux允许非抢先式操作,使其不可能成为完全的实时系统,最多只能算是在统计意义上的实时。在ADSL网关的设计中我们可以将实时的信号赋予很高的优先级,从而保证在整体上公平地进行进程调度。

构建嵌入式操作系统,我们首先考虑到在一个嵌入式的应用环境下既没有多少内存也没有多少外存可用,操作系统必须存放在有限的存储器Flash中,所以我们必须根据硬件的构架来定制我们需要的Linux内核。由于ADSL接入端是基于ATM的,我们要为内核加上对PPP over ATM的patch(补丁),对于在ATM基础上支持Internet,实际上可以归结为在ATM上如何支持TCP/IP的问题,即ATM如何承载IP包的问题。在ADSL网关应用中,要共享ADSL线路接入Internet,遵循的是点到点协议,因此ADSL接入端的驱动程序实际上是一个PPP over ATM的模块,它将作为内核的一个可载入模块进行进程调用,而以太网驱动程序和WLAN_AP的驱动程序是实现在以太网和无线介质里传送IP包的,即分别用802.3和802.11的帧格式来封装IP包,这样ADSL网关的协议栈就如图3所示。

Linux

图3:ADSL网关的协议栈

在图3中,AAL5是ATM适配层,RFC1483是ATM适配层第五类型的多协议封装规范,描述了在ATM端系统中怎样在主机、桥设备和路由设备之间承载多协议业务。在ADSL网关中,根据ITU的协议规范,信号经过一系列变换以ATM信元的形式输出,因此我们要在ATM适配层的基础上将信号变成上层协议能够识别的包,从而决定该包是否转发,丢弃或者接收。根据RFC1483协议,有两种多协议封装的形式,一种是LLC封装多协议,即LLC-SNAP模式,在同一个VC上承载多协议,协议类型包含在LLC头中,另一种是VC-MUX模式,不同的协议使用不同的VC,则不需要在协议头中指明协议类型,而具体哪一个VC承载哪一种协议则是在链路初始化的时候确定,这种方法降低了链路开销,但在虚拟连接数量有限的情况下多数还是使用LLC复用。实现这个功能是通过在Linux内核中加载PPPOA模块来实现的。

PPP包中包括三种类型的信息:

* Link Control Protocol(LCP) 用来协商链路参数,包的大小,以及认证类型

* Network Control Protocol(NCP) 指明高层协议的信息,可以是IP、IPX及其控制协议。

* 数据帧

ADSL遵循的协议是基于ATM的,也就是在物理层是在电话线上调制高速数据信号,RS编码,扰码等一些物理层的协议,在物理层以上是以ATM信元格式输出的,而对于ADSL网关来说,PPP over ATM Adaption Layer 5(AAL5) RFC2364是用AAL5作为成帧协议,支持PVC,SVC, PPPOA是ADSL协议栈的基本部分,它依赖于RFC1483,工作在LLC-SNAP或VC-MUX模式下,用户端设备(CPE)封装PPP包的过程就是以PPPOA协议来进行ADSL环路和DSLAM上传输数据的。AAL5的公共部分汇集子层(CPCS)的协议数据单元如图4所示:

其中CPCS-PDU Payload部分是AAL5协议的数据部分,最大为216-1个字节,这是因为在下面的二字节的LENGTH域中限定的。PAD中有48个字节,刚好为一个信元的数据域,由SAR(分段重组)子层生成,CPI域是为了使CPCS-PDU TRAILER成64位而填补上去的,CRC采用32位的循环冗余校验码。

在我们的ADSL网关设计中,考虑到有限的虚拟连接的数量,我们采用的是LLC封装多协议的模式,即LLC-SNAP模式,其CPCS-PDU Payload域如图4所示。包括:

* LLC头:3字节,其中两个字节指定了一个目的SAP(0xFE)和源SAP(0xFE),后面是帧类型,为Un-numbered Information=0x03

* Network Layer protocol Identifier(NLPID),这里使用的是PPP,其类型值为0xCF

* PPP协议标识域为一和二字节

* PPP信息域

* PPP填充域

对于局域网内的用户通过以太网口和Wireless LAN的天线与网关互联,其中以太网和Wireless LAN使用不同的网段,网关要做的事情是看用户的IP包,如果是发往本局域网的,那要看是不是同一个网段的,如果是则丢弃,如果不是则发向另一网段,也就是说在本地的包业务通信中,起了一个桥接的作用。如果不是发向本局域网,而是发向广域网的包则通过PPP端口转发,实现其路由功能。以太网的驱动程序和WLAN驱动程序在Linux中也是作为一个可载入模块加载到Linux内核中。

为了实现应用网关功能,在应用层我们还根据实际需要实现了基于IP地址过滤的防火墙,网络地址解析,简单网络管理,动态主机地址分配,和WEB服务器,

重新编译内核时去掉对硬盘,鼠标,显卡,键盘的支持,只保留一个简单的文件系统,并放在Flash上,这样可以在线升级网关操作系统。内核的核心主要是进行内存管理,启动和中断。将PPPOA模块、以太网以及WLAN驱动模块编译进内核,内核程序与网络设备接口间采用消息驱动方式,三个模块对应三个消息队列和三个通信例程,每个例程负责监听相应端口的数据(对应一个消息队列),当接受到消息时,使进程转入处理程序,进行内存刷新、加工数据帧头、发送消息等工作,消息队列如果没有消息存在,该进程就释放CPU给其它进程。由于一些寄存器(DCR,SPR等)的值和外设的I/O空间要映射到物理内存空间,所以要在TLB中锁定这些内存,在为三个PCI设备进行内存分配时,要判断分配的内存空间是否与锁定的内存空间重叠。另外我们在硬件设计上使用了串口(RS-232)作为调试接口,可以在shell中测试系统命令,运行应用程序,或用GDB对应用程序进行调试,另外shell还用于对系统进行配置。配置包括配置全局参数对网关的命令行接口,需要配置拨号PPP over ATM端口、以太网和WLAN端口。在配置前需要确认ADSL线路与DSLAM连接,要有一个静态IP地址或者由ISP负责动态IP地址分配。网关在启动时,BIOS上电自检,加载文件系统,引导网关操作系统,ADSL线路进行握手操作,初始化链路,进入SHOWTIME。

三、 进一步的工作及展望

ADSL网关集ADSL modem 和应用网关于一体,既完成ADSL接入的模拟的调制解调工作,又在此基础上实现了资源共享,简单网络管理以及网络安全方面的功能等,是一种有着广泛应用前景的技术。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分