Linux下网卡驱动程序
Linux系统下无线网卡驱动的安装

作业是一系列由 SQL Server 代理按顺序执行的指定操作。作业 可以执行一系列活动,包括运行 Transact-SQL 脚本、命令行应用程 序 、 Microsoft ActiveX 脚 本 、 Integration Services 包 、 Analysis Services命令和查询或复制任务。作业可以运行重复任务或那些可计 划的任务,它们可以通过生成警报来自动通知用户作业状态,从而极 大地简化了 SQL Server管理。
143
2010年第10期
信息纵横
浅谈Linux系统下无线网卡驱动的安装
许康
(西南科技大学计算机学院)
摘 要 Linux操作系统以其高效、稳定、免费、开源等一系列特点,吸引着越来越多的计算机用户安装并使用。然而,Linux系 统下各类硬件设备的驱动安装却一直比较繁琐,这是影响计算机用户使用Linux系统的一大原因。随着Linux系统的日渐发展,在 Linux上安装各类硬件驱动已经变得越来越简易化、智能化。但即使是最新版本的Linux系统,其对各类无线网卡的驱动级支持仍不够 完善。本文以Ubuntu Linux10.04系统为例,归纳总结了各类常见的无线网卡在Linux系统上的安装过程。
Linux系统与Windows系统在使用上最显著的区别就是程序的安 装上,Linux系统里有一个安装源的概念,系统装好后第一件要做的 事就应该是配置系统的安装源。以Ubuntu Linux为例,需要在终端里 使用以下命令sudo gedit /etc/apt/sources.list打开并编辑安装源列表文件 sources.list,依据机器当前的网络接入情况选择速度较快的安装源域 名地址。配置好安装源文件以后,无论是Linux系统的升级还是各类 应用软件的安装都只需打开终端,输入相应的安装命令即可实现。
linux安装网卡驱动教程

linux安装网卡驱动教程在Linux系统中,网卡驱动是一个必需的组件,它允许计算机与网络相连,进行数据的传输和通信。
虽然大多数Linux发行版会自动安装一些常用的网卡驱动,但某些特殊型号的网卡可能需要手动安装对应的驱动程序。
下面是一个详细的Linux安装网卡驱动的教程,帮助你完成这个过程。
1. 首先,你需要确定你的网卡型号和型号。
可以通过以下命令获取:```lspci | grep Ethernet```这将列出系统中所有的以太网适配器,包括网卡的型号和型号。
2. 一旦你确定了网卡的型号和型号,你可以在厂商的官方网站或者第三方驱动程序网站上查找和下载对应的驱动程序。
确保选择与你的Linux发行版和内核版本兼容的驱动程序。
3. 下载驱动程序后,将其保存在你的计算机上的一个可访问的位置,比如家目录。
4. 打开终端,在命令行中输入以下命令以进入驱动程序所在目录:```cd ~/下载```这里假设你将驱动程序保存在`~/下载`目录下。
如果你将其保存在其他目录,请将命令中的路径替换为实际位置。
5. 解压驱动程序文件。
这可以通过以下命令完成:```tar zxvf 驱动程序文件名.tar.gz```这里的`驱动程序文件名`应该是你下载的驱动程序文件的实际名称。
6. 进入驱动程序文件夹。
这可以通过以下命令完成:```cd 驱动程序文件夹名```这里的`驱动程序文件夹名`是解压后的驱动程序文件夹的实际名称。
7. 阅读驱动程序的安装说明文档。
通常情况下,驱动程序的文件夹中都会包含一个README文件或者INSTALL文件,其中提供了安装驱动程序所需的具体步骤和说明。
8. 一般来说,安装驱动程序的第一步是编译驱动程序的源代码。
在终端中输入以下命令以编译驱动程序:```make```这将根据驱动程序的源代码编译出可执行的二进制文件。
9. 安装编译好的驱动程序。
在终端中输入以下命令以安装驱动程序:```sudo make install```这需要管理员权限,所以你可能需要输入管理员密码。
linux下安装无线网卡驱动

