Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1707420
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类:

2007-11-21 20:17:01

uip移植心得


注册日期: Feb 2004
来自: 南京
帖子: 1,066



花了近一年的时间,终于把这个GPRS搞定了.就整个系统来讲,TCP/IP协议栈的难度远大于PPP协议栈.由于是在LPC2100平台上跑的UCOS II,又没有第三方的软件支持,TCP/IP协议栈最开始选定了三个开源的栈:ucip,lwip,uip.其中,lwip可谓是最好的一个,对系统的支 持也是最好的,但我的内存................ucip几乎就没有什么说明的文档,除非你不怕死,自己去分析源码.uip大家是知道的,超小 型的协议栈.结果可想而知,16K的RAM,还得跑系统,我选择了uip0.9.

uip对于有外部缓冲区的系统来讲,象RTL8019,RTL8139这类的网卡芯片的支持下,还算是一个不错的协议栈.(事实上有好多卖51上以太网的开发板,都是在这样的硬件条件下,采用uip的典型用法,做一个什么破WEB服务器, 公司刚买了块ZLG的2200,看了一下ZLG/IP,应该说开发板还是ZLG,英蓓德等几家做的还算不错,其它的............不多讲,有人会拿刀砍我的.)
言归正传.由于是单IC系统,没有外部的缓冲器,用uip就象场噩梦.接触过uip的大侠都知道,uip协议栈的操作是基于一个全局缓冲区(其原理就是认 为数据包的重发可以由应用程序来生成,因此协议栈不作任何保护).因此,在进入协议栈进行数据处理一直到数据发送完毕,你必须关中断!!!

续上:所以,我把uip拿到手里,仔细看完一遍后,就开始了大手术.首先把UIP的单缓冲区结构改成双缓冲区结构,即输入输出缓冲区分开.(在内存能承受 的条件下,又能提升系统的性能,何乐不为?)窗口协议当然是没法子做了(想想你的XP吧,TCP/IP用了多少的内存,再看看LWIP,哪个不是张大嘴狂 吃内存的),好在应用中的数据流量并不很大,系统还算能吃得消.这样子,接收中断的关闭时间大大的降低了,而且在处理数据重发的时候容易的多.

谢谢几位老友的支持,很汗颜的是其实我接触TCP/IP的时间也不是很长,整个算来也就一年的时间,中间还花了几个月的时间搞了另外一个小东西,写此文只 是为了抛砖引玉,也希望对即将做类似东东的大虾们一点参考(当然在不涉及公司商业秘密的条件下).不足和错误之处欢迎大虾们指正批评!
续上: 由于系统要求可以自己主动向服务器发送数据,因此,UIP的缺陷又暴露出来.(UIP本来就是设计用于服务器的,但其对数据的发送,我依然觉得做得不够 好.不过还算好的是,UIP0.9已经支持ACTIVE_OPEN,不然整个状态机还得改写.因此,如果做客户端的话,向客户端的主动链接,主动的数据传 输,是需要自己来增加的).因为是GPRS链路,还得需要定时的心跳来维持链路.

一下子打这么多字真的好累.
主动链接很容易,发送一帧SYN即可,再对应设置一下保存当前链接的结构即可.这样就可以让协议栈进入SYN_SENT状态.主动发送也比较简单,自己填 充数据域,由UIP来填充相应的TCP/IP首部即可.心跳包则使用了系统的TICKS定时器,定时到,主动发送一帧空数据包.
有意思的是,一直认为ARM的定时器很金贵(功能很强),使用的时候都比较小心,最后整个写下来,竟然两个定时器中都还有一个没舍得用.UCOS II中的TICKS定时器功能真的强!!

uip支持的是SLIP?uip本身只提供协议层的东西,和链路层没有关系.
另外,PPP协议提供了包括链路控制协议协商,身份认证,IP地址请求,作为独立的一组协议,是不能被替代的.
uip协议栈没有提供PPP协议支持,你可以考虑一下ucIP/LWIP

参考LWIP中的PPP协议栈,包括:LCP,PAP/CHAP,IPCP三个部分.



阅读(1424) | 评论(0) | 转发(0) |
0

上一篇:MMU的作用(for ARM)

下一篇:ucos/lwip移植心得

给主人留下些什么吧!~~