网络驱动程序概述

一、网路驱动程序:

使用net_device描述设备,使用套接字描述符sk_buff封装数据。


二、设备的注册:

alloc_ethdev分配net_device结构和私有的数据区、并初始化以太网设备结构、标志、硬件地址、初始化缓冲区描述符、申请中断号并注册中断处理函数,最后向全局网络设备链表添加初始化后的网络设备。


三、数据的发送:

1.内核发送数据包的时候,使用套接字sk_buff作为参数,调用驱动的ndo_start_xmit发送函数,套接字包含有要传输数据的指针和数据的长度、以及网络子系统已经添加的软件和硬件协议头(tcp、ip、以太网头),IP协议头是14个字节,为了对齐,一般分配16个字节。

2.然后通过DMA映射,将数据传到网络设备的设备内存。

3.最后硬件逻辑通过RJ45接口将数据发送出去。

4.网卡在成功发送数据时候引发中断,在中断处理函数中,释放网络子系统传递给驱动程序的套接字缓冲区sk_buff,并更新接口数据统计结构。


四、数据的接收:

1.数据到达时,网卡通过更新放在特定位置的缓冲区描述符,从而告知所接收到数据的长度和地址,并引发中断。

2.中断处理函数,会禁止中断,并进入轮询模式。

3.轮询函数会在原子上下文,分配套接字sk_buff来容纳接收到的数据,并删除硬件头,添加校验和,数据类型,协议号等信息。

4.然后调用网络子系统的接收函数,将套接字sk_buff传给网络子系统,网络子系统的接收函数运行在软件中断上下文,使用了顶半部和底半部机制,并负责释放驱动分配的套接字结构。


五、中断函数:

1.读设备状态的寄存器,区分中断的类型是发送成功、接收到数据包、还是发生错误。

2.发送,释放sk_buff,更新接口数据统计统计结构。

3.接收,禁止中断,进入轮询模式。


六、性能优化:

DMA直接内存访问和轮询模式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值