LwIP裸机移植与编程介绍课件_第1页
LwIP裸机移植与编程介绍课件_第2页
LwIP裸机移植与编程介绍课件_第3页
LwIP裸机移植与编程介绍课件_第4页
LwIP裸机移植与编程介绍课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

123LwIP源码组织架构与移植41LwIP介绍与源码获取常见的嵌入式TCP/IP协议栈背景介绍5简单RAW接口编程实例123LwIP源码组织架构与移植41LwIP介绍与源码获取常2

随着社会的快速发展,在数据采集领域,针对一些小型监测设备通过网络功能来实现远程数据传输显得异常重要。而现存的IP网诸如全球Internet网的趋势愈演愈烈,只要那些设备上实现了TCP/IP协议栈并增加一个网络接口,就可以方便的接入到现有的网络中,所以小型化嵌入式设备的网络接入技术是未来物联网实现的关键。背景介绍背景介绍TCP/IP协议栈网络接入网络接口2随着社会的快速发展,在数据采集领域,针对3背景介绍背景介绍TCP/IP协议栈是一种四层的结构模型,如图所示:

对于一些低端的嵌入式产品,受到本身硬件资源的限制,几乎没办法支持完整的TCP/IP协议栈,而且一些情况也不需要支持!3背景介绍背景介绍TCP/IP协议栈是一种四层的结构模型,4常见的嵌入式TCP/IP协议栈uC/IP

uC/IP是由GuyLancaster编写的一套基于uC/OS且开放源码的TCP/IP协议栈,亦可移植到操作系统,是一套完全免费的、可供研究的TCP/IP协议栈,uC/IP大部分源码是从公开源码BSD发布站点和KA9Q(一个基于DOS单任务环境运行的TCP/IP协议栈)移植过来。uC/IP具有如下一些特点:带身份验证和报头压缩支持的PPP协议,优化的单一请求/回复交互过程,支持IP/TCP/UDP协议,可实现的网络功能较为强大,并可裁减。uC/IP协议栈被为一个带最小化用户接口及可应用串行链路网络模块。根据采用CPU、编译器和系统所需实现协议的多少,协议栈需要的代码容量空间在30-60KB之间。4常见的嵌入式TCP/IP协议栈uC/IP5uIP

