Linux下网卡驱动程序
Linux系统下无线网卡驱动的安装
![Linux系统下无线网卡驱动的安装](https://img.taocdn.com/s3/m/0e26e512ff00bed5b8f31d00.png)
作业是一系列由 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安装网卡驱动教程](https://img.taocdn.com/s3/m/3d79cd4df342336c1eb91a37f111f18583d00cde.png)
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下安装无线网卡驱动](https://img.taocdn.com/s3/m/fd1b2e5977232f60ddcca17e.png)
换了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下安装无线网卡驱动程序
![LINUX下安装无线网卡驱动程序](https://img.taocdn.com/s3/m/4f2345ebb8f67c1cfad6b8c9.png)
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下安装编译网卡驱动的方法](https://img.taocdn.com/s3/m/c6e9c82190c69ec3d5bb757d.png)
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网卡驱动程序编写](https://img.taocdn.com/s3/m/af9c7a4524c52cc58bd63186bceb19e8b9f6ec5f.png)
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无线网卡驱动程序移植的实现
![Linux下USB无线网卡驱动程序移植的实现](https://img.taocdn.com/s3/m/9d6c50a7b0717fd5360cdc9c.png)
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操作系统的网卡驱动程序及其安装](https://img.taocdn.com/s3/m/62c8ca3387c24028915fc353.png)
基于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)。
嵌入式Linux下无线网卡驱动程序设计
![嵌入式Linux下无线网卡驱动程序设计](https://img.taocdn.com/s3/m/446b9b47852458fb770b56cd.png)
万方数据加压过滤机卸料原理及常见电气故障分析王建斌(神华准格尔能源有限公司选煤厂)中图分类号:TD928.2文献标识码:A文章编号:1009曲14】((2011)03—0081-011一料原理加压过滤机是通过排料闸板进行卸料的。
排料闸板包括2个闸板,一个上料仓,一个下料仓闸板由液压油缸推动。
起始位置时,上闸板关闭,下闸板打开,在上料舱内聚集煤饼。
延时5s下闸板Ls205关闭。
限位开关S12返回下闸板关闭信号后,下密封圈进行充气,密封圈充气,此时充气完毕。
排气阀PcV2ll关闭。
到位后0V212打开对中间仓进行充气。
中间仓气体压力与上料仓气体压力相等后,等待料位计LIs^20l达到设定料位值或设定时间。
如果料位值或设定时间满足条件则上密封圈排气,上密封圈排气压力pic214为零后,上闸板Ls204打开,上闸板限位开关s11返回打开信号。
此时上料仓内的物料落入中间仓。
延时5s后上闸板关闭。
当上闸板限位开关s12返回上闸板关闭到位信号后,上密封圈进行充气。
密封圈充气压力pic214达到6.0,迸气阀OV212关闭,到位后PcV211打开对中间仓进行排气。
中间仓气体压力等于大气压力,即与下料仓气体压力相等后,下密封圈排气。
当pic215压力为零时,下闸板Ls205打开,下闸板限位开关s11返回打开信号。
此时中间仓内的物料落入下料仓,卸料完成。
此后上下闸板将进行科学论坛N●I新的循环。
2常见电气故■分析l、限位开关故障:当限位开关故障时,将显示Ls204故障。
注:当下闸板打开限位开关s儿虚接时,即信号时有时无则上下闸板同时打开,故障停机.2、Pc、r211故障:现象为压力罐内压力低,可能是211阀定位计损坏或定位位置不对,或是阀体损坏。
现象为2儿阀排气速度慢(程序中设定2ll排气时,中间仓压力要在10s内降到02.bar以下),则可能是排气管堵,211定位计损坏或定位位置不对,或是0v212阀损坏使进气压力与排气压力达到一个平衡。
linux网卡驱动安装方法
![linux网卡驱动安装方法](https://img.taocdn.com/s3/m/4fce15cc4028915f814dc206.png)
linux网卡驱动安装方法1、查找网卡芯片,确立网卡型号,并确立linux内核版本,到对应的网卡官网下载驱动。
2、安装步骤(这里以RTL8110为例)1)cd到网卡驱动所在文件夹,解压:# tar vjxf r8168-8.aaa.bb.tar.bz2//关于解压命令查看《Linux下软件包的解压方式大全》2)进入文件夹:# cd r8168-8.aaa.bb3)安装(需安装kernel-source,否则会失败):# make clean modules (as root or with sudo)# make install# depmod -a# insmod ./src/r8168.ko (or r8168.o in linux kernel 2.4.x)4)通过以下指令查看驱动是否已经启动.# lsmod | grep r8168# ifconfig -a如果能看到类似“ethX”的结果输出, 说明已成功驱动网卡.5)配置并激活ethX.# ifconfig ethX up,where X=0,1,2,...3、附realtek RTL8168B驱动readme文档:<Linux device driver for Realtek Ethernet controllers>This is the Linux device driver released for RealTek RTL8168B/8111Band RTL8168C/8111C, Gigabit Ethernet controllers with PCI-Expressinterface.<Requirements>- Kernel source tree (supported Linux kernel 2.6.x and 2.4.x)- For linux kernel 2.4.x, this driver supports 2.4.20 and latter.- Compiler/binutils for kernel compilation<Quick install with proper kernel settings>Unpack the tarball :# tar vjxf r8168-8.aaa.bb.tar.bz2Change to the directory:# cd r8168-8.aaa.bbIf you are running the target kernel, then you should be able to do :# make clean modules (as root or with sudo)# make install# depmod -a# insmod ./src/r8168.ko (or r8168.o in linux kernel 2.4.x)You can check whether the driver is loaded by using following commands.# lsmod | grep r8168# ifconfig -aIf there is a device name, ethX, shown on the monitor, the linuxdriver is loaded. Then, you can use the following command to activate the ethX.# ifconfig ethX up,where X=0,1,2,...<Set the network related information>1. Set manuallya. Set the IP address of your machine.# ifconfig ethX "the IP address of your machine"b. Set the IP address of DNS.Insert the following configuration in /etc/resolv.conf.nameserver "the IP address of DNS"c. Set the IP address of gateway.# route add default gw "the IP address of gateway"2. Set by doing configurations in /etc/sysconfig/network-scripts/ifcfg-ethX for Redhat and Fedora, or /etc/sysconfig/network/ifcfg-ethX for SuSE. There are two examples to set network configurations.a. Fix IP address:DEVICE=eth0BOOTPROTO=staticONBOOT=yesTYPE=ethernetNETMASK=255.255.255.0IPADDR=192.168.1.1GA TEWAY=192.168.1.254BROADCAST=192.168.1.255b. DHCP:DEVICE=eth0BOOTPROTO=dhcpONBOOT=yes<Modify the MAC address>There are two ways to modify the MAC address of the NIC.1. Use ifconfig:# ifconfig ethX hw ether YY:YY:YY:YY:YY:YY,where X is the device number assigned by Linux kernel, andYY:YY:YY:YY:YY:YY is the MAC address assigned by the user.2. Use ip:# ip link set ethX address YY:YY:YY:YY:YY:YY,where X is the device number assigned by Linux kernel, andYY:YY:YY:YY:YY:YY is the MAC address assigned by the user.<Force Link Status>1. Force the link status when insert the driver.If the user is in the path ~/r8168, the link status can be forcedto one of the 5 modes as following command.# insmod ./src/r8168.ko speed=SPEED_MODE duplex=DUPLEX_MODE autoneg=NWAY_OPTION,whereSPEED_MODE = 1000 for 1000Mbps= 100 for 100Mbps= 10 for 10MbpsDUPLEX_MODE = 0 for half-duplex= 1 for full-duplexNW AY_OPTION = 0 for auto-negotiation off (true force)= 1 for auto-negotiation on (nway force)For example:# insmod ./src/r8168.ko speed=100 duplex=0 autoneg=1will force PHY to operate in 100Mpbs Half-duplex(nway force).2. Force the link status by using ethtool.a. Insert the driver first.b. Make sure that ethtool exists in /sbin.c. Force the link status as the following command.# ethtool -s ethX speed SPEED_MODE duplex DUPLEX_MODE autoneg NWAY_OPTION,whereSPEED_MODE = 1000 for 1000Mbps= 100 for 100Mbps= 10 for 10MbpsDUPLEX_MODE = half for half-duplex= full for full-duplexNW AY_OPTION = off for auto-negotiation off (true force)= on for auto-negotiation on (nway force)For example:# ethtool -s eth0 speed 100 duplex full autoneg on本文出自:中国E动网[]中国领先互联网接入服务提供商!11年品质保障!-- 中国E动网[]。
Linux下无线网卡驱动的安装
![Linux下无线网卡驱动的安装](https://img.taocdn.com/s3/m/164617007cd184254b35355a.png)
计算机系列教学文档------Linux下无线网卡驱动的安装Linux下无线网卡驱动的安装本来是我的本本比较旧,为了做一些网络实验,需要安装linux 操作系统,但系统安装完成后,无线网卡的驱动一直有问题,所以在网络上查找到这篇文章,希望对大家有用。
在ubuntu、BT5等linux 操作系统上通用。
The Ipw2200 is the Linux driver for the Intel PRO/Wireless 2200BG Mini-PCI Adapter and Intel PRO/Wireless 2915ABG Mini-PCI Adapter found in Centrino laptops. This driver only works on 2.6.x kernels (2.6.4 or newer).Starting with kernels 2.6.14 the driver is included in kernel.NOTE!Make sure you have installed the firmware! The ipw2200 documentation will tell you where to find these firmware files and where to install those.Included in mainline Linux kernels, tracking the SourceForge version with about 6 months delay.PackagesFedora Packages(1): Fedora Core includes the ipw2200-drivers in FC3 (with updates) and FC4. You still need to grab the firmware from /Fedora Packages(2): /name/ipw2200/Mandriva: The ipw2200 driver modules are included in the stock kernel package; the firmware is included in the commercial distribution or available from /.Gentoo: The driver is in the portage tree: emerge net-wireless/ipw2200 and net-wireless/ipw2200-firmwareDebian Sarge includes the source code for the modules in package ipw2200-source (/ipw2200-source). You additionally need to download firmware manually.Debian Etch includes a version of the modules in its kernel or for a later version install package ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64; or the source code for them in ipw2200-source (/ipw2200-source) to compile one yourself. You additionally need to download firmware manually.StatusIn development, usable, WEP 128bit encryption works, WPA and WPA2 work with drivers >= 1.0.2 using wpa_supplicant, monitor/rfmon is supported as with version >= 1.0.6. Generally works well, but some users experience problems (especially with firmware restarts and with WPA functionality using wpa_supplicant). Passing the hwcrypto=0 module parameter improves reliability for many users.The ipw2200 driver up to version 1.0.6 (in combination with some newer kernels) had a problem getting DHCP leases (it turned out to be a bug in the broadcasting code). Version 1.0.7 seems to have fixed this.Older ipw2200 driver versions shipped by many distributions have been reported to freeze a T43 after several minutes of intensive communication. Installing version 1.1.2 of the driver solved the problem.Latest stable versions:ipw2200 driver: 1.2.0firmware: 3.0ieee80211 stack: 1.2.15Latest development versions:ipw2200 driver: 1.2.2firmware: 3.1ieee80211 stack: 1.2.18Mainline kernels contain older (but mostly functional) versions of ipw2200 and ieee80211, and still require the addition of the firmware files. To get the latest versions you need to separately install the ipw2200 module and ieee80211 stack.InstallationSource CodeDownload the latest ieee80211 stack and install it:# tar xzvf ieee80211-1.2.15.tgz# cd ieee80211-1.2.15# make# make installDownload the latest ipw2200 module and install it:# tar xzvf ipw2200-1.2.0.tgz# cd ipw2200-1.2.0# make# make installDownload the matching firmware and install it:# tar xzvf ipw2200-fw-3.1.tgz -C /lib/firmwareDebian Sarge# apt-get install ipw2200-source# module-assistant -t build ipw2200-source[is this how module-assistant works in Sarge?]Debian EtchThe kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture.The firmware is not distributed with Debian due to licensing reasons, download the matching version 3.0 firmware and install it:# tar -xvf ipw2200-fw-3.1.tgz -C /lib/firmware# mv /lib/firmware/ipw2200-fw-3.1/* /lib/firmwareDebian UnstableInstall ieee80211-source:# apt-get install ieee80211-source# module-assistant -t build ieee80211-sourceThe kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture.There is a bug in the Debian package (last checked: Dec 30th 2005) that prevents from linking to ieee80211 modules using module-assistant. In case it is not fixed in your version, fall back to the regular source installation procedure described above.The firmware is not distributed with Debian due to licensing reasons, download the matching firmware and install it:# tar xzvf ipw2200-fw-2.4.tgz -C /usr/lib/hotplug/firmwaresee /etc/hotplug/firmware.agent for details on configured firmware locationsMake sure that your firmware files are not in a subdirectory (dmesg will give you warnings after any modprobe when firmware can’t be loaded)Fedora CoreInstallation on Fedora Core 5 works out of the box provided you install the ipw2200-firmware package. However, certain parts of the install process may not set up the wireless networking in a friendly manner using GNOME system tray icons and other tools. Bill Moss has written some excellent HowTo articles, including using VPNC to connect to a remote Cisco IPSec network.Fedora Core 5 and the IPW2200 Wireless DriverFedora Core 5 NetworkManager, NetworkManager-vpnc and Wireless Driver IPW2200Testing the driver# modprobe ipw2200# iwconfig# dmesg output might look similar to this:ieee80211: 802.11 data/management/control stack, 1.1.6ieee80211: Copyright (C) 2004-2005 Intel Corporation <jketreno@>ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8ipw2200: Copyright(c) 2003-2005 Intel Corporationipw2200: Detected Intel PRO/Wireless 2915ABG Network ConnectionNB: To make the wifi LED work on the thinkpad, pass the option led=1 to the kernel while loading the module. eg. # modprobe ipw2200 led=1. This can also be accomplished by adding that option to the file where your distribution looks for modprobe options so that it becomes automatic.In debian this can be done by putting a file named after the module in /etc/modutils with the options in ithere we might run a cmd like this# echo options ipw2200 led=1 > /etc/modutils/ipw2200then we must run update-modules to remake /etc/module.conf# update-modulesWPA supportUse wpa_supplicant with the -Dwext argument (not -Dipw), and pass the hwcrypto=0 argument to the ipw2200 module.There are some very detailed instructions with working sample configurations on the following link:ipw2200 WPA instructionPower ManagementThe ipw2200 driver has power management capabilities, which comes in handy while operating on battery.To enable reduced power consumption mode, issue:# iwpriv wlan0 set_power 7where wlan0 is the name of your interface. This will reduce idle power consumption by 1-2 Watts compared to no power management. To return to the “normal” operation mode, you can issue:# iwpriv wlan0 set_power 6.In order to check current settings, you can issue:# iwpriv wlan0 get_power.More information on these option is available in the README.ipw3945 file in the ipw3945 package (README.ipw2200 seems to be rather sketchy about the details of power management). You may want to turn power management on/off on demand in an ACPI script that catches battery/AC events, so that this happens automatically.Note that there have been reports that some versions of ipw2200 react with a firmware error to power management commands. This patch could alleviate the problem.To disable the radio (and further reduce power consumption) when the card is not in use, issue:# echo 1 > /sys/bus/pci/drivers/ipw2200/*/rf_killTo enable the radio, issue:# echo 0 > /sys/bus/pci/drivers/ipw2200/*/rf_killTo make the radio off by default after boot, addoptions ipw2200 disable=1to your /etc/modprobe.conf or equivalent (on kubuntu 6.10 /etc/modprobe.d/options).See README.ipw2200 in the ipw2200 package for details and other options.wpa_supplicant assigns a random SSID wasting powerMany wpa_supplicant versions implement disconnection by configuring a random SSID. ipw2200 reacts in a very unfortunate way to this, intensively scanning for this random SSID and wasting power. This waste can be seen in powertop.Here are a number of ways to solve this problem:Run iwconfig eth1 essid off after every wpa_supplicant disconnection.Upgrade to wpa_supplicant version 0.7.1 or higher. Starting from git commit 3145e615 wpa_supplicant does not configure ipw2200 with a random SSID any more.Backporting commit 3145e615 to wpa_supplicant version 0.6.8 also fixes the problem.Changing the enabled channelsPermitted WiFi channels vary with geography due to regulation. The EEPROM in this chip contains a country code (programmed by the hardware manufacturer), and the driver converts this to a channel list and enforces it.If you carry your laptop to a different regulatory region, you may need to change the list of permitted channels according to local regulations. There are two ways to accomplish this: Patching the ipw2200 driverYou can alter the ipw2200 driver sourcecode to hard-code the country code instead of reading it from EEPROM. For example, this will allow all 14 channels (perfect for those special occasions in international water):—ipw2200.c.orig+++ ipw2200.c@@ -11344,7 +11344,7 @@ static int ipw_up(struct ipw_priv *priv) memcpy(priv->net_dev->dev_addr, priv->mac_addr, ETH_ALEN); for (j = 0; j < ARRAY_SIZE(ipw_geos); j++) {- if (!memcmp(&priv->eeprom[EEPROM_COUNTRY_CODE],+ if (!memcmp(“ZZR”, ipw_geos[j].name, 3)) break; }For the list of codes and their meaning, see the “ipw_geos” table in the ipw2200.c sourcecode.Patching the EEPROMAlternatively, you can change the country code in the EEPROM once and for all, and then use the standard ipw2200 driver.See this guide:Patching the EEPROM.Instead of the hd program mentioned there, you can use the more common od program:echo -n ZZD | od -t x10000000 5a 5a 440000003ATTENTION!If this procedure goes wrong, you may ruin your wireless card.Additional CommentsYour kernel may include an old version of the ipw2200 driver. It is recommended to use the latest version.Make sure you also install the firmware version needed by the driver version you use. You can find the firmware here. To install it, decompress the .tgz file into /usr/lib/hotplug/firmware or /lib/firmware depending on your disto.The driver doesn’t appea r to support the MII interface, so any tools like automatic network configuration managers (i.e. whereami) that rely on mii-tool do not work.。
26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)
![26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)](https://img.taocdn.com/s3/m/2e668c1c6d175f0e7cd184254b35eefdc8d315a9.png)
26.Linux-⽹卡驱动介绍以及制作虚拟⽹卡驱动(详解)1.描述⽹卡的驱动其实很简单,它还是与硬件相关,主要是负责收发⽹络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制⽅式进⾏发送,并将接收到的数据包传递给上层协议。
⽹卡设备与字符设备和块设备不同,⽹络设备并不对应于/dev⽬录下的⽂件,不过会存放在/sys/class/net⽬录下如下图所⽰,我们通过ls /sys/class/net/命令,可以看到有两个⽹卡:2.Linux系统对⽹络设备驱动定义了4个层次,这4个层次有到下分为:1)⽹络协议接⼝层:实现统⼀的数据包收发的协议,该层主要负责调⽤dev_queue_xmit()函数发送数据, netif_rx()函数接收数据2)⽹络设备接⼝层:通过net_device结构体来描述⼀个具体的⽹络设备的信息,实现不同的硬件的统⼀3)设备驱动功能层:⽤来负责驱动⽹络设备硬件来完成各个功能, 它通过hard_start_xmit() 函数启动发送操作,并通过⽹络设备上的中断触发接收操作,4)⽹络设备与媒介层:⽤来负责完成数据包发送和接收的物理实体, 设备驱动功能层的函数都在这物理上驱动的层次结构如下图所⽰:3.⽹卡驱动初始化⽽我们的⽹卡驱动程序,只需要编写⽹络设备接⼝层,填充net_device数据结构的内容并将net_device注册⼊内核,设置硬件相关操作,使能中断处理等3.1其中net_device结构体的重要成员,整理后如下所⽰:struct net_device{char name[IFNAMSIZ]; //⽹卡设备名称unsigned long mem_end; //该设备的内存结束地址unsigned long mem_start; //该设备的内存起始地址unsigned long base_addr; //该设备的内存I/O基地址unsigned int irq; //该设备的中断号unsigned char if_port; //多端⼝设备使⽤的端⼝类型 unsigned char dma; //该设备的DMA通道unsigned long state; //⽹络设备和⽹络适配器的状态信息struct net_device_stats* (*get_stats)(struct net_device *dev); //获取流量的统计信息 //运⾏ifconfig便会调⽤该成员函数,并返回⼀个net_device_stats结构体获取信息struct net_device_stats stats; //⽤来保存统计信息的net_device_stats结构体unsigned long features; //接⼝特征,unsigned int flags; //flags指⽹络接⼝标志,以IFF_(Interface Flags)开头//当flags =IFF_UP(当设备被激活并可以开始发送数据包时,内核设置该标志)、 IFF_AUTOMEDIA(设置设备可在多种媒介间切换)、IFF_BROADCAST(允许⼴播)、IFF_DEBUG(调试模式,可⽤于控制printk调⽤的详细程度)、 IFF_LOOPBACK(回环)、IFF_MULTICAST(允许组播)、 IFF_NOARP(接⼝不能执⾏ARP,点对点接⼝就不需要运⾏ ARP)和IFF_POINTOPOINT(接⼝连接到点到点链路)等。
嵌入式Arm—Linux系统的网卡驱动程序的分析与实现
![嵌入式Arm—Linux系统的网卡驱动程序的分析与实现](https://img.taocdn.com/s3/m/f759ca553b3567ec102d8a19.png)
一一一 Ⅺ 一
甜
包 括 实 际 的设 备 ( 网卡 ) 虚 拟 设 备 ( 虚 拟 局 域 如 和 如
网) 。网络设 备可 分为 不 同的类 型 , 以太 网 和令 牌 环 如
作 。 因此 , 编写驱 动程序 , 要 首先 要对设 备具 有准确 的
a a y i g h Li u n t r d i e s r c u e e e r h n a d e l i g h wo k n p i cp e n k y n l z n t e n x e wo k rv r t u t r ,r s a c i g n r a i n t e z r i g rn i l a d e t c n lge f e h o o is o Ar Li u e wo k d v c m a i g o t e e a mp r a t p r s o e e a n t r rv r m- n x n t r e ie, k n u s v r l i o t n a t f g n r l e wo k d i e s r c u e, i h i c u e t e d vc e it a i n,I i a ii g e c e i e t u t r wh c n l d h e ie r g s r to n t l n a h d v c ,mo u e u l a i g,t ed vc t o s i z d l n o d n h e ie me h d ( p n, t p, e d n n e ev n ) I d ii n,i t r u to s i t o u e o e p a n t e p o e s o e e v n o e s o s n i g a d r c i i g . n a d to n e r p in i n r d c d t x li h r c s fr c ii g i f r t n F n l r v d e wo k i t r a e s a d r b s d o h r e . n o ma i . i a l we p o i e a n t r n e f c t n a d, a e n Et e n t o y Ke r s n t r e ie d i e , mb d e o t r Ar — i u CS 9 0 y wo d : e wo k d v c r r e e d d s fwa e, m L n x, 8 0 v
linux服务器安装网卡驱动一般步骤(总结)
![linux服务器安装网卡驱动一般步骤(总结)](https://img.taocdn.com/s3/m/c369c5d5360cba1aa811da1c.png)
1.linux服务器安装网卡驱动一般步骤(总结)现在很多服务器安装linux可能会出现网卡,硬盘raid驱动无法等现象,现在将一般安装驱动方法介绍如下:一般服务器自带的光盘里面,有一张是专门的驱动盘。
1、将盘放入光驱2、挂载mount /dev/cdrom /mnt/cdrom 当挂载U盘时,可以到vi /etc/fstab 查看U盘的挂载属性目录3、找到驱动目录,猜测是如下目录cd /mnt/cdrom/driver/net/linux/redhat4.24、里面会有tgz后缀的文件,拷贝到rootcp 名.tgz /root5、解压编辑安装tar xvfz 名.tgzcd 名makemake install6、扫描硬件service kudzu start7、会跳出兰框,按任意键,选择configure,设置IP地址。
OK案例1:IBM X 3650 安装网卡驱动Red Hat Enterprise Linux4.2以后版本可以自动识别IBM X 3650网卡驱动,但是以前版本却不行,下面介绍低版本安装网卡驱动方法:1 Red Hat Enterprise Linux 3版本U6以上可以识别阵列卡,但是无法加载网卡驱动;如果不是U6的版本,需要手动输入linux dd加载阵列卡驱动来继续安装操作系统。
2 安装前题:在开发工具和系统内核全安装安装GCC、kernel-devel、rpmbuild 3个相关包。
说明:rpmbuild ---SRPM是RPM包source 的发布形式, 可分为包含原始代码的(src.rpm)包和不包含原始代码的(nosrc.rpm)包两种.其中,src.rpm包含原始代码也就是src.rpm类似的包都要用rpmbuild命令安装。
rpm -ivh rpm-build-4.2-1.i386.rpmrpm -ivh kernel-devel-2.6.9-5.EL.i686.rpm3、下载网卡驱动bnx2-1.4.36c-1.src.rpm,下载页面:/support/397307-AA1/more_info_local_24340.html4 安装网卡驱动rpm –ivh bnx2-1.4.36c-1.src.rpmcd /usr/src/redhatrpmbuild –bb SPECS/bnx2.specrpm -ivh RPMS/i386/bnx2-1.4.36c-1.i386.rpm --forcerpm -ivh RPMS/i386/bnx2-debuginfo-1.4.36c-1.i386.rpm --force5 reboot后机器启动到扫描新硬件时弹出配置向导,可以配置IP或者跳过此步骤进系统再用系统工具-网络设备控制来配。
Linux系统以太网卡驱动程序加载与配置
![Linux系统以太网卡驱动程序加载与配置](https://img.taocdn.com/s3/m/9853913f0b4c2e3f57276350.png)
Linux系统以太网卡驱动程序加载与配置山东科技大学信电学院计算中心刘春琳郭红琳高珂王秀芳江楠摘要论述了以太网卡驱动程序的加载方法,及通过创建或修改配置文件来配置TCP/IP网络参数的通用方法,与用符号链接将HTML格式的HOWTO文档放入Linux主机的Web Server文档根目录。
关键词Linux以太网TCP/IP如UNIX一样,Linux系统功能强大、运行稳健的特性更重要地体现在网络方面,为Web Server或网络数据库管理系统等服务提供操作系统平台,但网卡驱动程序的加载与配置比较特殊。
运行环境为PÓ800,ATI3D RAGE PRO AGP2X显卡芯片,IBM DTLA-305020ATI,RTL8139实达网卡;TurboLinux Rel- 3.0.2简体中文版,内核版本2.0.36;以下任务均需以root用户身份登入完成。
1Ethernet(以太)网卡驱动程序的加载除了3Com、In tel等驰名网卡厂商的产品能在安装Lin-ux时由安装系统识别后自动创建/etc/conf.modules系统可加载模组配置文件(作用类似DOS中的CONFIG.SYS)外,一般的网卡则需Linux系统安装完毕重新启动后再用vi 创建或修改/etc/conf.modules文件在此特推荐含有RTL8139芯片的网卡,由于该芯片生产商Real tek公司已投资Linux系统开发,所以Linux系统中含有RTL8139芯片的通用驱动程序(其可加载模组文件为/lib/modules/./net/ ret18139.o,源程序文件为/usr/src/linux/drivers/net/rtl8139.c),用户只需在/etc/conf.modules文件中添加如下行:alias eth0rt18139,然后重新启动系统即可使Linux主机具备网络功能。
如是采用其他芯片的网卡,则需查看其附带的驱动盘中是否含有该网卡的驱动程序的源代码和M akefile文件或提供其驱动程序源代码和Makefile文件的网址并下载其驱动程序源代码和Makefile文件,用make程序生成可加载模组文件(扩展名为/o0),将该文件拷贝到目录//lib/ modules/./net0中并按上段所述步骤操作即可。
Linux下网卡驱动程序
![Linux下网卡驱动程序](https://img.taocdn.com/s3/m/6826161ca300a6c30c229f4b.png)
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中的起始页号,所以发送的数据只能从某页的开头存放。
Linux中写个简单的网卡驱动程序
![Linux中写个简单的网卡驱动程序](https://img.taocdn.com/s3/m/f62ece7831b765ce05081445.png)
Linux中写个简单的网卡驱动程序学习应该是一个先把问题简单化,再把问题复杂化的过程。
一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。
读Linux网卡驱动也是一样。
那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。
不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,那其他的事情自然就水到渠成了,这是笔者的心得。
一般在使用的Linux网卡驱动代码动辄3000行左右,这个代码量以及它所表达出来的知识量无疑是庞大的,我们有没有办法缩短一下这个代码量,使我们的学习变的简单些呢?经过笔者的不懈努力,在仍然能够使网络设备正常工作的前提下,把它缩减到了600多行,我们把暂时还用不上的功能先割出去。
这样一来,事情就简单多了,真的就剩下一个框架了。
下面我们就来剖析这个可以执行的框架。
限于篇幅,以下分析用到的所有涉及到内核中的函数代码,我都不予列出,但给出在哪个具体文件中,请读者自行查阅。
首先,我们来看看设备的初始化。
当我们正确编译完我们的程序后,我们就需要把生成的目标文件加载到内核中去,我们会先ifconfig eth0 down和rmmod 8139too来卸载正在使用的网卡驱动,然后insmod 8139too.o把我们的驱动加载进去(其中8139too.o是我们编译生成的目标文件)。
就像C程序有主函数main()一样,模块也有第一个执行的函数,即module_init(rtl8139_init_module);在我们的程序中,rtl8139_init_module()在insmod之后首先执行,它的代码如下:static int __init rtl8139_init_module (void){return pci_module_init (&rtl8139_pci_driver);}它直接调用了pci_module_init(),这个函数代码在Linux/drivers/net/eepro100.c中,并且把rtl8139_pci_driver(这个结构是在我们的驱动代码里定义的,它是驱动程序和PCI设备联系的纽带)的地址作为参数传给了它。
- 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端口)。