lwip协议以太网驱动层的软件数据结构详细解析

扶醉桌前 提交于 2020-08-14 10:52:11

1、概述

       本文详细介绍了LWIP协议在rt-thread操作系统上的驱动层结构,rt thread操作系统的硬件驱动层采用标准的设备驱动结构,网络接口对应的网络设备netdev。网络设备下面对应的是以太网驱动程序,同时网络设备向应用层提供网络的各种功能接口,实现了如linux操作系统的ifconfig, ping命令等功能。整个lwip协议到底层硬件的结构如下,具体的参考代码可以查看rt-thread 3.1.3的正点原子阿波罗bsp工程。

lwip协议的层次结构 lwip协议的软件层次结构

 

2、网络接口驱动层的数据结构

      网络驱动部分的接口由硬件驱动接口层drv_eth.c,drv_eth.h,netif接口层ethernetif.c, ethernetif.h,netfi.c,netif.h,网络设备层netdev.c, netdev.h这些函数组成。每一层的程序都有一个数据结构来表示程序的使用的数据状态。请看下图,先对各个层对应的数据结构有一个初步的印象,混个脸熟先。

2.1 硬件驱动接口层

      硬件驱动接口层drv_eth.c,  drv_eth.h两个文件组成,drv_eth.c是操作系统的网络设备驱动程序,程序内部实现了设备驱动底层的open,close, read,write,ioctl这几个函数的功能。 对于网络设备只实现了ioctl函数的功能,由于读取网络的mac地址,其他几个函数全部为空,不执行具体的操作。以太网底层的数据收发,由驱动程序数据结构上新增加eth_tx, eth_rx两个函数实现mac数据的接收与发送。下图是drv_eth.c硬件驱动接口层的使用的数据结构,以太网底层的驱动函数全部由struct eth_device结构来管理。

struct rt_stm32_eth
{
    /* inherit from ethernet device */
    struct eth_device parent;

    /* interface address info. */
    rt_uint8_t  dev_addr[MAX_ADDR_LEN];       /* hw address   */

    uint32_t    ETH_Speed; /*!< @ref ETH_Speed */
    uint32_t    ETH_Mode;  /*!< @ref ETH_Duplex_Mode */
};

 2.2 网络接口层

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!