【ndo_init】
注册网络设备时调用,驱动程序一般不使用,虚拟网络设备可能使用
【ndo_uninit】
网络设备卸载时调用,驱动程序一般使用
【ndo_open】
1、禁止所有中断、关闭载波(netif_carrier_off);
2、分配并初始化传输和接收描述符环内存(使用dma_alloc_coherent分配确保EMAC和CPU都可以访问);
3、分配发送skb处理状态的链表或者数组空间(使用kzalloc),其实也可以用sk_buff_head相关的数据结构和函数;
4、初始化接收描述符环,包括分配struct sk_buff以及数据缓存区(netdev_alloc_skb),并且进行DMA映射(dma_map_single);
5、注册中断相关函数(request_irq);
6、初始化MAC硬件模块(设置MAC相关过滤参数、填写传输和接收描述符初始化地址dma_addr_t、中断设置、聚合功能配置);
7、PHY芯片初始化并启动;
8、使能NAPI模块(napi_enable);
9、调用netif_start_queue或者netif_tx_start_all_queues使能传输队列调度;
10、调用netif_wake_queue或者netif_tx_wake_all_queues开启传输队列的调度(因为此时所有的传输环为空,可以立刻开始传输);
11、使能传输/接收通道,打开中断,开启定时器功能;
【ndo_stop】
1、停止上层传输调度;
2、停止NAPI功能;
3、停止MAC接收功能;
4、等待既有的skb数据发出去,释放skb跟踪链表;
5、停止发送功能;
6、禁止中断功能;
7、手动处理已接收到的数据包传递给上层协议;
8、释放接受和发送描述符环内存空间;
9、释放接收缓存数据空间;
10、反注册中断函数;
11、删除NAPI功能(netif_napi_del);
12、停止并删除timer功能、取消并删除delaywork;
13、关闭载波netif_carrier_off;
14、关闭MAC和PHY电源;
【ndo_start_xmit】
1、检查skb_shinfo(skb)->tx_flags标志位,SKBTX_HW_TSTAMP指示硬件向上层软件提供硬件时间戳(调用skb_tstamp_tx 、skb_tx_timestamp),设置过程中置位SKBTX_IN_PROGRESS,表示硬件正在处理上层的时间戳提取要求;
<