Linux网卡驱动程序对ethtool的支持和实现

比如最常用的 ifconfig,route,ip,ethtool 等,其中 ethtool 提供了强大的网卡及网卡驱动">管理能力,其具体的实现框架和网络驱动程序及网络硬件关系紧密,容易修改和扩展,能够为 Linux 网络开发人员和管理人员提供对网卡硬件,驱动程序和网络协议栈的设置,查看以及及调试等功能。

网卡工作在 OSI 网络体系的最后两层,物理层和数据链路层,物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。物理层的芯片称之为 PHY。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。以太网卡中数据链路层的芯片称之为 MAC 控制器。很多网卡的这两个部分是做到一起的。他们之间的关系是 PCI 总线接 MAC 总线,MAC 接 PHY,PHY 接网线(当然也不是直接接上的,还有一个变压装置)。

一般地,一个典型的以太网控制器的基本结构如图 1 所示:

图 1. 一个典型的符合 IEEE802.3 标准的的以太网控制器结构图

数据链路层 MAC 是 Media Access Control 的缩写,即媒体访问控制子层协议。该协议位于 OSI 七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。在发送数据的时候,MAC 协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC 协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至 LLC 层。以太网 MAC 由 IEEE-802.3 以太网标准定义。

物理层 PHY 是物理接口收发器,它实现物理层。包括 MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、 PMD(物理介质相关)子层、MDI 子层。

MII 即媒体独立接口 , “媒体独立”表明在不对 MAC 硬件重新设计或替换的情况下,任何类型的 PHY 设备都可以正常工作。包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII 数据接口总共需要 16 个信号,包括 TX_ER,TXD<3:0>,TX_EN,TX_CLK,COL,RXD<3:0>,RX_EX,RX_CLK,CRS,RX_DV 等。

RMII (Reduced Media Independant Interface ) 是简化的 MII 接口 ,在数据的收发上它比 MII 接口少了一倍的信号线,所以它一般要求是 50 兆的总线时钟 。RMII 一般用在多端口的交换机,它不是每个端口安排收、发两个时钟,而是所有的数据端口公用一个时钟用于所有端口的收发 ,这里就节省了不少的端口数目。RMII 的一个端口要求 7 个数据线 ,比 MII 少了一倍,所以交换机能够接入多一倍数据的端口。和 MII 一样,RMII 支持 10 兆和 100 兆的总线接口速度 。

GMII(Gigabit MII) 是千兆网的 MII 接口,这个也有相应的 RGMII 接口,表示简化了的 GMII 接口。GMII 采用 8 位接口数据,工作时钟 125MHz,因此传输速率可达 1000Mbps 。同时兼容 MII 所规定的 10/100 Mbps 工作方式。

MII 管理接口是个双信号接口,一个是时钟信号 MDC,另一个是数据信号 MDIO。通过管理接口,上层能监视和控制 PHY 的寄存器。PHY 里面的部分寄存器是 IEEE 定义的,这样 PHY 把自己的目前的状态反映到寄存器里面,MAC 通过管理接口不断的读取 PHY 的状态寄存器以得知目前 PHY 的状态,例如连接速度,双工的能力等。当然也可以通过管理接口设置 PHY 的寄存器达到控制的目的,例如流控的打开关闭,自协商模式还是强制模式等,这也是 ethtool 的工作原理。

MDIO/MDC,即 PHY 管理接口串行通信总线,该总线由 IEEE 通过以太网标准 IEEE 802.3 的若干条款加以定义。MDIO 是一种简单的双线串行接口,将管理器件 ( 如 MAC 控制器、微处理器 ) 与具备管理功能的收发器 ( 如多端口吉比特以太网收发器或 10GbE XAUI 收发器 ) 相连接,从而控制收发器并从收发器收集状态信息。可收集的信息包括链接状态、传输速度与选择、断电、低功率休眠状态、TX/RX 模式选择、自动协商控制、环回模式控制等。除了拥有 IEEE 要求的功能之外,收发器厂商还可添加更多的信息收集功能。

MDC 则是管理数据的时钟输入,最高速率可达 8.3MHz。MDIO 是管理数据的输入输出双向接口,数据是与 MDC 时钟同步的。MDIO 的工作流程为:

MDIO 接口在没有传输数据的空闲状态(IDLE)数据线 MDIO 处于高阻态。 MDIO 出现一个 2bit 的开始标识码 (01) 一个读 / 写操作开始。 MDIO 出现一个 2bit 数据来标识是读操作 (10) 还是写操作 (01)。 MDIO 出现一个 5bit 数据标识 PHY 的地址。 MDIO 出现一个 5bitPHY 寄存器地址。 MDIO 需要 2 个时钟的访问时间。 MDIO 串行读出 / 写入 16bit 的寄存器数据。 MDIO 恢复成 IDLE 状态,同时 MDIO 进入高阻状态。

