随着人们对智能化产品需求的增加,未来的嵌入式产品,包括各种家电、通信、PDA、仪器仪表等设备正逐渐走向网络化,以共享互联网中庞大的信息资源,因而使嵌入式设备的网络化开发有广阔的市场前景。由于嵌入式硬件资源有限,而传统的TCP/IP等网络通信协议对计算机存储器、运算速度的要求较高,所以不能直接应用。为此,必须开发一套适合嵌入式系统的、高度优化的、最为精简的TCP/IP协议栈。
开放式多媒体应用平台OMAP(Open MulTImedia ApphcaTIon Platform)是美国德州仪器公司推出的高度集成的软硬件平台。OMAP具有独特的双芯结构,结合了DSP与RISC内核,可为无线多媒体设备提供独一无二的性能和功耗优势。OMAP可连接十分丰富的外围设备,包括USB、摄像头、声音设备、视频设备、网络设备等。OMAP拥有开放式体系结构,其应用环境完全可编程。
软件协议的设计与实现在很大程度上决定了通信终端的质量。基于OMAP的3G移动终端软件协议结构由信令协议栈和应用业务协议栈组成,如图l所示。TCP/IP协议栈位于应用业务协议栈的底层,为上层的H.323协议栈提供基础与服务。其性能质量将直接决定整个通信终端软件系统的运行质量。因此,针对嵌入式系统联网的发展方向,为OMAP系统其设计一套高效、简洁的TCP/IP协议,对其应用具有十分重要的意义。
1 开发方案
PC上有功能强大的VC平台和网络分析工具(如Sniffer)便于调试,其设计不针对任何一个嵌入式芯片,具有较好的通用性和可移植性。在PC机上实现的TCP/IP协议,除了以太网层要结合OMAP平台的网卡硬件重写外,基本上可以直接移植到OMAP平台上,不需要再做大的改动。作为一个通信程序,必然需要两端程序同时调试,在PC机上编好的程序能对OMAP平台上程序的调试提供可靠的帮助。因此,协议开发采用先模拟再移植、先整体再部分的设计思路,而协议各层实现的顺序为自下而上。具体步骤是:
(1)在PC机的Windows *** 作系统及VC 6.0开发平台上,实现嵌入式系统TCP/IP协议族的模拟器。该模拟器应该能实现TCP/IP协议的基本功能,包括以太网驱动程序、ARP、IP、UDP、TCP等,并且实现的ARP、IP、UDP、TCP层的程序应该通用于各种嵌入式系统并可移植。
(2)将该模拟器移植到OMAP开发平台,用其以太网卡的驱动程序替换原模拟器的链路层程序。在TI提供的CCS平台上最终实现基于OMAP的TCP/IP协议。
2 开发平台
OMAP的多媒体开发平台Innovator主要由4个模块组成:PM(处理器模块)、IM(接口模块)、EM(扩展模块)、BOB(主连接板)。OMAP处理器在PM上,以太网卡在BOB上。可以通过Innovator上的OMAPl510芯片的ARM教处理器对单片以太网控制器LAN91C96的工作进行控制,实现以太网帧的收发,并通过CCS对程序调试。图2为OMAP平台调试环境。
3 在PC上实现协议的基本模块
3.1 主要模块介绍
(1)主流程:首先对TCP/IP协议族的各层初始化,成功则进入主循环。主循环采用“中断+循环”结构,简单且分层清晰。中断作为应用层发出命令,调用下层的入口。对于接收到的以太网帧,则由下到上分别进入各层进行处理。协议实现主流程如图3所示。
(2)PC上的以太网层:在内存中开辟接收和发送两个相同的循环缓冲区,用于存放接收和发送的以太网帧。WinPcap软件是基于Windows平台的一个网络包工具,它提供一个系统内核级的动态链接库Packet.dll作为标准的API,具有独立于 *** 作系统的编程接口。利用其提供的API可直接联系网卡驱动与已定义的循环缓冲区,将缓冲区中的数据发出,并将网卡接收的数据存入缓冲区。
(3)ARP层:在内存中开辟一块循环存储区域用于存放已知的IP-MAC对应表。该表可以由上层舔加,在接收到ARP应答时会自动添加,也可以由上层清空。处理ARP层函数的过程为:根据以太网首部协议字段过滤出ARP包,针对ARP请求与ARP应答进行不同的处理。应答对方的请求,记录对方的应答。
(4)IP层:根据以太网首部的帧类型标志判断接收到的是不是IP包来处理IP层函数。如果是,则调用IP包的接收函数,对收到的IP包用各种条件进行过滤,对于满足条件的包获取其长度与指针信息供上层使用。本层另一个主要函数是IP包发送函数,由上层调用进行IP封装。
IP的检验和仅包括IP首部,长度一般为20字节(如果没有选项)。在接收端,丢弃检验和不为0xFFFF的包;在发送端,将计算所得值的反码填入检验和字节。由于主机和网络对数据中高低字节默认的顺序不同,在读写包中的16位、32位数据时,应该先进行高低字节的交换。
(5)UDP层:处理UDP层函数应根据IP首部的协议字段判断是否UDP包。如果是,则调用UDP包接收函数,用各种条件对其进行过滤,提出UDP数据及各种有用信息,根据端口号提交给应用进程处理。本层的另一个主要函数是UDP发送函数,实现封装UDP包(包括载入UDP数据,计算并填入UDP首部信息),最后调用IP发送函数,交由IP层处理。
(6)TCP层:与UDP不同,TCP主机要进行数据通信之前,必须与对方建立连接。与几个主机通信,就要建立几个连接。然而,若要知道接收到的TCP包属于哪个连接且使得几个不同的连接之间独立工作、互不干扰,则需要定义TCP的控制模块。这里用一个结构体数组实现,存放所有关于连接的信息。
处理TCP层函数,判断接收包的类型,如果是TCP包.则调用TCP接收函数。TCP接收函数用指定条件进行过滤,找到该包所属的连接或完成一个新连接的被动打开,根据TCP的状态转换规则完成11种状态的转移,并且实现了多路数据同时、双向的传输。
TCP的发送函数包括主动打开、主动关闭(由上层调用完成新连接的主动打开,或主动关闭一个已建立的连接)和发送控制包(用于TCP连接的建立与终止,会在TCP接收函数中调用,从而实现TCP状态的转换)三个函数。
TCP层还实现了两个定时器。TCP重传定时器函数可提供服务可靠性的有效保障;TCP保活定时器能够避免资源的浪费。
3.2 程序特点分析
(1)简单性:4.4BSD-Lite版的完整TCP/IP内核实现大约有15000行,而本程序源代码约有l400行,更适合嵌入式系统的应用。
(2)可重用性:本程序分层清晰。对于不同的嵌入式系统,可能使用的CPU和以太网卡不同,这就需要针对其特点的以太网层设计,而ARP、IP、UDP、TCP则不需要改动。
(3)可拓展性:TCP/IP协议是底层网络协议,本程序留有很好的接口,可在其上构建更高层的网络协议,包括H.323协议、ftp、telnet。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)