换了linux系统后发现无线不能使用,很是苦恼,于是在网上找到各位大神的做法,终于成功安装。
下面给大家介绍一下。
本例以安装Fedora 14无线网卡驱动为例。
参考文章/Linux/2011-05/35366.htm。
首先在/support/802.11/linux_sta.php 上下载32位的驱动,下载完成之后进入到下载的文件夹下#cd ~/Downloads按照readme的做法,新建一个文件夹,并且将该压缩文件移动到新建的文件夹当中#mkdri hybrid_wl#mv hybrid-portsrc-x86_32-v5.60.48.36.tar.gz hybrid_wl/进入文件夹,进行解压,#cd hybrid_wl/#tar -zxvf hybrid-portsrc-x86_32-v5.60.48.36.tar.gz由于自述文件当中的做法是指定解压目录,因此为了保险,再把这个压缩文件移动到上一级目录#mv hybrid-portsrc-x86_32-v5.60.48.36.tar.gz ../根据自述文件的说法(The cards with the following PCI Device IDs are supported with this driver.),查看支持的版本# lspci -n | grep 14e40c:00.0 0280: 14e4:4315 (rev 01)BRCM PCI PCI DellProduct Name Vendor ID Device ID Product ID------------- ---------- --------- -----------4311 2.4 Ghz 0x14e4 0x4311 Dell 13904311 Dualband 0x14e4 0x4312 Dell 14904311 5 Ghz 0x14e4 0x43134312 2.4 Ghz 0x14e4 0x4315 Dell 13954313 2.4 Ghz 0x14e4 0x4727 Dell 15014321 Dualband 0x14e4 0x4328 Dell 15054321 Dualband 0x14e4 0x4328 Dell 15004321 2.4 Ghz 0x14e4 0x43294321 5 Ghz 0x14e4 0x432a4322 Dualband 0x14e4 0x432b Dell 15104322 2.4 Ghz 0x14e4 0x432c4322 5 Ghz 0x14e4 0x432d43224 Dualband 0x14e4 0x4353 Dell 152043225 2.4 Ghz 0x14e4 0x4357发现确实是支持Dell这款无线网卡的4312 2.4 Ghz 0x14e4 0x4315 Dell 1395接下来就是对驱动进行编译了,在hybrid_wl目录下执行以下命令#make clean#make**注意,如果出现以下这样的error,则是因为内核源码的问题,1:查看自己是否安装了kernel-devel-2.6……包,如果没有装包先把包装上试试2:装完这个包还不行的话就需要你自己更新一下内核源码,编译更新的内核[root@ChinaUnix hybrid-wl]# make cleanKBUILD_NOPEDANTIC=1 make -C/lib/modules/`uname -r`/build M=`pwd` cleanmake: *** /lib/modules/2.6.35.6-45.fc14.i686/build: No such file or driectory. Stop.make: *** [clean] Error2[root@ChinaUnix hybrid-wl]# makeKBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`make: *** /lib/modules/2.6.35.6-45.fc14.i686/build: No suchfile or driectory. Stop.make: *** [all] Error 2完成之后,可以在目录下看到wl.ko 文件,如果以前安装过驱动的话,那么还需要对安装过的驱动进行清理。
LINUX下安装无线网卡驱动程序

