一 入口 (drv_eth.c)
drv_eth.c是对下挂接具体的硬件操作,对上挂接了网络协议层,承上启下。
INIT_DEVICE_EXPORT(rt_hw_stm32_eth_init);
从代码可以看出,这里的重要数据结构就是stm32_eth_device,其抽象出来的初始化、open等接口会具体挂接到某一个stm32的板子。以初始化为例:
在rt_stm32_eth_init接口里面会完成指定CPU的以太网控制器的初始化(时钟、复位等)
接下来还会 通过 eth_device_init(&(stm32_eth_device.parent), "e0");
rt_err_t eth_device_init(struct eth_device * dev, const char *name)
{
rt_uint16_t flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
#if LWIP_IGMP
/* IGMP support */
flags |= NETIF_FLAG_IGMP;
#endif
return eth_device_init_with_flag(dev, name, flags);
}
二、挂接以太网对下的接口层。etherretif.c
struct netif* netif;这个是以太网的协议的重要数据结构。这就挂接到协议去了,从协议到操作硬件的道路就打通了