struct net_device_ops 详解

【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,表示硬件正在处理上层的时间戳提取要求;

<
  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值