1.1下载驱动程序一、首先弄清楚当前使用的是什么版本的Linux,如:Redhat9.0、Freda core5等。
Linux用的是什么版本的内核,可以用uname –a得知内核版本号。
二、使用的是什么接口类型的无线网卡,常见的接口类型有PCI (台式机)、Cardbus/PCMCIA(笔记本)、USB(台式机、笔记本)等。
三、无线网卡使用的是哪一种类型的芯片,判断方法如下,到相关网站下载与其相对应的驱动程序。
常用的无线网卡驱动及其支持的芯片类型和接口类型如下表1所示。
PCMCIA卡:将无线网卡插入笔记本电脑中,用命令lspci可以看到芯片类型,如:Realtek Semiconductor Co.. Ltd, RTL8180L802.11b MAC (rev 20)其中RTL8180L即为网卡芯片类型,用参数v可以看到更详细的信息。
USB卡:用命令lsusb可以看到芯片类型(fc5没有此命令)。
通过其它方法查找。
驱动程序芯片类型接口类型官方网站下载页Linux-wlan-ng Prism2/2.5/3 Cardbus/PCI/USB /download.shtml Madwifi Atheros系列Cardbus/PCI /islsm ISL38XX USB/PCI http://jbnote.free.fr/prism54usb/index.html表1:网卡驱动程序有关信息1.2驱动程序的安装每款驱动的安装方法各不相同,阅读INSTALL文档,获得驱动程序的具体安装方法及系统内核要求。
阅读驱动程序附带的README文档,获得有关此驱动的详细信息,如驱动所支持的网络模式、接口类型、所包含的模块的功能及无线网卡的配置等。
下面是安装网卡驱动程序的一般步骤:编译网卡驱动程序#make安装驱动程序模块#make install加载模块#modprobe 主模块名安装好驱动后插入无线网卡,命令iwconfig可以查看驱动是否加载成功,如果出现新的设备名,则说明驱动已经装上并且能够识别出无线网卡。
linux下安装编译网卡驱动的方法

linux下安装编译网卡驱动的方法你还在为不知道linux下安装编译网卡驱动的方法而不知所措么?下面来是小编为大家收集的linux下安装编译网卡驱动的方法,欢迎大家阅读:linux下安装编译网卡驱动的方法安装linux操作系统后发现没有网卡驱动,表现为system → Administration → Network下Hardware列表为空。
以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网上找的资料进行整理,并实际操作的过程,仅供借鉴。
一.检测linux系统内核版本和网卡类型,相关命令如下:uname -r 查看linux内核版本(uname -a 可显示所有信息)lsmod 设备加载情况ls /usr/share/hwdata 查看硬件设备lspci 查看pci网卡设备ethernet controller 厂商和型号,modprobe **** ****为网卡型号,例如modprobe RTL8101E ,如果出错,说明模块不存在,该型号不识别我在这一步时查找不到网卡型号,无奈只能由同时采购的其他相同型号预装win7的电脑下查看网卡型号,是个笨办法,嘿嘿……找到网卡型号后就到驱动之家下载了相应网卡的linux驱动,这些需要根据自己的实际情况下载,不多说了,重点是后面。
二.下载网卡驱动Intel_e1000e-1.9.5.zip 为我下载的所需的网卡驱动,这个在linux下需自己编译.三.安装网卡驱动1.检测编译需要用到内核的源代码包和编译程序gcc。
所以如果没有的话,要先装。
[root@localhost ~]# rpm -qa|grep kernelkernel-xen-2.6.18-8.el5kernel-xen-devel-2.6.18-8.el5kernel-headers-2.6.18-8.el5[root@localhost ~]# rpm -qa|grep gccgcc-c++-4.1.1-52.el5libgcc-4.1.1-52.el5gcc-4.1.1-52.el5gcc-gfortran-4.1.1-52.el5如果缺少kernel-xen-devel-2.6.18-8.el5,可以去安装光盘的/Server/目录下,找到kernel-xen-devel-2.6.18-8.el5.i686.rpm 文件安装。
Linux网卡驱动程序编写

