本分析主要针对e1000网卡,驱动源码为7.3.20-k2。本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。

Linux-千兆网卡驱动实现机制浅析

作者: Minit, 出处:博客, 责任编辑: 罗丽艳,

2009-03-29 00:00

1.引言

本分析主要针对e1000网卡,驱动源码为7.3.20-k2。本文的目的不是为了讲述如何编写驱动程序,主要是分析网卡驱动内部的实现机制。通过此分析,希望可以理解驱动程序中的各个部分的关系,对网卡发送和接收数据包有直观的了解,同时也希望对设计网卡驱动程序有帮助。由于网卡驱动程序与硬件和操作系统都有很紧密的联系,故要把某些问题完全弄清楚,需要很多的经验与相关知识,介于自身的水平有限,且自身经验较少,故肯定存在很多问题,希望本文的读者发现了问题不吝与作者联系。

2.网卡驱动的体系结构

网卡作为一个PCI设备,其必须遵守相应的PCI规范,即必须为网卡定义相应的标识号,每个PCI外设由一个总线编号、一个设备编号及一个功能编号来标识。网卡驱动程序则需要定义相应的pci_device_id结构来表示其支持的PCI外设的标识,通过在驱动程序的pci_device_id中查找设备标识号,将驱动程序与设备联系起来。网卡作为PCI设备,其包括两类空间,一种是配置空间, CPU不能直接访问,访问这个空间,需要借助BIOS功能;另一种是普通的控制寄存器空间,这部分经过映射后,CPU可以直接访问控制。 在硬件加电初始化时,BIOS统一检查所有的PCI设备,并为每个设备分配一个物理地址,该地址通过BIOS获得并写到设备的配置空间内,驱动程序就可以将网卡的普通控制寄存器映射到一段内存空间内,CPU通过访问映射后的虚拟地址来操控网卡的寄存器。当操作系统初始化时,其为每个PCI设备分配一个pci_dev结构,并将前面分配的物理地址写到pci_dev的resource字段中。在网卡驱动程序中则可以通过读取pci_dev中的resource字段获得网卡的寄存器配置空间地址,其由函数pci_resource_start()和

pci_resource_end()获得该空间的起始位置,通过ioremap()将该段位置映射到主存中,以便CPU访问控制网卡的I/O和内存空间。如重启网卡设备,则是通过向映射后的网卡的相应寄存器写入命令实现,其通过映射后的首地址及相应的寄存器偏移量找到该寄存器的位置,然后通过函数writeb()写该寄存器。有关相关寄存器对应的偏移量,一般是通过网卡的相关的datasheet获得。如果要获取网卡的MAC地址,则一般通过函数readb()读取首地址开始的前六位内容即可得到。

linux网卡e1000下载,Linux E1000网卡驱动分析相关推荐

  1. 深入学习Linux摄像头(三)虚拟摄像头驱动分析

    深入学习Linux摄像头系列 深入学习Linux摄像头(一)v4l2应用编程 深入学习Linux摄像头(二)v4l2驱动框架 深入学习Linux摄像头(三)虚拟摄像头驱动分析 深入学习Linux摄像头 ...

  2. linux 免费教程下载,Linux系统入门教程

    Linux系统入门教程 (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 Linux系统入门教程(文档资料整理) (2011-08-0 ...

  3. Linux keypad 设备树,matrix_keypad 矩阵按键驱动分析

    matrix_keypad 矩阵按键驱动分析 //主要函数调用过程 matrix_keypad_probe matrix_keypad_parse_dt //根据设备树构造 pdata pdata-& ...

  4. linux系统程序下载,Linux平台的下载程序

    Linux平台的下载程序 发布时间:2008-10-28 09:12:43来源:红联作者:jerry520 在Windows平台下,如NetAnts."网际快车".TelePro等 ...

  5. 深度系统linux15.3 32位下载,deepin 15.3|deepin linux 15.3下载|linux deepin 2016下载-游迅网...

    deepin linux 15.3是Linux发行版,是一款功能强大的操作系统~无论是日常办公,还是休闲娱乐,这款软件都可以完美胜任.系统和应用都简洁统一,给你最舒适的体验.感兴趣的朋友赶紧前来下载体 ...

  6. linux软件手机下载,linux软件下载

    手机评站网今天精心准备的是<linux软件下载>,下面是详解! linux怎么安装软件 希望能帮助我操作一下... 希望能帮助我操作一下 1.打开系统,可以看到桌面,找到软件中心,打开软件 ...

  7. linux f中文版下载,Linux上的杀毒软件F-PROT及下载

    世界杀毒软件界的大牛F-PROT (http://www.f-prot.com/)不但发布win下的杀毒软件,同时也提供了几款很有趣的Linux下的杀毒软件可供下载,而且是免费的. 虽然Linux下病 ...

  8. linux网卡e1000下载,linux安装主板自带网卡e1000 步骤

    目标linux机器A(缺少kernel源码的情况下)安装主板自带网卡e1000 步骤 目标linux机器A(缺少kernel源码的情况下)安装主板自带网卡e1000 步骤 e1000 linux下的驱 ...

  9. linux apt qt下载,Linux如何安装 apt-get 软件管理工具

    前言 下面讲解,linux系统下如何进行软件的管理,包括软件的索引安装.更新.卸载删除:本地存储介中软件的安装操作. Linux软件包按封装类型分为3类:Debian : 其文件扩展名为 .deb . ...

最新文章

  1. 唐山一个葬礼上的豪华车队
  2. python格式化字符串_Python笔记7:三种方式构建字符串-格式化
  3. 交换机千兆和百兆对网速影响_电信宽带升级为200M,为什么网速没有提升多少?...
  4. 两种通用型测试用例模板(excel/xmind)
  5. MAC电脑配置环境变量
  6. 微信客户管理SCRM系统SDK
  7. r语言是高级编程语言_什么是R编程?
  8. 《余光中诗歌精读》放下代码,静下心来,细细品读
  9. mini-vue之组件的实现和渲染流程 以及局部和全局组件建立的联系
  10. Servlet实例化异常以及tomcat子级启动失败的可能原因
  11. 基于关系型代数的 SQL 等价改写
  12. args = parser.parse_args()报错
  13. uni-app(Vue.js)创建运行微信小程序
  14. android sqlite delete 返回值,SQLite 使用详解
  15. 机器指令和微指令的关系
  16. EasyExcel与EasyPoi性能对比
  17. java最基本的基础知识
  18. Unity实现的汽车方向盘转动效果[完整案例]
  19. rec更新系统保留root,刷了第三方rec后怎么更新系统
  20. 强调实用主义——采访Python专家HyryStudio

热门文章

  1. 程序员转战在线教育,听听华安怎么说。
  2. 图像处理(九)高斯金字塔及拉普拉斯金字塔
  3. 杀戮尖塔java启动消失,关于杀戮尖塔闪退和BUG的可能性及官方解决办法
  4. ARCGIS Engine空间参照系处理
  5. Unity3D学习笔记1——绘制一个三角形
  6. 2020大数据十大趋势发布!华为、阿里、滴滴、百度、京东、讯飞等顶尖专家齐聚BDTC...
  7. iOS入门-42AVPlayerViewController视频播放
  8. ssoj2433: Shine
  9. Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除)
  10. String 截取方法substring