基于OMAP的嵌入式TCP/IP开
发布时间:2008/8/20 0:00:00 访问次数:788
介绍了嵌入式系统tcp/ip的网络层及运动层c代码的开发过程,结合以太网控制器lan91c96实现其链路层,将通用的上层程序移植到0map平台上,实现了0map平台的底层tcp/ip协议。
随着人们对智能化产品需求的增加,未来的嵌入式产品,包括各种家电、通信、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协议族的各层初始化,成功则进入主循环。主循环采用“中断+循环”结构,简单且分层清晰。中断作为应用层发出命令,调用下层的入口。对于接收到的以太网帧,则由下到上分别进入各层进行处理。
(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包接收函数,用各种条件对其进行
介绍了嵌入式系统tcp/ip的网络层及运动层c代码的开发过程,结合以太网控制器lan91c96实现其链路层,将通用的上层程序移植到0map平台上,实现了0map平台的底层tcp/ip协议。
随着人们对智能化产品需求的增加,未来的嵌入式产品,包括各种家电、通信、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协议族的各层初始化,成功则进入主循环。主循环采用“中断+循环”结构,简单且分层清晰。中断作为应用层发出命令,调用下层的入口。对于接收到的以太网帧,则由下到上分别进入各层进行处理。
(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包接收函数,用各种条件对其进行