LWIP总结

摘要:
功能齐全,运行所需的RAM和ROM较少;Linux和Windows平台中的套接字接口与此类似;MAC+PHY层的迁移,如线程创建、定时器和操作系统层的消息邮箱;UCOS ii迁移的核心点ST公司针对的是没有操作系统版本的STM32F107的LWIP迁移版本。由于其版本不再更新,与此软件平台不一致,因此只需修改应用层框架迁移的实现;
介绍

    Lwip,light weight IP;是由Adam Dunkels 开发的一个小型开源的TCP/IP协议栈;目前已经为全球共同开发的开源协议;支持TCPIP协议族的核心协议;包括:ARP/ICMP/TCP/UDP/IPV4/IPV6/DHCP等;其核心特点是:功能齐全、运行需求的RAM和ROM少;

编程模型

    所有的功能和性能都可进行裁剪和配置;相关文件为:lwipopts.h

    内部实现支持带操作系统和不带操作系统;核心框架是:外部单线程驱动协议栈状态机;底层使用中断进行数据的接收;

    其提供三种API :1)RAW API 2)lwip API 3)BSD API。其中BSD API就是大家最熟悉的socket API了。Linux和Windows平台中的socket接口都与此大同小异;

移植

将lwip移植到不同的平台主要包括两个部分工作:

  1. MAC+PHY层移植,包括初始化、数据的收发;
  2. 应用层框架移植,如操作系统层的线程创建、定时器、消息邮箱;

平台

    硬件:STM32F107 PHY芯片:DM9161AEP

    软件:UCOS-ii    

移植核心点

    ST公司针对STM32F107 不带操作系统版本的LWIP移植版本,文件名为STM32F107_ETH_LwIP,版本为V1.0.0;由于其版本不再更新且与本软件平台不一致,所以不做参考;

    由于STM32F1 STM32F2 STM32F4的以太网驱动都是一致的。所以到ST官网下载stm32cubdf2。其中有LWIP针对FREERTOS的移植;而FREERTOS与UCOS大同小异;所以只要针对其修改应用层框架移植的实现即可;相关代码位于:stm32cubef2STM32Cube_FW_F2_V1.1.0ProjectsSTM322xG_EVALApplicationsLwIPLwIP_UDPTCP_Echo_Server_Netconn_RTOS;

    LWIP的代码使用1.4.1版本,可到LWIP官网上下载;也包含在stm32cubef2中;

    移植的理论基础来源于lwip 1.4.1源码包中doc文件夹中的文件;同时官方也有移植到各个平台中的示例,文件为:contrib-1.4.1.zip,到官网上下载即可;

  1. MAC+PHY移植:

                        需要修改的文件为:

           app_ethernet.c/h

           ethernetif.c/h

           同时需要将stm32cubef2驱动库中的stm32f2xx_hal_eth.c/h拷贝过来;

           以上文件只需要配置好,保证编译没问题,则MAC+PHY层移植完成;

       2. 应用层框架移植:

                      修改1个文件sys_arch.c,位于stm32cubef2STM32Cube_FW_F2_V1.1.0MiddlewaresThird_PartyLwIPsystem;

    所有的移植即完成;

注意点

    STM32Cube_FW_F2_V1.1.0此版本中关于lwip的驱动MAC代码是有bug的,具体表现在当以太网包数量加大时,会出现底层收数据很慢的情况;使用PING命令经常出现TIMEOUT;

此bug在STM32cubeF4中得到解决;相关问题原因描述见参考资料;

参考资料
  1. 核心论文 <<Design and Implementation of the lwIP TCP/IP Stack>> By Adam Dunkels.2001
  2. 移植资料

    http://www.stmcu.org/module/forum/thread-588339-1-1.html

         <<lwIP TCP/IP stack demonstration for STM32F107xx connectivity line microcontrollers >> By ST

     3.  lwip官方网站https://savannah.nongnu.org/projects/lwip/

免责声明:文章转载自《LWIP总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇flume 1.7在windows下的安装部署与测试运行Shell脚本之sed详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell实现大批量word转码然后分析相关字段

需求 需要从服务器中的所有附件(2013-2019) 共60G查找相关字段 在linux上面直接打开doc等是乱码的 思路 先全部附件转码为txt, 然后用grep遍历查找字段实现 转码shell #!/bin/bash #*******************************************************************...

(转)简单的RPC java实现 .

转;http://blog.csdn.net/jackliang55/article/details/7580563  我也承认,RPC的名声大噪之时是在2003年,那一个“冲击波”病毒(Blaster Worm virus)袭卷全球的一年。而“冲击波”正是用着RPC这把刀来敲开了远程电脑的大门。当然RPC 有更多正面的应用,比如NFS、Web Serv...

acegi security实践教程—入门

Acegi Security概念     Acegi Security是基于J2EE的企业软件应用提供全面的安全服务。通俗的说,就是封装的安全框架。提到安全,大家脑子中第一反应肯定是权限控制。的确如此,安全主要的功能就是为了权限控制。    Acegi Security 和Spring Security 是一回事吗?为啥搜索Acegi Security框架...

将 .NET Framework 项目转换为 .NET Standard 项目

将 .NET Framework 项目转换为 .NET Standard 项目 独立观察员 2020 年 8 月 20 日 如今 .NET Core 是未来发展的主流(至少在 .NET 5 发布之前),而我们如果要改造一个项目为 .NET Core 项目,则它引用的项目应当先改造为 .NET Standard 项目。 下表给出了每种平台支持指定的 .NET...

glibcxx升级

经过测试“GLIBCXX3.4.21 not find”这篇博文解决了我的问题。 以下是安装步骤: 一、首先查看当前gcc版本 strings /usr/lib/x86_64_linux-gun/libstdc++.so.6|grep GLIBCXX 二、升级安装GCC 1. 下载最新版本gcc gcc当前最新版本是5.2,下面是我找到的两个下载镜像,...

用configmap管理配置

一、ConfigMap介绍管理配置: ConfigMap介绍 Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ConfigMap 的创建和使用方式与 Secret 非常类似,主要的不同是数据以明文的形式存放。 与 Secret 一样,ConfigMap 也支持四种创...