RT-Thread 网卡驱动学习

一 入口 (drv_eth.c)

      drv_eth.c是对下挂接具体的硬件操作,对上挂接了网络协议层,承上启下。

    INIT_DEVICE_EXPORT(rt_hw_stm32_eth_init);

RT-Thread 网卡驱动学习_第1张图片

从代码可以看出,这里的重要数据结构就是stm32_eth_device,其抽象出来的初始化、open等接口会具体挂接到某一个stm32的板子。以初始化为例:

RT-Thread 网卡驱动学习_第2张图片 

 在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

RT-Thread 网卡驱动学习_第3张图片

 struct netif* netif;这个是以太网的协议的重要数据结构。这就挂接到协议去了,从协议到操作硬件的道路就打通了

你可能感兴趣的:(stm32,arm,嵌入式硬件,单片机,物联网)