uIP由瑞典计算机科学学院(网络嵌入式系统小组)的AdamDunkels开发。其源代码由C语言编写,并完全公开。uIP协议栈去掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。 1)代码非常少,其协议栈代码不到6K,很方便阅读和移植。 2)占用的内存数非常少,RAM占用仅几百字节。 3)对数据的处理采用轮循机制,不需要操作系统的支持。 4)支持多个主动连接和被动连接并发。 5)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。常见的嵌入式TCP/IP协议栈5uIPuIP由瑞典计算机科学学院(网6LwIP

LwIP是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是LightWeight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIPTCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。常见的嵌入式TCP/IP协议栈6LwIPLwIP是瑞士计算机科学院7常见的嵌入式TCP/IP协议栈三种TCP/IP协议栈的比较LwIP和uC/IP是同量级别的两个开源协议栈,两者代码容量和实现功能相似,LwIP没有操作系统针对性。而uC/IP协议最初是针对uC/OS设计,依赖于操作系统。

从应用和开发的角度看,选择LWIP更有优势,网上可供参考的文档资料较多;而uC/IP在文档支持与软件升级管理上有很多不足,但是它最初是针对UC/OS而设计,如果选用UC/OS作为软件基础的话,在系统函数构造方面有优势。uIP代码容量小巧,实现功能精简,但也限制了在一些稍高要求场合下的应用,如大容量数据传输。7常见的嵌入式TCP/IP协议栈三种TCP/IP协议栈的比较LwIP介绍与源码获取LwIP介绍8

lwIPisasmallindependentimplementationoftheTCP/IPprotocolsuitethathasbeendevelopedbyAdamDunkelsattheComputerandNetworksArchitectures(CNA)labattheSwedishInstituteofComputerScience(SICS).

ThefocusofthelwIPTCP/IPimplementationistoreducetheRAMusagewhilestillhavingafullscaleTCP.ThismakinglwIPsuitableforuseinembeddedsystemswithtensofkilobytesoffreeRAMandroomforaround40kilobytesofcodeROM.LwIP介绍与源码获取LwIP介绍8lwIPLwIP介绍与源码获取9LwIP主要特性LwIP的版本较多,新的版本通常是对LwIP的功能进行完善。LwIP主要特性如下:ARP协议,以太网地址解析协议;UDP协议,用户数据报协议;TCP协议,支持TCP拥塞控制,RTT估计,快速恢复与重传等;IP协议,包括IPv4和IPv6,支持IP分片与重装,支持多网络接口下数据转发;ICMP协议,用于网络调试与维护;IGMP协议,用于网络组管理,可以实现多播数据的接收;提供三种用户编程接口方式:raw/callbackAPI、sequentialAPI、BSD-stylesocketAPI;DNS,域名解析;DHCP,动态主机配置协议;SNMP,简单网络管理协议;AUTOIP,IP地址自动配置;PPP,点对点协议,支持PPPoE。LwIP介绍与源码获取9LwIP主要特性LwIP的版本较多,LwIP介绍与源码获取10源码获取访问:/releases/lwip/LwIP源码获取LwIP介绍与源码获取10源码获取访问:LwIP源码获取11LwIP源码组织架构与移植LwIP源码文件组织LwIP文件目录的组织结构如下图所示:其中,doc文件夹中为LwIP介绍、移植与编程说明文档;test文件夹中为LwIP提供的一些测试程序;

src文件夹中包含了LwIP的源码。11LwIP源码组织架构与移植LwIP源码文件组织LwIP文12doc文件目录解析LwIP|—doc|—contrib.txt:开发者如何为LwIP做贡献;

|—rawapi.txt:RAW接口编程介绍;|—savannah.txt:获取最新源码说明;|—sys_arch.txt:系统抽象层说明文档(包含移植说明);LwIP源码组织架构与移植12doc文件目录解析LwIPLwIP源码组织架构与移植13src文件目录解析LwIP|—src|—api:LwIP为用户提供的两种高级API接口;

|—core:LwIP内核源码,包含IP、ICMP、IGMP、TCP、UDP等核心协议以及建立在它们基础上的DNS、DHCP、SNMP等上层应用协议;|—include:LwIP使用到的相关头文件;|—netif:主要包含了与底层网络接口相关的文件;LwIP源码组织架构与移植13src文件目录解析LwIPLwIP源码组织架构与移植14LwIP源码组织架构与移植LwIP裸机移植LwIP移植准备工作:1、Keil基础工程;2、LwIP源码的下载,文中的移植版本为v1.3.2;3、STM32F207以太网库的下载,在ST官网下载;LwIP裸机移植:1、STM32F207以太网库添加到基础工程;(由于官方以太网库中配有stm32f2x7_eth_conf_template.h,且是针对DP83848编写的,直接用就可以了);2、LwIP源码添加到基础工程;3、DP83848网口芯片的驱动程序的编写(根据板子的实际情况);4、添加中间文件arch文件以连接LwIP和以太网驱动;14LwIP源码组织架构与移植LwIP裸机移植LwIP移植准15修改文件说明LwIP源码组织架构与RAW接口编程LwIP提供的ethernetif.c文件给出了网络接口驱动的整体框架,用户需要自己完成的函数主要有3个,分别是:底层初始化函数low_level_init()——该函数用来对网络接口进行初始化,任何与初始化网络接口有关的操作都可以在该函数内实,如MAC地址配置;底层输入函数low_level_input()——该函数为到达的数据包分配pbuf(通常是一个pbuf链),并将数据包从网络接口传入至pbuf链中;底层输出函数low_level_output()——该函数负责将数据包发送至指定的网络接口中。15修改文件说明LwIP源码组织架构与RAW接口编程LwIP16

在LWIP的源码中有个opt.h的文件,这个文件是裁剪和配置LWIP的,但最好不要直接在里面修改。这里参照网上资料,在lwipopts.h中对功能和性能进行裁剪和配置。LwIP源码组织架构与RAW接口编程修改文件说明16在LWIP的源码中有个opt.h17RAW接口编程LwIP为用户提供三种编程接口方式:raw/callbackAPI、sequentialAPI、BSD-stylesocketAPI。

而后两种编程接口是需要操作系统支持的,根据我们的实际应用情况出发,采用RAWAPI编程。使用RAWAPI进行TCP/IP编程,可以使应用程序的代码和TCP/IP协议栈的代码很好地结合起来。程序的执行机制是以回调函数为基础的事件驱动的,同时回调函数也是被TCP/IP代码直接调用的。TCP/IP代码和应用程序的代码运行在同一个线程里面,在程序代码的执行时间上更快,而且在运行中它也占用更少的内存资源。简单RAW接口编程实例17RAW接口编程LwIP为用户提供18回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。程序的执行是靠回调函数来驱动的。每一个回调函数也只不过是一个能够直接被TCP/IP代码调用的普通的C语言函数。每一个回调函数的调用都是传递一个当前连接UDP或TCP的状态。另外,为了使应用程序有一个明确的执行状态,回调函数的指定是可编程的,并且是独立于TCP/IP状态之外的。简单RAW接口编程实例18回调函数回调函数就是一个通过函数指针调19RAW接口编程——UDP服务器简单RAW接口编程实例19RAW接口编程——UDP服务器简单RAW接口编程实例20简单RAW接口编程实例20简单RAW接口编程实例21RAW接口编程——UDP客户端简单RAW接口编程实例21RAW接口编程——UDP客户端简单RAW接口编程实例22RAW接口编程——TCP服务器简单RAW接口编程实例22RAW接口编程——TCP服务器简单RAW接口编程实例23简单RAW接口编程实例23简单RAW接口编程实例24RAW接口编程——TCP客户端简单RAW接口编程实例24RAW接口编程——TCP客户端简单RAW接口编程实例25简单RAW接口编程实例25简单RAW接口编程实例123LwIP源码组织架构与移植426LwIP介绍与源码获取常见的嵌入式TCP/IP协议栈背景介绍5简单RAW接口编程实例123LwIP源码组织架构与移植41LwIP介绍与源码获取常27

随着社会的快速发展,在数据采集领域,针对一些小型监测设备通过网络功能来实现远程数据传输显得异常重要。而现存的IP网诸如全球Internet网的趋势愈演愈烈,只要那些设备上实现了TCP/IP协议栈并增加一个网络接口,就可以方便的接入到现有的网络中,所以小型化嵌入式设备的网络接入技术是未来物联网实现的关键。背景介绍背景介绍TCP/IP协议栈网络接入网络接口2随着社会的快速发展,在数据采集领域,针对28背景介绍背景介绍TCP/IP协议栈是一种四层的结构模型,如图所示:

对于一些低端的嵌入式产品,受到本身硬件资源的限制,几乎没办法支持完整的TCP/IP协议栈,而且一些情况也不需要支持!3背景介绍背景介绍TCP/IP协议栈是一种四层的结构模型,29常见的嵌入式TCP/IP协议栈uC/IP

uC/IP是由GuyLancaster编写的一套基于uC/OS且开放源码的TCP/IP协议栈,亦可移植到操作系统,是一套完全免费的、可供研究的TCP/IP协议栈,uC/IP大部分源码是从公开源码BSD发布站点和KA9Q(一个基于DOS单任务环境运行的TCP/IP协议栈)移植过来。uC/IP具有如下一些特点:带身份验证和报头压缩支持的PPP协议,优化的单一请求/回复交互过程,支持IP/TCP/UDP协议,可实现的网络功能较为强大,并可裁减。uC/IP协议栈被为一个带最小化用户接口及可应用串行链路网络模块。根据采用CPU、编译器和系统所需实现协议的多少,协议栈需要的代码容量空间在30-60KB之间。4常见的嵌入式TCP/IP协议栈uC/IP30uIP

uIP由瑞典计算机科学学院(网络嵌入式系统小组)的AdamDunkels开发。其源代码由C语言编写,并完全公开。uIP协议栈去掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。 1)代码非常少,其协议栈代码不到6K,很方便阅读和移植。 2)占用的内存数非常少,RAM占用仅几百字节。 3)对数据的处理采用轮循机制,不需要操作系统的支持。 4)支持多个主动连接和被动连接并发。 5)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。常见的嵌入式TCP/IP协议栈5uIPuIP由瑞典计算机科学学院(网31LwIP

LwIP是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是LightWeight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIPTCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。常见的嵌入式TCP/IP协议栈6LwIPLwIP是瑞士计算机科学院32常见的嵌入式TCP/IP协议栈三种TCP/IP协议栈的比较LwIP和uC/IP是同量级别的两个开源协议栈,两者代码容量和实现功能相似,LwIP没有操作系统针对性。而uC/IP协议最初是针对uC/OS设计,依赖于操作系统。

从应用和开发的角度看,选择LWIP更有优势,网上可供参考的文档资料较多;而uC/IP在文档支持与软件升级管理上有很多不足,但是它最初是针对UC/OS而设计,如果选用UC/OS作为软件基础的话,在系统函数构造方面有优势。uIP代码容量小巧,实现功能精简,但也限制了在一些稍高要求场合下的应用,如大容量数据传输。7常见的嵌入式TCP/IP协议栈三种TCP/IP协议栈的比较LwIP介绍与源码获取LwIP介绍33

lwIPisasmallindependentimplementationoftheTCP/IPprotocolsuitethathasbeendevelopedbyAdamDunkelsattheComputerandNetworksArchitectures(CNA)labattheSwedishInstituteofComputerScience(SICS).

ThefocusofthelwIPTCP/IPimplementationistoreducetheRAMusagewhilestillhavingafullscaleTCP.ThismakinglwIPsuitableforuseinembeddedsystemswithtensofkilobytesoffreeRAMandroomforaround40kilobytesofcodeROM.LwIP介绍与源码获取LwIP介绍8lwIPLwIP介绍与源码获取34LwIP主要特性LwIP的版本较多,新的版本通常是对LwIP的功能进行完善。LwIP主要特性如下:ARP协议,以太网地址解析协议;UDP协议,用户数据报协议;TCP协议,支持TCP拥塞控制,RTT估计,快速恢复与重传等;IP协议,包括IPv4和IPv6,支持IP分片与重装,支持多网络接口下数据转发;ICMP协议,用于网络调试与维护;IGMP协议,用于网络组管理,可以实现多播数据的接收;提供三种用户编程接口方式:raw/callbackAPI、sequentialAPI、BSD-stylesocketAPI;DNS,域名解析;DHCP,动态主机配置协议;SNMP,简单网络管理协议;AUTOIP,IP地址自动配置;PPP,点对点协议,支持PPPoE。LwIP介绍与源码获取9LwIP主要特性LwIP的版本较多,LwIP介绍与源码获取35源码获取访问:/releases/lwip/LwIP源码获取LwIP介绍与源码获取10源码获取访问:LwIP源码获取36LwIP源码组织架构与移植LwIP源码文件组织LwIP文件目录的组织结构如下图所示:其中,doc文件夹中为LwIP介绍、移植与编程说明文档;test文件夹中为LwIP提供的一些测试程序;

src文件夹中包含了LwIP的源码。11LwIP源码组织架构与移植LwIP源码文件组织LwIP文37doc文件目录解析LwIP|—doc|—contrib.txt:开发者如何为LwIP做贡献;

|—rawapi.txt:RAW接口编程介绍;|—savannah.txt:获取最新源码说明;|—sys_arch.txt:系统抽象层说明文档(包含移植说明);LwIP源码组织架构与移植12doc文件目录解析LwIPLwIP源码组织架构与移植38src文件目录解析LwIP|—src|—api:LwIP为用户提供的两种高级API接口;

|—core:LwIP内核源码,包含IP、ICMP、IGMP、TCP、UDP等核心协议以及建立在它们基础上的DNS、DHCP、SNMP等上层应用协议;|—include:LwIP使用到的相关头文件;|—netif:主要包含了与底层网络接口相关的文件;LwIP源码组织架构与移植13src文件目录解析LwIPLwIP源码组织架构与移植39LwIP源码组织架构与移植LwIP裸机移植LwIP移植准备工作:1、Keil基础工程;2、LwIP源码的下载,文中的移植版本为v1.3.2;3、STM32F207以太网库的下载,在ST官网下载;LwIP裸机移植:1、STM32F207以太网库添加到基础工程;(由于官方以太网库中配有stm32f2x7_eth_conf_template.h,且是针对DP83848编写的,直接用就可以了);2、LwIP源码添加到基础工程;3、DP83848网口芯片的驱动程序的编写(根据板子的实际情况);4、添加中间文件arch文件以连接LwIP和以太网驱动;14LwIP源码组织架构与移植LwIP裸机移植LwIP移植准40修改文件说明LwIP源码组织架构与RAW接口编程LwIP提供的ethernetif.c文件给出了网络接口驱动的整体框架,用户需要自己完成的函数主要有3个,分别是:底层初始化函数low_level_init()——该函数用来对网络接口进行初始化,任何与初始化网络接口有关的操作都可以在该函数内实,如MAC地址配置;底层输入函数low_level_input()——该函数为到达的数据包分配pbuf(通常是一个pbuf链),并将数据包从网络接口传入至pbuf链中;底层输出函数low_level_output()——该函数负责将数据包发送至指定的网络接口中。15修改文件说明LwIP源码组织架构与RAW接口编程LwIP41

在LWIP的源码中有个opt.h的文件,这个文件是裁剪和配置LWIP的,但最好不要直接在里面修改。这里参照网上资料,在lwipopts.h中对功能和性能进行裁剪和配置。LwIP源码组织架构与RAW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论