Linux网卡驱动分析
以太网(Ethernet)是一种计算机局域网组网技术,基于IEEE 802.3标准,它规定了包括物理层的连线、电信号和介质访问层协议。
Ethernet接口的实质是MAC通过MII总线控制PHY的过程。
硬件原理分析
Ethernet网口通常由CPU、MAC和PHY三部分组成,通常用DMA控制器参与网口数据传输,以减轻CPU的负担。有的CPU内部集成MAC控制器,有的则采用外置的MAC芯片。
MII(Media Independent Interface 媒体独立接口)是IEEE 802.3标准定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口。MII数据接口包括分别用于发送器和接收器的两条独立信道,每条信道拥有数据、时钟和控制信号,共16条信号线。MII管理接口即MDIO接口包含一个时钟信号(MDC)和一个数据信号(MDIO),通过管理接口,上层能监视和控制PHY。根据IEEE802.3标准定义,MII管理接口最多支持同时管理32个PHY。
CPU/MAC通过MDIO接口(类似于I2C接口,因此PHY拥有PHY ADDR)管理PHY芯片。
MAC和PHY之间的数据传输接口类型有MII/RMII(Reduced MII)/SMII(Stream MII)/GMII几种,根据传输速率(10M/100M/1000M)又有不同细分,比如千兆GMII/RGMII/SGMII。
MDIO接口类似于I2C,但是时序上有些区别,它的数据帧格式如下:
每个数据帧64位,LSB先发。
PRE_32: 帧前缀(连续的32个bit,均为1)
ST: 起始信号(2个bit,'01')
OP: 操作码(2个bit,'10' - read,'01'-write)
PA5: PHY Addr(5个bit的PHY地址域,因此MDIO最多可以管理32个PHY)
RA5: Reg Addr(5个bit的PHY内部寄存器地址,同理,PHY寄存器最多包含32个寄存器)
TA: Turn-around(状态转换域,2个bit,写操作时,输出'10';读操作时,释放MDIO数据线)
D16: 数据域(16个bit数据域)
MII数据接口
以太网媒体接口类型有MII/RMII/SMII/GMII几种,所有的这些接口都从MII而来,MII(Medium Independent Interface)指不用考虑传输介质类型(铜轴、光纤、电缆等),因为这些传输介质处理的相关工作都由PHY或者MAC芯片实现。MII接口可分为MAC模式和PHY模式,一般说来MAC和PHY对接,但是MAC和MAC也是可以对接的。
MII接口MAC模式
MII接口PHY模式
MII支持10兆和100兆的操作,一个接口由14根线组成(?),它的支持还是比较灵活的,但是有一个缺点是因为它一个端口用的信号线太多,如果一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线,一般按照这个接口做交换机,是不太现实的,所以现代的交换机的制作都会用到其它的一些从MII简化出来的标准,比如RMII、SMII、GMII等。
RMII是简化的MII接口,在数据的收发上它比MII接口少了一倍的信号线,所以它一般要求是50兆的总线时钟。RMII一般用在多端口的交换机,它不是每个端口安排收、发两个时钟,而是所有的数据端口公用一个时钟用于所有端口的收发,这里就节省了不少的端口数目。RMII的一个端口要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍数据的端口。和MII一样,RMII支持10兆和100兆的总线接口速度。
SMII是由思科提出的一种媒体接口,它有比RMII更少的信号线数目,S表示串行的意思。因为它只用一根信号线传送发送数据,一根信号线传输接受数据,所以在时钟上为了满足100的需求,它的时钟频率很高,达到了125兆,为什么用125兆,是因为数据线里面会传送一些控制信息。SMII一个端口仅用4根信号线完成100信号的传输,比起RMII差不多又少了一倍的信号线。SMII在工业界的支持力度是很高的。同理,所有端口的数据收发都公用同一个外部的125M时钟。
GMII是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口。
SMII用1根线来传输数据,RMII用2根线来传输数据,MII用4根线来传输数据,GMII用8根线来传输数据,GMII和RMII都是并行传输且需要随路时钟。
特别介绍一下SGMII(Serial Gigabit Media Independent Interface),它通常用于GEMAC(Gigabit Ethernet Media Access Controller)即千兆以太网MAC控制器,它是基于GMII实现的,原理是GMII+Serdes,即引入Serdes技术实现串并转换,从而减少数据线的个数。
软件架构和驱动代码分析
按照OSI七层协议,MAC工作在数据链路层,PHY工作在物理层。在Linux网络子系统中,IP层、TCP/UDP层及其上的应用层均为软件实现,由内核协议栈和用户态socket代码实现。
网卡驱动的初始化流程可以归纳为:
1)为网络数据收发分配内存(或者更进一步配置DMA直接内存存取)
2)初始化MDIO控制器和MAC控制器
3)通过MDIO接口初始化PHY控制器
4)注册内核网络协议栈接口
5)启动收发
Linux网卡驱动分析的更多相关文章
- Linux网卡驱动移植--Dm9000网卡驱动分析
1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...
- linux串口驱动分析
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...
- Xilinx Uboot网卡驱动分析
1.MAC控制器.网卡.PHY.MDIO.mii.gmii.rgmii概念扫盲 网卡在功能上包含OSI模型的两个层,数据链路层和物理层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准 ...
- Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)
一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处 ...
- Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 【转】
本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_ ...
- 基于335X的Linux网口驱动分析
基于335X的linux网口驱动分析 一. 系统构成 1. 硬件平台 AM335X 2. LINUX内核版本 4.4.12 二. 网口驱动构架(mdio部分) mdio网口驱动部分 使用 总线.设 ...
- Linux网卡驱动架构分析
一.网卡驱动架构 由上到下层次依次为:应用程序→系统调用接口→协议无关接口→网络协议栈→设备无关接口→设备驱动. 二.重要数据结构 1.Linux内核中每一个网卡由一个net_device结构来描述. ...
- Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动样例)
在Linux,网络分为两个层,各自是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层. 网络堆栈是硬件中独立出来的部分.主要用来支持TCP/IP等多种协议,网络设备驱动层是连接网络堆栈协议层 ...
- linux网卡驱动移植
这里重要的是物理层PHY receiver,MAC(media access control)层,这里与软件中的协议栈不同,在硬件上MAC是PHY的下一层.DM9000A将MAC和PHY做到一起,也可 ...
随机推荐
- 为什么 Java 线程没有 Running 状态?
Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么 ...
- HNUSTOJ-1437 无题
1437: 无题 时间限制: 1 Sec 内存限制: 128 MB提交: 268 解决: 45[提交][状态][讨论版] 题目描述 tc在玩一个很无聊的游戏:每一次电脑都会给一个长度不超过10^5 ...
- GROUP BY关键字优化
1.group by实质是先排序后进行分组,遵照索引建的最佳左前缀 2.当无法使用索引列,增大max_length_for_sort_data参数的设置+增大sort_buffer_size参数的设置 ...
- thinkphp5 select对象怎么转数组?
DB操作返回是数组.模型直接操作返回是对象 对象类型转换数组打开 database.php 增加或修改参数'resultset_type' => '\think\Collection',即可连贯 ...
- PAT Advanced 1006 Sign In and Sign Out (25 分)
At the beginning of every day, the first person who signs in the computer room will unlock the door, ...
- PAT Basic 1046 划拳 (15 分)
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
- Html5+ 开发APP 后台运行代码
function backRunning(){ if(plus.os.name == 'Android'){ var main = plus.android.runtimeMainActivity() ...
- bzoj5020 & loj2289 [THUWC 2017]在美妙的数学王国中畅游 LCT + 泰勒展开
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5020 https://loj.ac/problem/2289 题解 这个 appear 和 d ...
- Django【第13篇】:Django之Form组件
django 之知识点总结以及Form组件 一.model常用操作 1.13个API查询:all,filter,get ,values,values_list,distinct,order_by ,r ...
- Spring Boot 之Profile
Profile Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活.指定参数等方式快速切换环境. 1)多Profile文件 我们在主配置文件编写的时候,文件名可以是:appli ...