您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > LwIP移植说明文档
翻译:LizhimingMail:seu.zhiming@gmail.com1/43LwIP移植说明文档该译文以LwIP-1.4.0的移植文档为蓝本本文档翻译了LwIP-1.4.0的移植说明文档,包括原始API及SYS_ARCH接口的说明文档。由于译者水平所限,译文存在很多不确切或错误的翻译,还请网友多指正。需要特别提出的是,LwIP的SYS_ARCH接口部分参考了焦海波“uC/OS-II平台下的LwIP移植笔记”一文。在此,将译文放在网络上共享,愿与网友共同学习、共同进步。翻译:LizhimingMail:seu.zhiming@gmail.com2/43INTRODUCTIONlwIPisasmallindependentimplementationoftheTCP/IPprotocolsuitethathasbeendevelopedbyAdamDunkelsattheComputerandNetworksArchitectures(CNA)labattheSwedishInstituteofComputerScience(SICS).LwIP是一个TCP/IP协议簇的小型独立实现,该协议簇由瑞士SICS计算机网络实验室的Adam开发。ThefocusofthelwIPTCP/IPimplementationistoreducetheRAMusagewhilestillhavingafullscaleTCP.ThismakinglwIPsuitableforuseinembeddedsystemswithtensofkilobytesoffreeRAMandroomforaround40kilobytesofcodeROM.LwIPTCP/IP实现关注的是减小RAM的使用,同时拥有完整尺度的TCP协议。这使得LwIP适合于在只拥有数十k字节RAM和40k左右ROM的嵌入式系统中使用。FEATURES特性*IP(InternetProtocol)includingpacketforwardingovermultiplenetworkinterfacesInternet协议:包括通过多接口发送报文*ICMP(InternetControlMessageProtocol)fornetworkmaintenanceanddebuggingInternet控制报文协议:用于网络维护和调试*IGMP(InternetGroupManagementProtocol)formulticasttrafficmanagementInternet组管理协议:用于多播通信管理*UDP(UserDatagramProtocol)includingexperimentalUDP-liteextensions用户数据报协议:包括实验性UDP扩展*TCP(TransmissionControlProtocol)withcongestioncontrol,RTTestimationandfastrecovery/fastretransmit传输控制协议:拥有阻塞控制、RTT估计和快速恢复、快速传输等功能。*Specializedraw/nativeAPIforenhancedperformance专门的原始API用于提高性能。*OptionalBerkeley-likesocketAPI可选的伯克利形式SOCKET的API*DNS(Domainnamesresolver)域名解析(域名系统)*SNMP(SimpleNetworkManagementProtocol)简单网络管理协议*DHCP(DynamicHostConfigurationProtocol)动态主机配置协议*AUTOIP(forIPv4,conformwithRFC3927)自动IP*PPP(Point-to-PointProtocol)点对点传输协议*ARP(AddressResolutionProtocol)forEthernet英特网地址解析协议翻译:LizhimingMail:seu.zhiming@gmail.com3/43RawTCP/IPinterfaceforlwIPLwIP原始TCP/IP接口Authors:AdamDunkels,LeonWoestenberg,ChristiaanSimons作者:AdamDunkels,LeonWoestenberg,ChristiaanSimons翻译:LizhiminglwIPprovidesthreeApplicationProgram'sInterfaces(APIs)forprogramstouseforcommunicationwiththeTCP/IPcode:*low-levelcore/callbackorrawAPI.*higher-levelsequentialAPI.*BSD-stylesocketAPI.LwIP为程序(上层应用程序)提供了三种应用程序接口,用于和TCP/IP的代码通信,三种接口如下:*底层的“内核”/“回调函数”或“原始”API*较高层次的有序API*BSD样式的套接APIThesequentialAPIprovidesawayforordinary,sequential,programstousethelwIPstack.ItisquitesimilartotheBSDsocketAPI.Themodelofexecutionisbasedontheblockingopen-read-write-closeparadigm.SincetheTCP/IPstackiseventbasedbynature,theTCP/IPcodeandtheapplicationprogrammustresideindifferentexecutioncontexts(threads).有序API提供一种常规、有序的编程方法来使用LwIP堆栈。其非常相似于BSD套接API。其执行模型是基于阻塞的打开-读-写-关闭的范式。由于TCP/IP本质上是事件驱动的,TCP/IP代码和应用程序必须驻留在不同的线程中。ThesocketAPIisacompatibilityAPIforexistingapplications,currentlyitisbuiltontopofthesequentialAPI.ItismeanttoprovideallfunctionsneededtorunsocketAPIapplicationsrunningonotherplatforms(e.g.unix/windowsetc.).However,duetolimitationsinthespecificationofthisAPI,theremightbeincompatibilitiesthatrequiresmallmodificationsofexistingprograms.套接API是一个与现有应用程序兼容的API,当前,它是建立在有序API的基础之上。它为需要在其他平台(如Unix和Windows等)运行的套接API的应用程序提供完整的功能。但由于API在规格方面的限制,现有程序可能存在与之不兼容的地方,进而需要微小的调整。**Threading线程lwIPstartedtargetingsingle-threadedenvironments.Whenaddingmulti-threadingsupport,insteadofmakingthecorethread-safe,anotherapproachwaschosen:thereisonemainthreadrunningthelwIPcore(alsoknownasthetcpip_thread).TherawAPImayonlybeusedfromthisthread!Applicationthreadsusingthesequential-orsocketAPIcommunicatewiththismainthreadthroughmessagepassing.LwIP最初以单线程环境为目标。当加入多线程支持时,鉴于内核线程安全的考量,采取了另一种方法:一个主线程运行LwIP内核(也被称作“tcpip_thread”)。原始API可能只在该线程中使用。应用程序线程采用有序API或套接API通过消息投递与主线程通信。Assuch,thelistoffunctionsthatmaybecalledfromotherthreadsoranISRisverylimited!OnlyfunctionsfromtheseAPIheaderfilesarethread-safe:-api.h-netbuf.h-netdb.h翻译:LizhimingMail:seu.zhiming@gmail.com4/43-netifapi.h-sockets.h-sys.h同样地,被其他线程或中断服务程序调用的函数是非常地有限。只有如下API头文件中的函数是线程安全的:-api.h-netbuf.h-netdb.h-netifapi.h-sockets.h-sys.hAdditionaly,memory(de-)allocationfunctionsmaybecalledfrommultiplethreads(notISR!)withNO_SYS=0sincetheyareprotectedbySYS_LIGHTWEIGHT_PROTand/orsemaphores.此外,当NO_SYS=0时,内存的分配和释放函数可能被多个线程(不是中断服务程序)调用,因此它们(需)通过SYS_LIGHTWEIGHT_PROT宏定义和(或)信号量来保护。Onlysince1.3.0,ifSYS_LIGHTWEIGHT_PROTissetto1andLWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXTissetto1,pbuf_free()mayalsobecalledfromanotherthreadoranISR(sinceonlythen,mem_free-forPBUF_RAM-maybecalledfromanISR:otherwise,theHEAPisonlyprotectedbysemaphores).仅从1.3.0版本开始,如果SYS_LIGHTWEIGHT_PROT置1,pbuf_free()可由其他线程或中断服务程序调用(仅从那时开始,对PBUF_MEM的mem_free函数可能被其他中断服务程序调用:否则,HEAP仅能通过信号量保护)。**TheremainderofthisdocumentdiscussestherawAPI.**该文档的以下内容讨论原始APITherawTCP/IPinterfaceallowstheapplicationprogramtointegratebetterwiththeTCP/IPcode.ProgramexecutioniseventbasedbyhavingcallbackfunctionsbeingcalledfromwithintheTCP/IPcode.TheTCP/IPcodeandtheapplicationprogrambothruninthesamethread.ThesequentialAPIhasamuchhigheroverheadandisnotverywellsuitedforsmallsystemssinceitforcesamultithreadedparadigmontheapplication.原始TCP/IP接口允许应用程序与TCP/IP代码更好的集成。应用程序的执行是通过调用TCP/IP代码中的回调函数来实现事件驱动的。TCP/IP代码和应用程序运行在同一个进程里。有序API模式需要较高的开销,其不适合于小型的系统,因此,迫使应用程序使用多线程范式。TherawT
本文标题:LwIP移植说明文档
链接地址:https://www.777doc.com/doc-4106111 .html