物联网高手应备:网络协议栈LwIP(一)

物联网 网络管理
上节我们对LwIp的目录结构已经有了了解,我们这篇文件将就LwIp协议栈做更深一步的研究。

上节我们对LwIp的目录结构已经有了了解,我们这篇文件将就LwIp协议栈做更深一步的研究。

[[268859]]

重要源文件解释

LwIp的源码源文件多达几百个,我们去读源码的时候不能一下子全部读完,我们在读源码时候需要有所重点的去读,才能快速的把握LwIp的精髓。

API目录是提供了Socket接口和Sequential API的接口,Socket.c实现了BSD socket的接口封装,tcpip.c文件并没有实现tcpip协议,实际上是Sequential API 主线程模块的的实现。api_lib.c是Sequential API的接口的实现。

core目录则是协议栈的核心,其中tcp.c ip.c,udp.c 则是整个tcp/ip协议栈的核心实现,ip层还分为ipv4和ipv6两个目录,里面有ipv4 ipv6层的的具体实现。mem.c 和memp.c是内存管理的核心实现。

netif目录是接口部分,***的2.0版本和原来的1.4版本对以太网部分做了较大改动,ethernetif.c是以太网驱动文件,需要根据具体硬件来进行移植。ethernetif.c文件在1.4版本的是在本目录下,2.0版本则放到用户的目录下。本目录还有其他的接口文件如ppp协议的等。ethernet.c是对以太网报文的抽象出入口函数接口。

无操作系统移植和初始化

把LwIp移植到具体的网卡上和操作系统上需要一定的工作量,移植LwIp分操作系统移植和非操作系统移植,操作系统移植较为繁琐,我们先讨论非操作系统移植。

非操作系统移植主要是需要移植ethernetif.c文件。网卡的初始化要放在low_level_init函数内执行。low_level_init函数是配置MAC地址,物理网卡的初始化函数。调用流程如下

物联网高手必备---网络协议栈LwIP(三)

网卡初始化流程

low_level_init设置好物理网卡芯片的参数(mac地址,phy型号,mac接口类型,接收模式,自协商等等),把这些参数写入到网卡芯片的寄存器中。

物联网高手必备---网络协议栈LwIP(三)

物理网卡芯片初始化

物理芯片设置好了后就可以接收和发送数据了,但接收和发送数据函数需要由LwIp的函数来进行封装,否则无法被LwIp处理。

数据接收流程

无操作系统和有操作系统的数据接收方式有所不同,无操作系统的接收入口函数是ethernetif_input,把网卡接收到数据送到LwIp协议栈

 

 

物联网高手必备---网络协议栈LwIP(三)

 

 

数据接收流程

 

数据发送流程

物联网高手必备---网络协议栈LwIP(三)

 

注册发送函数

物联网高手必备---网络协议栈LwIP(三)

 

发送流程

 

在low_level_output函数内要实现自己的网卡发送功能。

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-06-14 06:32:54

LwIP网络协议物联网

2011-11-09 14:59:37

LwIP协议栈

2011-11-08 15:40:47

LwIP协议栈嵌入式

2020-11-19 09:19:42

物联网物联网标准物联网协议

2018-12-24 06:56:12

物联网网络协议MiWi

2019-07-15 14:40:39

网络安全攻击加密

2020-03-14 13:13:02

物联网IOT通信协议

2020-12-21 10:07:34

物联网协议物联网IOT

2022-06-27 10:41:45

MQTT物联网协议

2021-04-14 15:37:05

物联网标准和协议

2024-03-26 11:52:13

2023-03-20 16:16:40

MQTT传输协议

2010-09-09 13:30:03

Linux网络协议栈

2023-09-24 23:18:50

2024-10-12 14:40:03

多协议数采盒工业物联网

2022-09-19 11:03:27

物联网物联网协议

2019-11-20 10:04:21

物联网通讯协议IOT

2019-11-27 11:12:54

物联网通讯协议IOT

2019-11-20 22:52:49

物联网通讯协议IOT

2019-11-26 09:16:09

物联网通讯协议IOT
点赞
收藏

51CTO技术栈公众号