以太网LED图文显示系统的设计 第6页
3嵌入式TCP/Pl协议栈wLPl的移植
3.1LwIP概述
枷正是瑞士计算机科学院(SwedishnIstiutteofCo娜uterSeienee)的AdmaDuknels
等开发的一套用于嵌入式系统的开放源代码的TCP/正协议栈[l2]。wLPI既可以移植到操
作系统上,又可以在无操作系统的情况下独立运行。
LW正将其所有协议栈实现在一个与操作系统内核分离的独立进程中,这样做最大的
好处在于其跨操作系统的移植性。应用程序可以驻留在LW正进程中,也可以是一个单独
的进程。应用程序与LwPI进程通信的方式根据应用程序执行的方式分成两类:当应用程
序与LW正在一个进程中时,可以通过函数调用的形式通信;当应用程序与LW正在不同
进程时,可以通过更为抽象的API进行通信。
wLPI的特性如下【’3]:支持多网络接口下的正转发;支持CIMp协议;包括实验性扩
展的UDP用户数据报协议;包括阻塞控制RTT估算和快速恢复和快速转发的TCP传输控
制协议;提供专门的内部回调接口Rwa妙I用于提高应用程序性能;可选择的Bkerelye
接口妙(I多线程情况下);在最新的版本中支持ppp;新版本中增加了的护斤ag叮net的支
持;支持DHCP协议,动态分配Pi地址。
3.2wLPI的内存管理
通信系统中的存储管理系统必须能够接受可变缓存,如大至包括带有几百字节数据
的TCP段到只有几个字节的CIMp回复[’4]。同时,还需要将数据驻留在不由网络子系统
管理的内存中,以此来避免数据拷贝。
信息包缓存P(acketbuerffs一busf)是wL正中信息包的内部表示〔‘习。pbusf的结构既
支持用动态内存分配的方式来保存信息包内容,也可以将信息包中数据驻存在静态内存
中。pbusf同时也可以通过链表连接起来,称作Pbusf链,这样信息包就可以跨越几饰busf。
pbusf有三种类型:pBU下一R阁M,pBU下皿oM,pB价espoOL。图3.1表示了
BP讲eeRAM类型,其包含了通过pbu仔系统管理的数据。而图3.2则表示了一个pbu滋。
链中第一个Pbu璞型是PBU下J跳M,第二个是PB哪--ROM类型,其数据在外部存储器
中,不受pbu仔系统管理。图3.3表示了从缓冲池分配出来的固定大小的pbusf。一个pbuf
链可以包含多种类型的Pbuf。
三种不同类型的Pbu隋不同的用途。PB璐espooL主要用于网络设备的驱动程序,
因为分配一个Pbu琏度比较快,适用于中断处理程序中。PB班eeROM主要用于传送那些
基于以太网的LED图文显示系统的设计
由应用程序管理的内存中的数据,这些数据穿过TCP胆时不需要修改。对PBUFROM
来说,一些头的信息被存放在Pbu喂表最前面的PBUFesRAM中,就像图3.2一样。
nnneXttt
PPP盯10耐耐
lllennn
ottttlennn
月月a郎1Refff
LLLinkhedaerrr
IIIPheaderrr
TTTCPheaderrr
图3.1有数据的PUB--FRMA结构
Fig.3.1PBU几RAM,sUrtetiriewihtdata
nnneXtttttneXIIIIIIIII
PPPyaloadddddP叮loddddddda
lllennnnnlennnnnnn
fffia只51Reffffffffffffffffffffftttttttttttttttttttotlennnnnnn
月月月月a,s!Refffffff
图3.2PBU几RMOpbuf链与PBU几RMApbuf链接
Fig.3.2ChainnigofPBU--FROMPbufnadPBU--F即以Pbuf
nnneXtttttneXtttttn已Xttt
PPP即10幼幼幼P即lodddddaPyaloddddddda
.............................................
lllennnnnlennnnnlennn,,
ottttlonnnnnottlennnnntotlennnnn
且且agsl砒rrrrrfl二1Refffff月哪1Refffff
图3.3PBUF_P00Lpbuf链表
Fig.3.3ChainedlistofPBU几POOL
Pbu地用于应用程序发送动态产生的数据的情况。在这种情况下,pbu原统不仅要
为应用程序数据分配内存,而且还要为其头(header)s分配内存。就像图3.1一样。Pbu啄
统不能预先知道什么样的头信息是需要的,于是就假定最坏的情况。头的大小在编译的
大连理工大学硕士学位论文
时候是可配置的。一句话,进来的Pbu提PBU下--P00L类型,出去的Pbu提PBU下皿OM
或者是PBUFRAM类型。
支持Pbu哟内存管理是非常简单的,只要满足能够分配和释放相邻的内存,同时还
能收缩先前分配内存的大小就可以了。这种内存管理需要用到系统整个内存中的指定区
域。这样就可以保证网络系统不会耗尽系统内存而导致其它应用程序受到干扰。
在具体的实现上,内存管理通过在每一个分配出去的内存顶部放一个小的数据结
构,以此跟踪每一块分配出去的内存。如图3.4,这个结构包含两个指针分别指向前一个
印erv)和下一个n(xeo分配的内存块。同时它还包括一个标志位(usde),来表示内存块是
否已被分配。
通过对空闲内存搜索找到一块足够的内存进行分配,这里采用最先匹配算法。当一
个块分配过的内存被释放之后,其usde位清零。为了消除内存碎片,释放后内存管理需
要检查下一个和先前一个内存块的usde位,如果任何一个没有使用则进行合并。
nnneXttt
PPP阳vvv婚.一一
UUUSOddddd
矛矛公长幼幼幼
尹尹尹neXttttt
.....曰........................
,,‘‘P份vvv咬,...
夕夕夕·useddddd
价价价妊段所所所
nnne洲沈沈沈
pppr吧vvv
UUUSeddd
图3.4内存分配结构
Fig.3.4SUrteurteofmemoyralloeation
3.3网络接口
wLPI中物理网络硬件的设备驱动的网络接口表示与BSD中相似〔’3],网络接口表
示的数据接口如下:
neti动数据结构
s加ctnetif{
sturctnetif*next;
基于以太网的LED图文显示系统的设计
hcxanmae汇ZJ;
intnum;
srtuct币_dadrpi_addr;
s加eti几dadrnetmask;
s加ctPi_dadrwg;
void(*i即叫(sUrtetpbuf*p,stucrtnetif*i即);
int(*ouPtu)t(s加etnetif*neti,fsUrtctPbuf*P,surteti--Pdadr*iPdad)r;
void*state;
};
nxet指针用于将网络接口链入到全局链表中。nxnae域用于表示网络接口的类型,只
用在运行时由人工进行配置。nmae由设备驱动设置,应该反映硬件的种类。nurn就用来
区分同一种网络接口类型。--Pidadr,nenrtkas,wg分别用来表示护地址,子网掩码,网
关。state标示设备驱动所包含的网络接口状态,由设备驱动设置。
当设备驱动接受到一个信息包的时候需要调用帅ut指向的函数。而网络接口通过
uoPtut指针与设备驱动连接。这个指针指向处于设备驱动中的发送信息包的函数,这个
函数将在一个信息包发送出去后,被正层调用。指针。吻ut将在设备驱动初始化的时候
赋值。
3.4lp处理过程
LwP只实现了最基本的PI功能。它能发送、接受、转发信息包。但是不支持分段正
信息包并且不能处理有PI选项的信息包[‘31。但是对于大多数应用来说,wL正己经够用了。
3.4.1接收信息包
对于进来的正信息包网络设备驱动先调用i妇PnutO函数。这里要进行一系列的完整
性检查,如正版本信息,头长度以及计算和检查头校验和。协议栈不会接受分段的正信
息包,因为代理将分段的正信息包重组,这样任何一个分段的正信息包就被悄悄的清除
了。另外,带有PI选项的信息包也被代理给丢弃了。
接着,此函数将检查目的地址与网络接口地址是否一致来判定信息包是否是此主机
的。对网络接口地址的搜索是线性的,因为网络接口一般不多,没有必要订制复杂的搜
索算法。如果进来的信息包的目的是本机,则协议域决定了将信息包送到哪个更高层的
协议。
3.4.2发送信息包
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
以太网LED图文显示系统的设计 第6页下载如图片无法显示或论文不完整,请联系qq752018766