注:以上内容部分摘选自互联网。

时间: 2024-12-07 21:50:16

Linux网卡驱动程序对ethtool的支持和实现的相关文章

系统-LINUX网卡驱动修改(ath9k驱动),求救!!

问题描述 LINUX网卡驱动修改(ath9k驱动),求救!! 小弟现在做一个任务,需要跳过网卡驱动的协议栈,直接通过射频发送数据,不知如何修改? 网卡是AR9285,系统是LINUX,驱动为ATH9K. 不知各位高人有何指教? 解决方案 我最近也在做这块,请问解决了吗

linux网卡驱动源码分析

转自http://blog.csdn.net/ustc_dylan/article/details/6329375 网络驱动是一种典型的PCI设备驱动,无论在嵌入式平台还是在PC领域,网络相关的项目开发有着比较广阔的前景,因此,分析当前Linux内核中网络设备的驱动,不但能了解网络相关的基本原理,而且可以借鉴Linux内核的先进的技术,将其应用到嵌入式或其他领域.本文以Linux内核中的rtl8139网络驱动为例,对网络驱动的源码进行了简单分析,并对其中涉及的相关概念和技术进行了简单的介绍. 一

linux网卡驱动移植

内核版本:Linux2.6.28.7   中断引脚是IRQ_EINT7 具体的  自己看原理图 /*******************************/ #include <mach/regs-gpio.h>   //by bai #include <mach/irqs.h>       //用到writel和ioremap类的头文件 #include <mach/hardware.h> /*******************************/ un

linux下安装编译网卡驱动的方法

  安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空. 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网上找的资料进行整理,并实际操作的过程,仅供借鉴. 一.检测linux系统内核版本和网卡类型,相关命令如下: uname -r 查看linux内核版本 (uname -a 可显示所有信息) lsmod 设备加载情况 ls /usr/share/hwdata 查看硬件设备 lspci 查看pci网卡

Linux下DM9000网卡驱动实验

Linux下DM9000网卡驱动实验 1.1        硬件系统介绍 1.1.1          网络驱动程序的特点     网络驱动程序是介于硬件和内核之间传送数据包,不是面向流的设备,不能象/dev/tty1那样简单的映射到文件系统的节点上.Linux调用这些接口的方式是给他们分配一个独立的名字(如eth0).这样的名字在文件系统中并没有对应项.内核和网络设备驱动程序之间的通信与字符设备驱动程序和快设备驱动程序与内核间的通信是完全不同的.内核不再调用read/write,它调用与数据包

解决linux 编译内核网卡驱动问题

由于项目原因,需要从新编译内核,修改 TUN 源码支持共享模式,编译内核期间遇到了网卡驱动丢失问题,废话不多说,直接说解决问题的方式,本人对底层的东西了解很浅,所以解决问题的方式也很笨拙. OS version : Centos 5.9 kernel : 2.6.18-402 更新内核版本: 2.6.20 由于 yum 里面的内核头文件和卡发包并没有过多的源码 .c 文件.所以只能从 www.kernel.org 下载 相近的版本,有人肯定说了下你还不下个最新的 内核版本,答: 如内核版本跨度比

linux 编译内核时网卡驱动丢失如何解决

我的系统 OS version : Centos 5.9 kernel : 2.6.18-402 更新内核版本: 2.6.20 由于 yum 里面的内核头文件和卡发包并没有过多的源码 .c 文件.所以只能从 www.kernel.org 下载 相近的版本,有人肯定说了下你还不下个最新的 内核版本,答: 如内核版本跨度比较大,本人担心会出现各种问题,很多老的编译选项新版内核不支持. 首先先下载 原系统的 开发包和头文件:shell $> yum install kernel-devel kerne

英特尔主板挂载LINUX的网卡驱动

一.首先要挂载光驱 #  mount    /media/cdrom   (或mount   /dev/cdrom  /mnt/cdrom) 二.查看(进入)光驱目录 #  cd  /media/cdrom  (或cd   /mnt/cdrom) #   ls -L 三.复制网卡驱动软件包(如果是100M网卡则复制e100.3.1.14.tar.gz) #   cp   /mnt/cdrom/Drivers/LAN/Linux/drivers/e1000-6.1.16.tar.gz /tmp 或

技嘉GA945主板+linux as4.0挂载64位的网卡驱动

下面就技嘉GA945主板---linux as4.0--64位及32位的网卡驱动挂载作个笔记,如有不对之处还望大家指正.本文最底下提供了本驱动的压缩包下载. 注:命令另起一行的表示按Enter键. 1.先插上U盘(必须先把网卡驱动拷贝到U盘),然后查看是否有U盘 fdisk -l 2.挂载U盘 mkdir /media/usb mount /dev/sdb1 /media/usb 3.进入目录 cd /media/usb cd r8111 4.开始加载 make clean modules ma