1、概述
本文详细介绍了LWIP协议在rt-thread操作系统上的驱动层结构,rt thread操作系统的硬件驱动层采用标准的设备驱动结构,网络接口对应的网络设备netdev。网络设备下面对应的是以太网驱动程序,同时网络设备向应用层提供网络的各种功能接口,实现了如linux操作系统的ifconfig, ping命令等功能。整个lwip协议到底层硬件的结构如下,具体的参考代码可以查看rt-thread 3.1.3的正点原子阿波罗bsp工程。
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 网络接口层
来源:oschina
链接:https://my.oschina.net/u/4349634/blog/4298107