嵌入式网络协议lwip移植

嵌入式网络协议lwip移植

ID:36251898

大小:703.93 KB

页数:38页

时间:2019-05-07

嵌入式网络协议lwip移植_第1页
嵌入式网络协议lwip移植_第2页
嵌入式网络协议lwip移植_第3页
嵌入式网络协议lwip移植_第4页
嵌入式网络协议lwip移植_第5页
资源描述:

《嵌入式网络协议lwip移植》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式网络协议LWIP移植lwIP是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。Lwip既可以移植到操作系统上,又可以在无操作系统的情况下独立运行。               LwIP的特性如下:(1) 支持多网络接口下的IP转发(2) 支持ICMP协议(3) 包括实验性扩展的的UDP(用户数据报协议)(4) 包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)(5) 提供专门的内部回调接口(RawAPI)用于提高应用程序性能(6) 可选择的Berke

2、ley接口API(多线程情况下)(7) 在最新的版本中支持ppp(8) 新版本中增加了的IPfragment的支持(9) 支持DHCP协议,动态分配ip地址。现在网上有最新的版本。1、lwip的进程模型(processmodel)tcp/ip协议栈的processmodel一般有几种方式。1)tcp/ip协议的每一层是一个单独进程。链路层是一个进程,ip层是一个进程,tcp层是一个进程。这样的好处是网络协议的每一层都非常清晰,代码的调试和理解都非常容易。但是最大的坏处数据跨层传递时会引起上下文切换(contextswitch)。对于接收一个TCPsegment要引起3次contextswit

3、ch(从网卡驱动程序到链路层进程,从链路层进程到ip层进程,从ip层进程到TCP进程)。通常对于操作系统来说,任务切换是要浪费时间的。过频的contextswich是不可取的。2)另外一种方式是TCP/IP协议栈在操作系统内核当中。应用程序通过操作系统的系统调用(systemcall)和协议栈来进行通讯。这样TCP/IP的协议栈就限定于特定的操作系统内核了。如windows就是这种方式。3)lwip的processmodel:所有tcp/ip协议栈都在一个进程当中,这样tcp/ip协议栈就和操作系统内核分开了。而应用层程序既可以是单独的进程也可以驻留在tcp/ip进程中。如果应用程序是单独的

4、进程可以通过操作系统的邮箱、消息队列等和tcp/ip进程进行通讯。    如果应用层程序驻留tcp/ip进程中,那应用层程序就利用内部回调函数口(RawAPI)和tcp/ip协议栈通讯。对于ucos来说进程就是一个系统任务。lwip的processmodel请参看下图。在图中可以看到整个tcp/ip协议栈都在同一个任务(tcpip_thread)中。应用层程序既可以是独立的任务(如图中的tftp_thread,tcpecho_thread),也可以在tcpip_thread中(如图左上角)中利用内部回调函数口(RawAPI)和tcp/ip协议栈通讯。2、PortLwiptouCos    在

5、这个实验系统中我们用的硬件平台是s3c44b0x+rtl8019。ucos在44b0上的移植在前面有非常详尽的讲解和移植代码。需要说明的一点是lwip会为每个网络连接动态分配一些信号量(semaphone)和消息队列(MessageQueue),当连接断开时会删掉这些semaphone和Queue。而ucos-2.0不支持semaphone和Queue的删除,所以要选择一些较高版本的ucos。我们用的是ucos-2.51。2.1Lwip的操作系统封装层(operatingsystememulationlayer)    Lwip为了适应不同的操作系统,在代码中没有使用和某一个操作系统相关的系

6、统调用和数据结构。而是在lwip和操作系统之间增加了一个操作系统封装层。操作系统封装层为操作系统服务(定时、进程同步、消息传递)提供了一个统一的接口。在lwip中进程同步使用semaphone和消息传递采用”mbox”(其实在ucos的实现中我们使用的是MessageQueue来实现lwip中的”mbox”,下面大家可以看到这一点)Operatingsystememulationlayer的原代码在…/lwip/src/core/sys.c中。而和具体的操作系统相关的代码在../lwip/src/arch/sys_arch.c中。操作系统封装层的主要函数如下:voidsys_init(voi

7、d)//系统初始化sys_thread_tsys_thread_new(void(*function)(void*arg),void*arg,intprio)//创建一个新进程sys_mbox_tsys_mbox_new(void)//创建一个邮箱void  sys_mbox_free(sys_mbox_tmbox)//释放并删除一个邮箱void  sys_mbox_post(sys_mbox_tmbox,v

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。