Linux网卡驱动程序编写©OldLinux论坛-- 有关早期Linux内核代码发展的论坛。
uz4$])Linux操作系统网络驱动程序编写%A一.Linux系统设备驱动程序概述u51.1 Linux设备驱动程序分类%Vp}1.2 编写驱动程序的一些基本概念*I二.Linux系统网络设备驱动程序"[`]K2.1 网络驱动程序的结构H2.2 网络驱动程序的基本方法U?+2.3 网络驱动程序中用到的数据结构IKo2.4 常用的系统支持v[ZEeu三.编写Linux网络驱动程序中可能遇到的问题/oY3.1 中断共享l@FZkg3.2 硬件发送忙时的处理pZw3.3 流量控制(flow control) $:p.3.4 调试W!07四.进一步的阅读]G_0Q五.杂项Z!h©OldLinux论坛 -- 有关早期Linux内核代码发展的论坛。
")e ©OldLinux论坛-- 有关早期Linux内核代码发展的论坛。
tej$©OldLinux论坛-- 有关早期Linux内核代码发展的论坛。
B12.2©OldLinux论坛-- 有关早期Linux内核代码发展的论坛。
c‘<ae一.Linux系统设备驱动程序概述c1.1 Linux设备驱动程序分类eiD)|wLinux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。
在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定。
在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx 的移植只需做少量的工作。
ASyLinux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种。
字符设备是指存取时没有缓存的设备。
块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),字符设备则没有这个要求。
Linux下USB无线网卡驱动程序移植的实现

5期
任
厦等 : L inux下 U SB 无线网卡驱动程序移植的实现
75
源文件, 如果每次均手工键入 gcc 命令进行编译的 话, 会非常不方便。因此, 人们通常利用 m ake 工具 来自动完成 编译工作。 m akef ile 文件就是 m ake 工 具用来完成并自动维护编译工作的。它需要按照某 种语法进行编写, 其中说明了如何编译各个源文件 并连接生成可执行文件, 并定义了源文件之间的依 赖关系。当修改了其中某个源文件时 , 如果其他源 文件依赖于该文件 , 则也要重新编译所有依赖该文 件的源文件。 默认情况下 , GNU m ake 工具在当前工 作目录 中按如下顺序搜索 m akefile : * GNUm ake file * m akefile * M akefile 在 UN I X 系统中 , 习惯使用 M akef ile 作为 m ak file 文件。如果要使用其他文件作为 m akefile , 则可 利用类似下面的 m ake命令选项指定 m akefile文件: $ m ake - fM akefile . debug 3 . 1 m akefile的基本结构 m akefile中一般包含如下内容 : ( 1)需要由 m ake 工具创建的项目, 通常是目标 文件和可执行文件。通常使用 目标 ( target) 一词 来表示要创建的项目; ( 2)要创建的项目依赖于哪些文件 ; ( 3)创建每个项目时需要运行的命令。 例如 , 假设现在有一个 C ++ 源文件 tes. t C, 该 源文件包含有 自定义的头文件 tes. t h, 则目标文件 tes. t o 明确依赖于两个源文件: tes. t C 和 tes. t h 。另 外, 只希望利用 g+ + 命令来生成 tes. t o 目标文件。 这时 , 就可以利用 如下的 m akefile 来定义 tes. t o的 创建规则 : tes. t o : tes. t C tes.t h g+ + - c - g tes. tC 从上面的例子注意到, 第一行指定 tes. t o 为目 标, 并且依赖于 tes. t C 和 tes. t h 文件。随后的行指 定了如何从目标所依赖的文件建立目标。 当 tes. t C 或 tes.t h 文件在编译之后又被修改, 则 m ake工具可自动重新编译 tes. t o , 如果在前后两 次编译之间, tes. t C 和 tes. t h 均没 有被修 改, 而且 tes. t o 还存在 的话, 就没有必要 重新编译。这种依 赖关系在多源文件的程序编译中尤其重要。通过这 种依赖关系的定义 , m ake工具可避免许多不必要的 编译工作。当然, 利用 Shell脚本也可以达到自动编 译的效果 , 但是 , Shell脚本将全部编译任何源文件, 包括那些不必要重新编译 的源文件, 而 m ake 工具
基于Linux操作系统的网卡驱动程序及其安装

