Lwip协议栈的详细分析与移植.doc

Lwip协议栈的详细分析与移植.doc

ID:55797794

大小:178.00 KB

页数:15页

时间:2020-03-01

Lwip协议栈的详细分析与移植.doc_第1页
Lwip协议栈的详细分析与移植.doc_第2页
Lwip协议栈的详细分析与移植.doc_第3页
Lwip协议栈的详细分析与移植.doc_第4页
Lwip协议栈的详细分析与移植.doc_第5页
资源描述:

《Lwip协议栈的详细分析与移植.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Lwip协议栈的分析与移植主要解决两个问题:操作系统仿真层的移植。这个基于uCOS-II的代码太多了。可以借鉴焦海波著的LWIP移植i章。I'设备驱动的移植.驱动的移植主要就是完成ethernetif.c的工作。作者已经给好了驱动的接口。structnetif{stnactnetif*next;structip_addrip_addr;structip_addrnetmask;structip_addrgw;err_t(*input)(structpbuf*p,structnetif*inp);err_t(*output)(structnetif*netif,struc

2、tpbufstructip_addr*ipaddr);err_t(*linkoutput)(structnetif*netif,structpbuf*p);void*state;#讦LWIP_DHCPstnactdhcp*dhcp;#endifunsignedcharhwaddr_len;unsignedcharhwaddr[NETIF_MAX_HWADDR_LEN];ul6_tmtu;charname[2J;u8_tnum;u8_tflags;};主要就是:err_t(*input)(structpbuf*p,structnetif*inp);这个是被驱动调用的,传递

3、一个数据包给TCP/IP栈。err_t(*output)(structnetif*netif,structpbuf*p,structip_addr*ipaddr);这个是被IP模块调用的,向以太网上发送一个数据包,函数要先通过IP地址获得解决硬件地址,然后发包。err_t(*linkoutput)(structnetif*netif,structpbuf*p);这个是直接发送数据包的接口相应的作者在ethernetif.c里而给了儿个函数框架,这个文件相当于一个硕件捕象层。staticvoidlow_level_init(structnetif*netif)网卡初始化函

4、数staticerr_tlow」evel_output(sfnicfnetif*netif,structpbuf*p)链路层发送函数,实现err_t(*linkoutput)接口。staticstructpbuf*low」evclnetif*netif)得到一報帧数据staticerr_tethernetif_output(structnetif*netif,structpbuf*p,structip_addr*ipaddr)实现发送线程,实现err_t(*output)接口。staticvoidethernetifLinput(structnetif*netif)实现

5、接收线程,识别数据包是ARP包还是IP包err_tethernetif_init(structnetif*netif)初始化底层接口其实,写驱动的时候只要自己再筵个ethemet.c,实际的网络硬件控制的文件然后提供儿个函数比如:voidEMACInit(void)硬件的初始化voidEMACPacketSend(u8_t^buffer,u16_tlength)用来将buffer里而的包复制到网络设备的发送缓冲里而,发送。ul6_tEMACPacketReceive(u8_t^buffer,u16_tmax」ength)用來将网络设备的接收缓冲里面的包数据复制到buff

6、er里面。u16_tEMACPacketLength(u16_tmax」ength)获得包长度还有其他控制类函数。最厉,用ethernet.c里的函数完成ethernetif.c里的框架。这样脉络可能会清楚•点。LWIP的移植主要是参考网络文献和网卡的数据手册。下面从lwip协议栈入手分析lwip协议栈的具体函数。移植LWIP协议栈主要关注的是底层和网卡之间的衔接工作。structnetif*netif_add(structnetif*netif,structip_addr*ipaddr,structip_addr*netmask,structip_addr*gw,vo

7、id*state,err_t(*init)(stmctnetif*netif),err_t(*inpiH)(s(nictpbuf*p,structnetif*netif))添加一个网络设备:跟物理网卡再配i个IP地址。State域用來和实际的网卡交互。指示网卡的状态信息。Init()隊

8、数是初始化网络设备两数,这个两数在添加的时候被调用。Input()函数参数只是对网络设备注册,这个函数在输入的时候调用。netif_add()函数,配宜网络设备的相关信息,初始化对应的网络设备。系统屮的网络设备由…个网络设备的链表构成。此函数会传进來-•个

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

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

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