Linux 网卡驱动程序

【推荐阅读】

浅谈linux 内核网络 sk_buff 之克隆与复制

深入linux内核架构--进程&线程

了解Docker 依赖的linux内核技术

熟悉Linux网卡驱动基本框架以及驱动程序编写步骤

实现一个虚拟网卡驱动程序

1、概述

网卡工作在OSI的最后两层,物理层和数据链路层,主要是负责收发网络的数据包,它将网络通信上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议。在知道了网卡的工作内容后,我们也就清楚了网卡驱动程序要实现的功能,即通过控制硬件实现数据的传输,一方面让硬件将上层传递的数据包发送出去,另一方面接收外部数据并传递给上层。

为了能更加清楚理解内核中网卡驱动的程序,我们按照功能对它进行层次划分,划分后的Linux内核的网卡驱动程序的框架如下图所示:

从上图可以看出内核中的网卡驱动程序被划分为4层:

网络协议接口层:实现统一的数据包收发协议,该层主要负责调用dev_queue_xmit() 函数发送数据包到下层或者调用** netif_rx()** 函数接收数据包,都使用sk_buff作为数据的载体;

网络设备接口层:通过net_device 结构体来描述网络设备信息,是设备驱动功能层各个函数的容器,向上实现不同硬件类型接口的统一;

设备驱动功能层:用来负责驱动网络设备硬件来完成各个功能,各个函数是网络设备接口层net_device数据结构的具体成员,比如最核心的功能实现数据包的发送和数据包的接收;

网络设备和媒介层:物理介质,驱动程序作用的对象。对于Linux系统而言,网络设备和媒介也可以是虚拟的,如后面编写的虚拟网卡驱动程序它就没有网络物理设备媒介;

其中net_device 结构体是协议层和硬件交互的桥梁,它屏蔽了硬件之间的差异,使得协议层不需要关心硬件的操作,在发送数据时只需要调用net_device 结构体中操作函数完成数据的收发。net_device 结构体中的操作函数是由设备驱动功能层实现的函数注册的,对应不同的硬件设备,驱

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值