基于Linux 操作系统的网卡驱动程序及其安装刘金梅1周 彤1李紫薇2刘立军3(1.北华航天工业学院电子工程系,河北廊坊065000; 2.唐山建龙实业有限公司,河北唐山064200;3.廊坊开发区昂瑞自动化工程有限公司,河北廊坊065000)摘 要:本文介绍了Linux 操作系统中网络设备和驱动程序的工作原理,针对不同的网卡提出了配置T CP/IP 网络参数的方法,并重点对于网卡安装过程中出现的一些问题进行了分析,提出了相应的解决办法。
关键词:L inux ;网卡;驱动程序中图分类号:T P393 文献标识码:A 文章编号:1673-7938(2008)03-0019-04收稿日期:2008-03-28作者简介:刘金梅(1977-),女,助教,硕士,河北秦皇岛人,从事嵌入式系统研究与开发。
随着Linux 的迅速普及和发展,越来越多的企业和个人开始使用Linux 系统,而Linux 以其系统强大的功能、对多用户的支持和运行稳健的特性越来越多的应用在网络方面,很适合为Web Server 或网络数据库管理系统等服务提供操作系统平台[1]。
但网卡驱动程序的加载与配置比较特殊,Linux 的支持函数少,只能依赖内核中的函数,许多操作需要自己编写,而且调试也非常不方便,因此在Linux 下进行网卡的加载和配置的设计就显得十分重要。
1 Linu x 系统网络设备在Linux 系统中有3种类型的设备:字符设备、块设备和网络设备[2]。
其中前两种设备的驱动都是以文件形式存在于/dev 目录下,可以在用户进程中对其进行读写操作。
而网络设备驱动提供的网络界面并未存在于文件系统之中。
在使用网络设备时,用户进程不再是以文件读写的方式对设备进行操作,而是通过针对特定协议的界面与操作系统的网络协议软件进行通信。
首先,网络设备在Linux 下有其不同于其它设备的处理方式[3]。
Linux 对所有的网络设备进行了抽象并定义了一个统一的概念,称之为接口(inter -face)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux下8019网卡驱动程序福建鑫诺通信有限公司陈光平(chenggp_fj@)本文以S3C44B0的CPU为例,详细解析了linux下RTL8019网卡驱动程序工作原理,其间知识大多来源互联网络,特别是浙大潘纲的论文,在此不一一列出,此文目的只是让嵌入式linux爱好者得到更多网卡驱动的资料,并获得交流机会,不足之处请指正(一)、硬件相关部份1、CPU与网卡的连接方式(s3c44B0 CPU) (RTL 8019网卡)CPU与网卡接线图上图为S3c44b0CPU和网卡的接线图,此接法并非固定,如接法不同,则牵涉到很多相应的改动,下面会详细分析不同之处从硬件部门得到:网卡在CPU的存储空间上接BANK4,即0x08000000(看44B0手册)外部中断号为:EXTINT3 (irqs.h文件获得值为22)上面两个值可以查CPU手册,或询问硬件设计人员由上图可以知道以下数据:(1)、网卡与CPU地址线连接错开8位(A0接A8)(2)、总共连线,其实4根就足够用了,因为每根线可以译码4个地址空间,总共是16个地址空间,每个地址空间对应一个寄存器地址,而8019总共就是16个寄存器(3)、一般是跳线模式,不使用9346芯片1-1 基地址算法首先8019的基地址是300H(见RTL8019芯片资料:选择IO总线地址),但是有些硬件已在芯片中做过了偏移,比如我们的网卡已做了处理,基址已偏移到0x08000000,那么因为网卡A0接CPU的A8,表示基地址左移8位,下一个寄存器reg0的地址就是:0x08000100(0000,0000,0001 0001,0000,0000)还不理解的话我们看另一种接法:(S3C44B0 CPU ) (RTL8019芯片) 这种接法地址线只错开一位,我们来看(假如仍使用BANK4):A1 A0,为何A0不能接A0,因为8019是共用数据线和地址线的,如果A0接A0的话,无法配置8位和16位方式现在可以看到,基地址为300H 的话,左移一位(A0->A1),就是600H,于是算出基地址为: 0x08000600,下一个寄存器的地址就是0x08000602,因为都左移一位,相当于x2了2、8019网卡的工作原理本节主要讨论一下8019是怎么工作的,如下图:(本地DMA ) (远端DMA )(图2 与DMA 有关的寄存器 )2-1 远端DMA 和本地DMA首先解释一下远端DMA 和本地DMA 的区别,以发送为例,网络发送数据是下面这样一个流程:CPU 将数据先发送到网卡上的16KRAM 中,这之间必须要有一个数据通道,我们称为远端DMA ,而数据从网卡的RAM 中发出给链路,RTL8019控制器与RAM 之间的通道称为本地DMA2-2 CPU 读写数据到网络芯片先解释一下上面提到的几个重要的寄存器,我们从上面分阶段说明:RBCR0,RBCR1:存放要读写数据的长度RSAR0,RSAR1:存放数据到网络芯片(RAM)中存放的起始地址(而不是页号,但通常还是以某页的00为开始,如0x4000)CR:向命令寄存器发出Remote DMA开始指令上面的流程后面会详细解说2-3 网络芯片发数据到以太网CPU把数据用Remote DMA发到网络芯片之后,就可以用让网络芯片用Local DMA向外数据了,需要设置如下的控制器:TPSR:网络芯片要发送的数据在网络芯片RAM中的起始页号,所以发送的数据只能从某页的开头存放。
TBCR0,TBCR1:要发送的数据总长度CR:向命令寄存器发出发送数据包的指令CMD_XMIT然后程序就可以返回了,网络芯片会自动用Local DMA发数据包2-4 网络芯片从以太网读数据网络芯片在从以太网读数据过程中,会用到的寄存器如下:PSTART,PSTOP:网络芯片接收数据缓冲区的起始和终止页号。
形成一个接收缓冲环,每页256字节CURR:接收缓冲环写页指针,初始化=PSTARTBNRY:接收缓冲环读页指针,初始化=PSTART这四个寄存器在init函数里初始化,以后有数据包来到时,网络芯片会自动判断是否发给本机,是则用Local DMA存入数据,并自动修改读写指针RTL8019接收包帧结构:具体流程如下:有了上面的收发包的格式,如何发送和接收数据包呢?看下图:图3 发送缓冲区先将待发送的数据包存入芯片RAM,给出发送缓冲区首地址和数据包长度(写入TPSR,TBCR0,1),启动发送命令(CR=3E),即可实现8019发送功能.8019会自动按以太网协议完成发送并将结果写入状态寄存器。
那么8019是怎样接收数据的呢?请看下图:接收缓冲区构成一个循环FIFO队列,PSTART、PSTOP两个寄存器限定了循环队列的开始和结束页,CURR为写入指针,受芯片控制,BNRY为读出指针,由主机程序控制,根据CURR=BNRY+1?可以判断是否收到新的包,新收到的数据包按下图的格式存于以CURR 指出的地址为首址的RAM中当CURR=BNRY时芯片停止接收数据包总的说来,数据包是这样被主机写入芯片和从芯片RAM读出来的:主机设置好远端DMA 开始地址(RSAR0,1)和远端DMA数据字节数(RBCR0,1),并在CR中设置读写,就可以从远端DMA口寄存器读出芯片RAM里的数据或把数据写入RAM芯片,用个示例来说明一下(以发送为例):首先了解RBCR0,1中的远端DMA字节数在寄存器高低位上是怎么存储的?比如长度为600字节,如下:(十进制600=十六进制258)PG0W_RBCR0 = 600 & 0xff; //0x58PG0W_RBCR1 = 600 >> 8; //0x2同样道理写入地址:PG0W_RSAR0 = XMIT_START & 0xff;PG0W_RSAR1 = XMIT_START >> 8;然后发送:NIC_CR = (CR_PAGE0 | CR_DMA_WRITE | CR_START);此时CPU通过远端DMA发送了网卡RAM中的指定区域数据2-5网卡RAM的空间分配网卡RAM的空间分配(包括收缓冲区、发缓冲区、数据存储区),RAM空间原则上是随意分配的,看了资料很多的分配方案都是如下:RAM总共16k,可以用来存储数据的地址是0x4000-0x7FFF,为什么呢?看一下RAM的结构图7 网卡RAM结构图因为256个字节称为一页,所以0x4000-0x7FFF可以用页表示为0x40---0x7F,下面采用的也基本都是用页的地址,如:0x4000-0x40ff是一页,我们称该页为第0x40页(或页0x40),页码也就是16位地址的高8位. 0x4100-0x41ff 是一页,称为第0x41页.0x4000-0x7fff共16k字节的ram是网卡接收和发送数据包用的,该16k字节的ram实际上是双端口的ram,可以同时被网卡读/写和用户读/写,相互之间不影响,网卡读/写比用户读写的优先级高,举个例子:假如网卡收到一个数据包,需要放到0x5000开始的缓冲区,那么需要写入第0x50页.这时用户同时读取旧的数据包,该数据包放在0x4000开始的一段缓冲区,那么需要读第0x40页.网卡优先,它先写入一个字节,然后才读取一个字节到ISA总线上.内部总线的速度很快,是20Mhz,而ISA总线只有8Mhz, 网卡足够快进行同时读写数据,互不影响.既然如此,我们做如下定义:0x40---0x4B共12页做为网卡的发送缓冲区,刚好可以存储两个最大的网络包(约1.5k一个最大网络包),另外使用0x4C---0x7F为网卡的接收缓冲区,共52页,如下定义:Reg04=0x40;//参看RTL8019手册,04在寄存器页0发状态为TPSR,即发送首地址Reg01=0x4C;//参看RTL8019手册,01在寄存器页1写状态为PSTART,即接收首地址Reg02=0x80;//参看RTL8019手册,01在寄存器页2写状态为PSTOP,即接收尾地址2-6关于网卡MAC地址:0x00e0-0x00ff:52525454ABAB3D3D8E8E2C2C545446464C4C49494E4E404022222020575757 57 ,那么该网卡的地址是:5254AB3D8E2C,单地址和双地址的内容是重复的.一般使用偶数地址的内容,Prom是网卡在复位的时候从93C46里读出来的.如果你没有使用93C46,那么就不要使用Prom.,那么如何获得网卡的地址,有两种方法,一是直接读93C46,二是读Prom.网卡在工作的时候的网卡地址是由寄存器MAR0,MAR1,MAR2,MAR3,MAR4,MAR5决定,而不是93C46,也不是Prom. 而这几个寄存器的内容需要用户自己编写程序写入,一般可以读出Prom里的网卡地址,然后写入到这6个寄存器里.如果你没有使用93C46,那么Prom也是不可以使用的,这时要由你的程序自己指定一个网卡地址, 网卡地址不能跟别的网卡地址相同,写入到MAR0-MAR5里.例如使:MAR0=00MAR1=00MAR2=00MAR3=00MAR4=00MAR5=08那么网卡的地址就是:00:00:00:00:00:08所有发给00:00:00:00:00:08地址的数据包就可以被网卡收到.发送数据包的时候你的程序也要使用MAR0-MAR5的值作为发送的源地址.2-7 关于IO端口几乎每一种外设都是通过读写设备上的寄存器来进行的。
外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。
CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。
而具体采用哪一种则取决于CPU的体系结构。
有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。
在这种情况下,外设I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为内存的一部分。
此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。
这就是所谓的“内存映射方式”(Memory-mapped)。
而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。
这是一个与CPU的RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。
CPU通过设立专门的I/O指令(如X86的IN和OUT指令,linux的outb,inb等,后面代码有用到)来访问这一空间中的地址单元(也即I/O端口)。