网卡驱动程序(通用10篇)
网卡驱动程序 篇1
1.在终端用lsusb查看到我的无线网卡的芯片是5370 Ralink的,
相关的linux驱动可以在www.mediatek.com/_en/07_downloads/01_windows.php?sn=501下载到。
2.把下载下来的压缩包解压,这里我把解压出来的文件夹放在用户目录下,并命名为STA。即路径为/home/lucifer/STA.
3.进入STA的文件夹,修改os/linux/config.mk文件,为了是开启HAS_WPA_SUPPLICANT和HAS_NATIVE_WPA_SUPPLICANT_SUPPORT。具体见下面的代码:(把对应条目的n改成y即可)
# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y
# Support Native Wpa_Supplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
4.用终端进入/home/lucifer/STA.并运行以下命令,
sudo su获取root权限,需要输入当前用户的密码
make
make install
modprobe rt5370sta
到这里基本就可以使用了。
5.最后把网卡添加到/etc/modules (没有进行次操作未发现异样。)
代码:
echo rt5370sta >> /etc/modules
网卡驱动程序 篇2
Linux自出现以来,以其开放源代码、较好的网络性能、精简高效的内核、较高的可定制性、支持多种体系结构等特性,被广泛地应用于嵌入式领域。在嵌入式领域中,可靠性被提高到了最重要的位置。而驱动程序是影响系统可靠性的最大隐患。Stanford大学的一项针对Linux内核的研究显示驱动程序出现BUG的频率比内核中其它部分的代码高出2~7倍[1]。传统的驱动程序与操作系统内核同驻于系统地址空间,拥有内核的所有权限,一旦驱动程序出现BUG,可能导致整个系统崩溃。在提高系统可靠性方面,目前已有的研究都专注于通过把有错误的设备驱动程序与内核隔离[2]。然而,这些研究都忽略了驱动程序可靠性问题中最重要的一个方面:在内核态编程要比在用户态编程困难得多,由于难以调试,因此也更容易出现未知的BUG,导致系统可靠性下降。
本文基于ARM平台,设计并实现了DM9000网卡的用户态驱动程序。与传统的网卡驱动程序相比,本设计由于将大部分代码外移到用户空间,从而大大提高了系统可靠性,同时也有着良好的性能,并且与现有的Linux内核相兼容。
1 用户态驱动程序体系结构
用户态驱动意味着将驱动程序代码转移到用户态运行,从而达到与内核地址空间隔离,提高系统可靠性的目的。目前对用户态驱动的研究主要有微内核系统和微软的UMDF[3]。这两种方法都无法在嵌入式Linux系统中实现。Microdriver[4,5]试图在传统内核态驱动和用户态驱动之间进行折衷,将一部分代码留在内核态以获得性能及兼容性。
Microdriver是性能和可靠性的折中方案,它根据性能相关和优先级分离驱动程序代码。Microdriver将传统的内核态驱动程序依据性能相关与否以及优先级,分离为运行于内核态的k-driver和运行于用户态的u-driver两个部分。它的体系结构如图1所示。其中实线是性能攸关代码执行路径,虚线是性能无关代码执行路径。
设备驱动的内核部分k-driver包括驱动中性能攸关和经常使用的功能模块,如中断处理和一些性能有关操作(如发送接收网络报文),用户态部分u-driver用单独的进程实现,供内核态模块调用。这两个模块一起提供了完整的传统驱动程序的功能。Microdriver的最大特点是与传统操作系统的体系结构兼容。
2 DM9000网卡用户态驱动的实现
综合性能、兼容性等因素,这里借鉴Microdriver的设计思想来实现DM9000网卡在ARM平台的用户态驱动。
2.1 功能模块划分
本设计根据需要划分为k-driver、u-driver、k-mod、u-lib四个模块,对每个模块介绍如下:
(1) k-driver,包括性能相关的热点代码和数据通道,例如输入/输出、中断处理函数、一些高优先级函数(软中断、tasklet和工作队列)等。k-driver以Linux的可加载动态模块(Loadable Kernel Module)的方式运行于内核态,以保证高性能。
(2) u-driver,包括驱动程序中一些与性能无关的非关键操作以及一些优先级较低的代码,例如设备初始化、设备配置、设备控制、错误处理等。u-driver以一个普通进程的形式运行于用户态,以保证充分的故障隔离。
(3) k-mod,注册为一个设备驱动程序并实现了字符设备接口用来与u-lib通信。它实现的功能包括与u-driver进行通信、追踪k-driver与u-driver间共享的数据结构等。
(4) u-lib,实现为一个链接到u-driver的多线程库,它面向u-driver的接口与k-mod面向内核的接口类似。它实现的功能包括请求k-driver提供服务、执行来自k-mod的函数调用请求等。
2.2 I/O访问方式
用户态的u-driver需要能够直接访问DM9000的寄存器或I/O端口。在传统的X86架构处理器平台,存在着两个相关的系统调用:iopl()和ioperm(),通过这两个系统调用即可允许调用进程获得访问设备对应的I/O端口或寄存器的权限。但在嵌入式系统常用的ARM平台,不存在这两个系统调用,但是,可以将设备的寄存器或端口映射到某段物理内存空间上。/dev/mem是物理内存的全映像[6],可以用来访问物理内存,那么只需将DM9000网卡的寄存器或内存映射到物理地址空间,根据映射的地址,使用mmap()系统调用,u-driver可以直接访问和操作DM9000网卡的寄存器[7]。
2.3 通信方案
k-driver和u-driver必须协同工作才能完成传统的内核态驱动的功能。内核态和用户态的运行库提供了这一服务。运行于内核态的k-mod注册为一个设备驱动程序并实现了字符设备接口。运行于用户态的u-lib实现为一个链接到k-driver的多线程库。本设计采用ioctl()系统调用机制,实现k-mod和u-lib之间的通信。图2为本设计所采用的通信方案流程图,其中实线为数据路径,虚线为控制路径。
k-driver调用u-driver中的函数时,通过调用k-mod来传送请求给u-driver,u-driver预分配一个缓冲区来接收数据,缓冲区的大小设置为u-driver与k-driver能传输的数据的上限,接下来,k-mod激活在内核中等待的主线程,复制数据到u-driver地址空间中的缓冲区,并通知u-lib调用u-driver中正确的函数。收到来自k-driver的请求之后,u-lib发送请求给一个工作线程,并回复内核等待接下来的请求。
u-driver也可以向下调用,不论是调用k-driver中的函数还是内核中的其它函数,都可以通过ioctl()系统调用来实现,k-mod中的一个ioctl管理器收到请求并调用合适的内核函数。u-driver向下调用的请求主要有以下几种[8]:(1)VIRT2PHY,计算u-driver模块中虚拟地址对应的物理地址;(2)UP_INFO,向内核空间提交当前用户态驱动进程信息;(3)DMA_PHY,获取k-driver中DMA缓冲区的物理地址;(4)OPEN、CLOSE等系统调用。
将硬件产生的中断通知给用户程序,这里通过将中断映射到文件描述符来实现这一功能。在Linux系统的/proc文件系统下,每一个中断都对应一个目录[9],目录下包含一些属性文件。通过在中断号对应的目录下增加一个新的属性文件,用来标识是否产生了该中断号对应的中断。当u-driver对该文件执行read()操作时,内核在对应的信号量上执行down()操作,阻塞该read()操作直到中断的产生。硬件产生中断时,首先在内核中断处理函数中屏蔽该中断,然后增加中断映射的文件描述符中的计数,最后在对应的信号量上执行up()操作,使之前阻塞的read()操作返回,返回值为文件描述符中的中断计数,如果返回值大于0,说明产生了硬件中断,则转而去执行u-driver中定义的中断处理函数。
2.4 DMA缓冲区分配方案
为减少数据拷贝次数,u-driver要能够直接访问DMA缓冲区的内容,即实现用户态的DMA缓冲区[10]。这可以通过Linux内核的设备文件/dev/mem和mmap()系统调用来实现。通过open()系统调用打开/dev/mem文件,接着,把k-driver申请的内存的物理地址传送到用户空间,最后通过mmap()将这段物理内存映射到当前进程的地址空间。其中,分配共享内存的关键代码如下:
kaddr = kmalloc(size);
phy_addr = addr – PAGE_OFFSET;
fd = open(“/dev/mem”, O_RDWR);
uaddr = mmap(phy_addr, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
图3为本设计中所采用的DMA缓冲区分配方案的数据拷贝路径图,其中实线是本设计方案的数据拷贝路径,虚线是传统内核态驱动程序的数据拷贝路径。
3 测试
3.1 开发环境搭建
嵌入式开发一般采用宿主机/目标机模式。本设计的开发环境为:宿主机为PC机,网卡为Intel 82579LM千兆网卡,安装Debian 6.0系统,内核版本为2.6.32.5,目标机为S3C2440开发板,网卡为DM9000,在该目标机上移植了2.6.32.2版本的Linux内核,宿主机和目标机之间采用串口和以太网连接,便于调试。
3.2 测试方法
为了衡量用户态驱动对性能的影响,这里使用netperf工具集测试Linux内核自带驱动和本设计实现的用户态驱动程序的性能(吞吐量和CPU占用率)。在目标机分别安装两种驱动程序,在宿主机与目标机之间测试TCP吞吐量。所有的netperf测试都使用默认的接收和发送缓存大小,即接收为87,380字节,发送为16,384字节。测试界面如图4所示。
3.3 测试结果
网络吞吐量如表1所示,目标机作为client,宿主机运行netserver。
CPU占用率如表2所示,统计了作为client端的S3C2440 CPU的占用情况。
测试结果表明了本设计实现的用户态驱动程序对性能的影响十分微小,网络吞吐量与内核态驱动基本相当,CPU占用率方面略有上升,影响不大,达到了预期效果。
4 结束语
Linux作为目前在嵌入式领域使用最为广泛的操作系统,进一步提高其可靠性是目前的研究热点。本文从工程应用出发,研究并设计了ARM平台网卡的用户态驱动程序。实验证明本文设计的用户态驱动程序完全能满足性能要求,同时有效地减少了运行于内核态的驱动代码,大大提高了整个系统的可靠性。通过设计该驱动程序,总结出一种在嵌入式Linux操作系统下编写用户态驱动程序的方法,对类似的其他设备的用户态驱动开发有很大的借鉴意义。
摘要:为了进一步提高嵌入式Linux系统的可靠性,设计和实现了DM9000网卡在ARM平台的用户态驱动程序。通过将影响I/O性能的数据处理操作留在内核态全速运行,而将管理操作例如初始化和配置运行在速度相对较慢的用户态,从而获得了较高的性能和兼容性。实验结果证明,文中设计实现的用户态驱动程序能够满足实际应用的性能需求,同时降低了内核态的代码量,达到了提高整个系统可靠性的目的。
关键词:嵌入式系统,Linux,驱动程序,可靠性
参考文献
[1]颜跃进,秦莹,孔金珠,等.操作系统设备驱动可靠性研究综述[J].计算机工程与科学,2009,31(5):121-125.
[2]Swift M M,Bershad B N,Levy H M.Improving the reliability ofcommodity operating systems[J].ACM TOCS,2005,23(1).
[3]Microsoft.Architecture of the user-mode driver framework[Z].2006.Version 0.7.
[4]Ganapathy V,Renzelmann M J,Balakrishnan A,et al.The designand implementation of microdrivers[J].ASPLOS'08,ACM,2008:168-178.
[5]Ganapathy V,Balakrishnan A,Swift M M,et al.Microdrivers:ANew Architecture for Device Drivers[J].Proc.Of the 11th USE-NIX Workshop on Hot Topics in Operating Systems,USENIX Asso-ciation,2007:1-6.
[6]Corbet J,Rubini A,Kroah-Hartman G.Linux Device Driver[M].O'Reilly Media,2005.
[7]DM9000A Ethernet Controller with General Processor Interface DataSheet[M].Davicom semiconductor Inc,2005.
[8]刘军卫,李曦,陈香兰,等.用户态驱动框架的研究与实现[J].计算机系统应用,2011,20(11):67-71,90.
[9]Love R.Linux Kernel Development[M].机械工业出版社,2011.
网卡驱动安装失败之应对 篇3
俗话说“好马配好鞍”,网卡设备只有在合适驱动程序的支持下,才能充分发挥潜能。按理来说,为网卡设备正确安装驱动程序,并不是多么困难的事情。然而,在平时管理维护网络过程中,笔者多次遇到网卡驱动安装失败的故障,它们发生的原因又各有不同。今天,本文就将一些网卡驱动安装失败的应对方法奉献给大家。
徽标测试阻碍驱动安装
故障现象:
单位有一台HP 7208计算机,由于特殊用途安装了Windows Server 2008系统,尝试在其中按照常规方法安装网卡设备驱动程序的时候,系统屏幕上弹出了“无法通过系统徽标测试”之类的提示信息,网卡驱动安装无法进行下去。
应对办法:
这种错误是由于Windows Server 2008系统默认的较高安全功能引起的,为了保护系统运行安全,该操作系统要求所有安装在其中的驱动或程序必须通过徽标测试服务,否则对安装操作不予放行。但实际上,很多网卡设备的驱动程序版本较低,无法通过Windows Server 2008系统的徽标测试服务,我们只有对系统进行合适设置,取消这项限制,才能解决上述问题。
要做到这一点,可以在Windows Server 2008系统桌面上,依次点击“开始”、“运行”命令,切换到系统运行对话框,输入“services.msc”命令并回车,弹出系统服务列表界面。从中找到“Cryptographic Services”系统服务,并用鼠标双击之,进入对应系统服务属性设置对话框,选择“常规”标签,展开如图1所示的标签设置页面。在这里,能直观地看到该系统服务当前的运行状态。
一般来说,网卡设备驱动程序如果无法通过Windows系统徽标测试时,都是“Cryptographic Services”服务运行状态不正常造成的,这个时候,只要单击“启动”按钮,先将对应系统服务启动运行起来,再将其启动类型调整为“自动”,确认后保存设置操作,这样基本就能成功解除系统徽标测试限制了。
兼容模式阻碍驱动安装
故障现象:
局域网中有一台旧计算机,以前一直使用的是Windows XP系统,在该系统中上网访问很正常。后来,由于某种原因,该计算机中的操作系统被升级到了Windows 7系统,除了网卡设备不能使用外,其他设备驱动程序都正常。于是,使用普通方法在Windows 7系统中安装网卡驱动程序,可总是不成功。
应对办法:
上面的故障主要是网卡驱动程序只适合Windows XP系统,将该版本的驱动安装到Windows 7系统中时,会出现兼容性方面的错误,自然网卡驱动就无法安装成功了。要让Windows XP系统版本的网卡驱动正确安装到Windows 7系统中,必须要对网卡驱动的兼容模式进行合适设置,下面就是具体的设置操作步骤:
首先进入Windows 7系统的资源管理器窗口,选中网卡驱动程序包中的可执行文件,例如“install.exe”或“setup.exe”文件,用鼠标右键单击该文件,点击快捷菜单中的“兼容性疑难解答”命令,弹出兼容性问题诊断向导对话框,如图2所示。
单击其中的“尝试建议的设置”按钮,检查网卡驱动程序能否正常安装,要是无法安装成功的话,再返回如图2所示的设置对话框,按下“疑难解答程序”按钮,之后向导对话框会询问用户注意到了什么问题,选中这里的“问题列表中没有包含我的问题”选项,继续单击“下一步”按钮。
当向导对话框询问此程序以前运行于哪个Windows版本时,我们必须选中Windows XP(Service Pack 2)或(Service Pack 3)系统,单击“下一步”按钮,并将“问题列表中没有包含我的问题”选项同时选中,再按下“启动程序”按钮,这样Windows 7系统就能自动模拟WinXP安装环境,来运行安装不兼容的网卡驱动程序了。
当然,除了通过疑难解答调用兼容模式外,我们也能通过修改网卡驱动文件的兼容性参数,来实现兼容性安装操作。在进行该操作时,只要右击网卡驱动程序,打开它的右键菜单,点选“属性”命令,选择“兼容性”标签,进入兼容性标签设置页面,选中“以兼容模式运行这个程序”,再从对应选项下拉列表中选择Windows XP(Service Pack 2)或(Service Pack 3)系统,确认后保存设置即可。
系统服务阻碍驱动安装
故障现象:
最近,单位新买了一台高性能计算机,在其中安装了Windows Server 2008系统,准备将其配置成单位内网文件服务器使用。由于手头没有原装网卡驱动程序,笔者从网上找到一个msi格式的网卡驱动程序包,用鼠标双击该程序包时,系统屏幕直接出现“Windows Installer服务安装出错”的提示内容,网卡驱动安装操作没有办法正常进行。
应对办法:
这种驱动安装失败故障,主要是msi格式的网卡驱动程序在安装过程中,一定要得到Windows Server 2008系统中的Windows Installer服务支持,如果该系统服务运行不正常,那么驱动安装操作就不能得到对应服务的支持,这样安装操作自然就失败了。现在,只要按照如下操作步骤,恢复Windows Installer系统服务的运行状态,就能解决问题了:
首先在Windows Server 2008系统桌面上依次单击“开始”、“程序”、“管理工具”、“服务器管理器”命令,弹出系统服务器管理器控制台界面。将鼠标定位到该界面左侧显示窗格中的“配置”、“服务”分支上,选中该分支下的Windows Installer服务选项,同时用鼠标双击之,切换到如图3所示的系统服务属性窗口。
其次选择“常规”标签,在对应标签设置页面中,仔细看看目标系统服务的运行状态是否正常,要是发现其运行不正常的话,那网卡驱动程序无法安装的问题肯定是该系统服务造成的,这时只要按下“启动”按钮,将特定系统服务重新启动正常即可。
当然,如果发现Windows Installer系统服务运行状态正常,但网卡驱动还无法安装成功时,那很可能是Windows系统中与目标系统服务有关的文件被损坏了,此时只有到微软官方网站中下载安装Windows Installer服务程序。值得注意的是,在重装Windows Installer服务时,我们可能会看到目标系统服务已经存在的提示,此时不妨打开系统运行对话框,输入“msiexec /unregserver”命令并回车,这样就能顺利进行重新安装操作了。
数字签名阻碍驱动安装
故障现象:
为了体验Windows 8系统的强大功能,笔者为一台性能配置并不怎么高的计算机,安装了Windows 8系统。可是,该系统并不能自动安装好网卡设备驱动程序,尝试用手工方法安装时,系统又出现了“第三方INF不包含数字签名信息”之类的错误,同时强行终止网卡驱动安装操作。
应对办法:
这种故障主要是Windows 8系统默认要求对设备驱动程序进行强制签名引起的,当网卡设备使用的驱动程序恰好没有通过数字签名认证时,那么Windows 8系统自然会阻碍它的安装。要想解决这种故障,只要想办法取消Windows 8系统的驱动程序强制签名功能即可:首先登录进入Windows 8系统Metro界面,将鼠标移动到屏幕右侧区域,弹出Charm菜单,点击“设置”按钮,进入电脑设置页面,选择“常规”标签,在对应标签页面选择最后一项立即重启。当系统弹出启动菜单时,点击“疑难解答”选项,之后进入高级选项设置页面,按下“启动设置”按钮,进入启动设置列表区域,选中“禁用驱动程序强制签名”选项,重新启动计算机后,Windows 8系统日后就不会拦截没有数字签名的网卡驱动程序文件了。
当然,在某些版本的Windows 8系统中,也可以通过修改系统组策略相关配置,来取消对网卡驱动强制签名。在进行该操作时,可以依次点击“开始”、“运行”命令,弹出系统运行对话框,输入“gpedit.msc”命令并回车,开启系统组策略编辑器运行状态。在组策略编辑窗口左侧列表中,将鼠标定位到“本地计算机策略”、“用户配置”、“管理模板”、“系统”、“驱动程序安装”、“设备驱动程序的代码签名”组策略选项上,并用鼠标双击该选项,打开对应选项组策略属性对话框,选中“已启用”选项,确认后保存设置操作。
自动识别阻碍驱动安装
故障现象:
某用户在Windows XP系统环境下,为网卡设备安装驱动程序时,先删除了旧网卡设备,之后重新启动计算机系统,系统弹出“找到新的硬件向导”,根据提示依次选中“是,仅这一次”、“自动安装软件(推荐)”、“否,不要连接到Internet”选项,结果无法安装网卡设备。尝试从网上下载对应型号的网卡驱动程序,将其解压之后,仍然选用自动安装软件功能,还是不能将网卡设备安装好。
应对办法:
上述故障主要是Windows XP系统的自动识别功能不高引起的,此时,我们可以尝试采用手工方式安装网卡设备驱动,或许能提高网卡驱动安装成功率。在采用手工方式安装网卡驱动时,先打开系统的设备管理器窗口,用鼠标右键单击“以太网控制器”选项,从弹出的右键菜单中执行“更新驱动程序”命令,切换到硬件更新向导对话框,选中从指定位置安装,勾选“在搜索中包含这个位置”选项,将浏览驱动路径指向网卡驱动程序的解压目录,点击“下一步”按钮,开始安装以太网控制器驱动程序。
网卡驱动程序 篇4
上篇讲到通过中断,最终网卡调用了b44_rx()来接收报文
对这个函 数中的一些参数,可以这样理解:
bp->rx_cons – 处理器处理到的缓冲区号 bp->rx_pending – 分配的缓冲区个数 bp->rx_prod – 当前缓冲区的最后一个缓冲号
这里要参数B440X的手册了解下寄存器的作用:
#define B44_DMARX_ADDR 0x0214UL /* DMA RX Descriptor Ring Address */ #define B44_DMARX_PTR 0x0218UL /* DMA RX Last Posted Descriptor */ #define B44_DMARX_STAT 0x021CUL /* DMA RX Current Active Desc. + Status */
仅b44_rx()来说, B44_DMARX_ADDR储存了环形缓冲的基地址,B44_DMARX_PTR存储了环形缓冲最后一个缓冲区号,这两个寄存器都由处理来设置; B44_DMARX_STAT储存了状态及网卡当前处理到的缓冲区号,这个寄存器只能由网卡来设置。
网卡中DMA也很重要:
在网卡初始化阶段,b44_open() ->b44_alloc_consistent()
bp->rx_buffers = kzalloc(size, gfp); // size = B44_RX_RING_SIZE * sizeof(struct ring_info) bp->rx_ring = ssb_dma_alloc_consistent(bp->sdev, size, &bp->rx_ring_dma, gfp); // size = DMA_TABLE_BYTES
rx_ring是DMA映射的虚拟地址,rx_rind_dma是DMA映射的总线地址,这个地址将会 写入B44_DMARX_ADDR寄存器,作为环形缓冲的基地址。
bw32(bp, B44_DMARX_ADDR, bp->rx_ring_dma + bp- >dma_offset);
稍后在rx_init_rings() ->b44_alloc_rx_skb()
mapping = ssb_dma_map_single(bp- >sdev, skb->data,RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
将rx_buffers进行DMA映射,并将映射地址存储在rx_ring 中
dp->addr = cpu_to_le32((u32) mapping + bp->dma_offset); // dp是rx_ring中一个
DMA的大致流程 :
不准确,但可以参考下大致意思
网卡读取B44_DMARX_ADDR与B44_DMARX_STAT寄存器,得到下一个处理的struct dma_desc ,然后根据dma_desc中的addr找到报文缓冲区,通过DMA处理器将网卡收到报文拷贝到addr地址处,这个过程CPU是不参与的。
prod – 网卡[硬件]处理到的缓冲区号
prod = br32(bp, B44_DMARX_STAT) & DMARX_STAT_CDMASK; prod /= sizeof(struct dma_desc); cons = bp->rx_cons;
根据上面分析,prod读取B44_DMARX_STAT寄存器,存储网卡当前处理到的缓冲区号;cons存 储处理器处理到的缓冲区号。
while (cons != prod && budget >0) {
处理报文当前时刻网卡接收 到的所有报文,每处理一个报文cons都会加1,由于是环形缓冲,因此这里用相等,而不是大小比较。
struct ring_info *rp = &bp->rx_buffers[cons]; struct sk_buff *skb = rp->skb; dma_addr_t map = rp->mapping;
skb和map保存了当关地址,下面在交换缓冲区后会用到,
ssb_dma_sync_single_for_cpu(bp->sdev, map,RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
CPU取得rx_buffer[cons] 的控制权,此时网卡不能再处理该缓冲区。
rh = (struct rx_header *) skb->data; len = le16_to_cpu(rh->len); …. len -= 4;
CPU取得控制权后,取得报文头,再从报文头取出报文长度len,len-=4表示忽略了最后4节字的CRC,从这里 可以看出,B440X网卡驱动不会检查CRC校验。而每个报文数据最前面添加了网卡的头部信息struct rx_header,这里是28字节。
struct sk_buff *copy_skb; b44_recycle_rx(bp, cons, bp->rx_prod); copy_skb = netdev_alloc_skb(bp->dev, len + 2);
copy_skb作为传送报文的中间量,在第三句为其分配了len + 2的空间(为了IP头对齐,稍后提到)。b44_recycle_rx()函数很关键,它作了如下工作:
1. 将缓 冲区号cons赋值给缓冲区号rx_prod;
2. rx_buffers[cons].skb = NULL
3. 将缓冲区号rx_prod控制权给网卡
简单来说,就是将cons号缓冲区交由CPU处理,而用rx_prod号缓冲区代 替其给网卡使用。
a.b44_recycle_rx前 b. b44_recycle_rx后
以起始状态为例,缓冲区rx_ring分配了512个,但 rx_buffers仅分配了200个,此时cons = 0,rx_prod = 200。执行b44_recycle_rx()后,网卡处理缓冲区变为1~200,而0号缓冲 区交由CPU处理,将报文拷贝,并向上送至协议栈。注意rx_ring和rx_buffer是不同的。
这样做的好处在于,不用等待 CPU处理完0号缓冲区,网卡的缓冲区数保持200,而不会减少,这也是rx_pending = 200的原因所在。
skb_reserve(copy_skb, 2); skb_put(copy_skb, len);
关于skb的操作自己去了解,这里skb_reserve()在报文头部保留了两个字节,我们知道链路 层报头是14字节,正常IP报文会从14字节开始,这样就不是4字节对齐了,所以在头部保留2字节,使IP报文从16字节开始。
skb_copy_from_linear_data_offset(skb, RX_PKT_OFFSET,copy_skb->data, len); skb = copy_skb;
CPU将报文从skb拷贝到copy_skb中,跳过了网卡报头的额外信息,因为这部分信息在上层协议站是没 用的,所以去掉。在函数开始时说过skb是保存了cons号的地址,因为在b44_recycle_rx()后cons号不再引用skb指向的空间,而 仅由skb引用,这样便可以向上层传送,而不用额外复制。
netif_receive_skb(skb); received++; budget--; next_pkt: bp->rx_prod = (bp->rx_prod + 1) & (B44_RX_RING_SIZE - 1); cons = (cons + 1) & (B44_RX_RING_SIZE - 1);
netif_receive_skb()将报文交由上层协议栈处理,这是下 一节的内容,然后CPU处理下一个报文,rx_prod和cons各加1,它们代表的含义开头有说明。
如此循环,直到cons == prod,此时网卡收到的报文都已被CPU处理,更新变量:
教你买网卡与安装网卡 篇5
俗话说,买卖之间,货比三家。虽然我们只是买,但货比三家还是必要的。为了防止以假乱真、找寻低价。当然第一点一定要注意了,找适合你的卡。你的主板若只支持ISA插槽或只有一个PCI却又插上了PCI显卡,那你就买个便宜的ISA网卡吧,既能先用着,又能在以后的升级时,不过于心疼。若你的机子有很多PCI且有空闲,就买个PCI的吧。简单而论就是老机子上ISA新机子用PCI。第二点就是做工精良,只有做工好的卡能尽职尽责、全无余力的为你工作。第三为挑芯片,现在最常见的就是8029和8019了,当然8029是晚推出的亦是较为先进的,然而有些顾客选8019,原因就是8019兼容好。但我个人认为只要是这一两年攒的机子都能上8029。第四点挑接口,象双绞线、细缆,在此我推荐大家买细缆的,传输较双绞线快,且性能较双绞线好,
第五点为挑双单口,双口的网卡较贵,我不赞成买双口的。就相当于电灯的串联,一个坏全部瘫。第六点是挑卖家,一定要找个信誉高人品好的,这样才能在出现问题后能找到有利的技术支持及配套服务。
卡买了还有起决定性作用的网线,网线的种类很多,牌子也让人眼花缭乱。虽说牌子种类繁杂,但大都差不多,只要注意别买个线皮开裂的就行。买完了,心还吊着。赶快回家试试!
网卡驱动程序 篇6
一、接口之选:PCMCIA最为合适
和其他很多外设一样,选购无线上网卡也需要在接口选择方面多加考虑,目前,无线上网卡主要采用PCMCIA、CF以及USB接口,此外也有极少数产品采用SD接口或是Expresscard接口。PCMCIA得到几乎所有笔记本电脑的支持,而且其接口带宽基于PCI总线,速度表现自然是最为出色的。不过平心而论,低带宽需求的无线上网卡并不会对接口带宽提出高要求,因此PCMCIA的优势在于实际使用时可以让无线上网卡完全插入笔记本插槽的内部,基本不会有突出的部分,这样无疑更加安全,不会因为一些意外情况而发生碰撞。CF接口比PCMCIA接口更加小巧,而且通过一款几十元的转接器就能转换成PCMCIA接口,因此这也被誉为是无线上网卡的最佳接口。当然,选择CF接口并不是为了配合笔记本电脑,而是给PDA以及UMPC等设备带来方便。如今,很多PDA都带有CF接口,而且支持数据传输功能,此时结合无线上网卡就能实现很不错的户外移动上网应用。
相对来说,USB接口却并非是理想的选择。以配合笔记本电脑应用为例,USB接口的设备必然无法做到完全插入,此时一旦意外的磕磕碰碰就很容易把无线上网卡弄坏。此外,一般PCMCIA以及CF接口的产品总是更多地为低功耗设计考虑,而USB接口的产品似乎更加偏向于台式机应用,因此往往功耗控制更差一些。当然,选择USB接口的无线上网卡也不是没有好处,灵活兼容于台式机与笔记本电脑,这便是最大的诱惑力。至于SD接口或是Expresscard接口的产品,我们建议大家暂时不用考虑。SD接口的无线上网卡要求设备具有SDIO接口,这只有少数PDA支持,而且价格不菲。至于Expresscard接口,虽说它取代PCMCIA接口的长远趋势勿庸置疑,但是至少目前还显得太过超前。
二、天线选择:可伸缩式最理想
天线是大家在选购无线上网卡时容易忽视的细节,但是这却在实际使用中关系到可靠性与稳定性。市场上的无线上网卡天线分为可伸缩式、可分离拆卸式以及固定式。毫无疑问,前者使用起来是最为方便的,在不使用时可以收起来,不仅不影响美观,而且不会在磕磕碰碰时弄坏。可分离拆卸式是避免磕碰损坏的最佳方案,而且万一弄坏也能很方便地买到备用天线。不过,可分离拆卸式天线最大的不便在于难以保管,且很容易丢失,
当然,部分无线上网卡在信号较好的情况下即便不使用天线也能正常上网,这就显得比较灵活一些。至于固定式天线,大家一定要看看是软天线还是硬天线。软天线一般便于弯折,不容易损坏。而如果是硬天线,那可就得小心看护了。
三、关注传输稳定性与散热表现
对于无线上网卡而言,决定其传输速率和稳定性的关键在于发射芯片。由于目前全球发射模块被几大厂商所垄断,因此不同产品之间的差距实际上并不大。如同手机信号强弱一样,不同的无线上网卡在弱信号处的数据收发能力稍有区别,这与厂商不敢贸然加大发射功率有一定的关系。一般而言,厂商并不会公开无线上网卡的发射功率,因此大家只能根据产品实际试用情况来选择。不过可以肯定的是,现在市面上流行的正规品牌产品中,发射功率基本都是相同的,毕竟厂商也需要遵循有关部门的相关标准。然而,一旦是购买一些水货或是工包产品,那可就得小心一些了,毕竟国内的信号并不如国外那样好,过分注重低发射功率的健康保护也会给户外上网带来一些麻烦。稳定性则是我们另外需要关注的焦点。由于驱动和应用软件方面造成的稳定性因素基本不存在,因为相关驱动的核心内容都是由发射芯片厂商统一提供,而软件开发也不会抬高技术难度和瓶颈。相对来说,发热量才是我们该关心的重点。在狭小的PCMCIA插槽中,无线上网卡如果连续长时间使用,那么其发热量必须足够小,否则就容易导致产品加速老化,甚至频繁掉线。
笔记本如何实现无线上网
使用GPRS无线网卡
对于笔记本而言,采用PCMCIA接口来扩充无线网络是很方便的,目前市场上采用此接口的GPRS无线网卡非常多,价格基本维持在600元左右。GPRS无线网卡很像一部GPRS手机,也具备电话接听能力,并且需要插入中国移动的SIM卡。惟一区别的是,GPRS无线网卡有专用的PCMCIA接口以及驱动程序和拨号软件,整个配置过程十分轻松。在安装完成之后,只要你的SIM卡开通了GPRS服务就可以享受到随时随地无线上网的乐趣了。拨号方法与其他的上网方式差不多,而且具有连接查询功能,可以随时显示流量速率监控信息。
使用CDMA无线网卡
网卡驱动程序 篇7
Digi International旗下的Rabbit品牌重点面向中国市场推出“Mini Core”系列网络连接模块。该“MiniCore”系列产品具有易于使用、体积紧凑、成本低廉和质量可靠等特点, 包括中文版的说明文件、一套用于Dynamic C开发软件的中文版图形用户界面 (GUI) 及本地技术支持。“Mini Core”系列产品具有可互相兼容的以太网与Wi-Fi无线网两个版本, 在开发之时就吸收了许多中国客户的需求意见, 因而可有针对性地帮助中国企业家和设计者将其开发的新产品快速推向市场。“Mini Core”系列产品体积还不到一张普通商务名片的二分之一, 但却为用户提供了灵活性, 可以随时随地将有线或无线网络连接装置接入到产品上。本次推出的RCM5700价格只有20美元, 可以降低笔记本网卡的成本, 后续的RCM5600W无线网卡模块的价格也不会高于50美元。
“Mini Core”系列产品是实时控制、通讯与网络连接应用程序的良好选择, 例如能源管理系统以及智能建筑物自动控制系统。它配置了32个通用输入输出端口、6个串行端口和一个Rabbit 5000微处理器。这些特点使其成为超小型产品中较具成本效益的网络连接解决方案, 既可用于网络连接也可用于控制。以太网版本的“MiniCore”家族的体积较小, 仅为31mm×51mm, 高度仅为3mm。它采用超小型PC IExpress接口, 为用户提供了丰富的嵌入式产品的功能。该家族的产品包括接口相互兼容并且可互相替换的有线RCM5700和Wi-Fi无线RCM5600W。此外, 支持ZigBee和USB且接口可相互兼容版的产品现在也在开发中。系统开发商可以对Mini Core家族的产品进行方便地替换, 以适应任何特定应用程序的连接需要。具有几百种开发模型的Dynamic C低成本的开发工具包现在已经投放市场, 其配备了所有必需的软件和工具, 并且价格较为合理。
详聊无线网卡 篇8
主持人:那么,今天来茶坊的朋友又会是哪位呢?掌声有请田老师,咱们的老朋友!
【专家论道】
主持人:田老师,您好,很高兴又见到您!
专家:我也是啊。
主持人:都是老朋友了,寒暄的话不多说。茶坊品茶都有一个话题,今天想聊聊无线网卡。
专家:无线网卡,这可是一个又新又旧的话题啊。
主持人:又新又旧?为什么这么说呢?
专家:最近大家经常聊到的无线网卡,其实是无线上网卡。我国正式进入3G时代后。网上很多人咨询买什么样的无线网卡好,其实问的就是能直接连接到广域网的无线网卡。而以前常说的无线网卡,是为了让电脑能连接到办公室或者家里的局域网。
主持人:无线广域网卡,无线局域网卡,这就是您说又新又旧的原因啊。
专家:不知今天是谈其中一个还是两个都介绍呢?
主持人:就聊无线局域网卡。之前咱们做过一期关于无线路由的介绍,其实很多人装上了无线路由却还没过上真正的无线生活,因为自己的电脑没办法搜索无线信号,这时候就得考虑加一个无线网卡了。
专家:比起再买一个电脑,加个无线网卡是很实惠的事情了。
主持人:哈哈,是这么回事儿。我注意到无线网卡和无线网卡之间还不一样,它是怎么分类的呢?
专家:按接口来划分类型,是比较流行的做法。有台式机专用的PCI接口网卡,笔记本专用的PCMCIA接口网卡,当然还有很火的USB接口网卡了,然后能内置在笔记本电脑里的MINI-PCI网卡也是一种。
主持人:听您这么一说,我觉得还有另一种分类方式,内置和外接。
专家:呵呵,不错。
主持人:那笔记本选内置的还是外接的网卡有什么分别吗?
专家:外接的话,得随身带着这无线网卡,使用时还会占用插槽,还得注意别把卡给损坏了。无线网卡内置的话省了空间,显得美观。
主持人:那内置网卡的价钱会不会更贵一些?
专家:跟其他网卡差不多。不过想安装内置无线网卡的话,先得确认机身的主板上有没有无线插槽和天线。
主持人:外置无线网卡有三种,这三种有什么分别呢?
专家:台式机使用PCI、USB无线网卡的比较多,而笔记本电脑可以用USB接口,但比较常见的是PCMCIA无线网卡,比较便宜。
主持人:田老师,选无线网卡的话得注意哪些技术参数呢?
专家:网络标准,这是应该考虑的一个因素。目前国内广泛采用的无线标准是802.11g,传输速度有54Mbps。而802.11n标准的传输速度则可以达到300Mbps。选用无线网卡的时候,得注意它的无线标准,无线标准高级的可以兼容低一级的,如果你选的是802.11g标准恐怕就无法满足802.11n的需要了。
主持人:是不是支持802.11n的无线网卡就比支持802.11g的传输速度快呢?
专家:无线网卡的传输速率是大家非常关心的一个问题,谁都希望自己网上冲浪的速度越快越好。但买了一个802.11n的无线网卡并不意味着就能拥有最快的上网享受,产品标称的传输速率往往是理论数据,实际使用时11Mbps的标称速度能达到5Mbps已经很不错了。如果无线路由器不支持802.11n,即使你选择了802.11n的无线网卡,也无法发挥出802.11n的速度。
主持人:所以选择无线网卡,还是要综合考虑。
专家:对。无线网卡好不好,既要看无线标准、传输速率,还得注意接口类型、传输范围、兼容性,它的安全性和价格品牌当然都得考虑。
主持人:传输范围,指的是传输距离吗?这个听起来很重要。
专家:既然用无线网卡摆脱了网线的束缚,大家都希望能随处用电脑,尤其是在一些大房子里,上网的地方离无线路由器比较远,我们就希望无线网卡的最大传输距离大一些再大一些。
主持人:网卡的最大传输距离也是一个标称数据吧。
专家:对,是标称数据。也许这个无线网卡的说明上写着自己的最大传输距离是100米,但在日常生活空间里,无线信号会受到很多干扰,实际距离并没有标称的那么可观。
主持人:如果需要大的传输距离怎么办?
专家:可以借助无线天线。802.11b无线网卡在室外的最大传输距离是300米,在室内是100米,在普通家庭的视野范围内,无线信号能覆盖大部分空间,还是能满足普通用户的需要。
主持人:很多无线设备都会涉及到安全性的问题,不知这无线网卡的情况怎么样?
专家:这是个很好的话题。虽然现在无线设备很多,但大多数家庭用户在购买无线路由、无线网卡的时候,都有意无意地忽视了安全问题。
主持人:现在网络这么发达,人肉这么厉害,黑客这么猖狂,不注重网络安全不行啊。
专家:希望人人都能有你的这种意识啊。
主持人:那无线网卡是怎么保障安全的呢?
专家:无线局域网的安全机制有WEP数据加密、WPA加密、IEEE802.1X验证等,这些加密技术可以保证无线局域网内数据发送、接收的安全性,防止非法用户对网络的入侵。
主持人:我知道WEP加密位数越高,破解难度就越大,也就越安全。
专家:对,是这样。目前大部分无线网卡都支持上面说的那些安全机制,只不过WEP加密的位数不同。支持64/128位WEP加密的占大多数,部分支持152位WEP加密,极少量的产品会支持256位加密。
主持人:要是价钱能接受,我会选择加密位数高的。
专家:话是这么说,但选择无线网卡别忘了先看看无线路由的WEP加密是多少位。如果无线路由是152位的,那无线网卡必须支持152位加密。不能盲目选择哟。
主持人:如今市面上无线网卡的价钱怎么样?我记得几年前一个无线网卡能卖到三四百元呢。
专家:现在的无线网卡三四十元的有、七八十元的有,一两百元的也有,但三四百元的已经不多了。
主持人:哪些牌子比较好呢?
专家:D-Link、TP-Link,这都属于无线设备里的排头兵了,他们的产品性能不错,价格处于较高层次。腾达的无线网卡也有很不错的产品,价格更平民一些。其他像华硕、Netgear、Buffalo等品牌都有相应的产品。
主持人:看来也是一块很有竞争的市场啊。
专家:消费者有需要,厂家当然不会错失商机的。
主持人:好了,今天的【专家论道】又要结束了。非常感谢田老师的到来,想要买无线网卡的朋友们应该对这种产品心里有了大致的轮廓了吧?如果您还有更多的疑问,不妨跟着阿爆一起,走进他的爆料时间,了解更多无线网卡的选购知识。
【阿爆爆料】
阿爆:“阿爆的经验,爆出的智慧”。别看无线网卡只是小小一片,选购起来还真是麻烦,售货员滔滔不绝的介绍更是让你头晕眼花心烦意乱。别急,阿爆这回又要爆几个料,让田老师来戳穿他们忽悠消费者的几个伎俩。
【爆料案例一】无线网卡USB的就是比PCMCIA好?
阿爆:您要买无线网卡?那我推荐这款USB接口的产品,现在最流行USB产品了,你看哪个电子产品不整个USB口在上面?这不仅仅是时尚是潮流,更是技术发展的方向。PCMCIA接口的根本赶不上它。
专家:的确,USB接口有安装方便、即插即用、高速传输、无须供电的优点,兼容性又强,在生活中随处可见,大家都熟知。但PCMCIA接口其实也是即插即用,能够高速传输,这种接口的无线网卡跟笔记本结合起来使用效果更好。PCMCIA接口其实比USB接口功耗更低,更适合笔记本电脑使用。只是PCMCIA接口的普及度不如USB接口,才会给销售者一个忽悠的机会,他们是看准了消费者不太懂。我的建议是,电脑上有PCMCIA接口的话,就买PCMCIA无线网卡,比USB的便宜些,用着也不费事,还能省下个USB接口。如果电脑上根本没有PCMCIA接口,USB就是个不错的选择了。
【爆料案例二】传输距离越大越好?
阿爆:您看我手里的这款无线网卡,牌子不起眼,但性能很出众,室外最大传输距离能到500米,室内也有200米。不管您坐在哪个角落里都能搜得到信号,买无线网卡图什么?不就是随处上网的乐趣吗?!
专家:之前也提到过,最大传输距离只是一个标称数据,一个无线网卡对传输距离的真实表现,还得综合考虑。无线信号以空气为传输介质,在传输过程中会受到大气噪音、环境的干扰,尤其是其他信号,像微波炉、无绳电话、一些无线局域网设备啊。过分看重最大传输距离,就有可能上了一些杂牌产品的当,他们把数据做得很完美,但产品本身性能不稳定,在有干扰的环境下,实际表现还比不过标称数据小的无线网卡。所以,不要迷信最大传输距离,综合考虑才是。
网卡芯片 篇9
主板网卡芯片是指整合了网络功能的主板所集成的网卡芯片,与之相对应,在主板的背板上也有相应的网卡接口(RJ-45),该接口一般位于音频接口或USB接口附近,板载RTL8100B网卡芯片,以前由于宽带上网很少,大多都是拨号上网,网卡并非电脑的必备配件,板载网卡芯片的主板很少,如果要使用网卡就只能采取扩展卡的方式;而现在随着宽带上网的流行,网卡逐渐成为电脑的基本配件之一,板载网卡芯片的主板也越来越多了。在使用相同网卡芯片的情况下,板载网卡与独立网卡在性能上没有什么差异,而且相对与独立网卡,板载网卡也具有独特的优势,
首先是降低了用户的采购成本,例如现在板载千兆网卡的主板越来越多,而购买一块独立的千兆网卡却需要好几百元;其次,可以节约系统扩展资源,不占用独立网卡需要占用的PCI插槽或USB接口等;再次,能够实现良好的兼容性和稳定性,不容易出现独立网卡与主板兼容不好或与其它设备资源冲突的问题。板载网卡芯片以速度来分可分为10/100Mbps自适应网卡和千兆网卡,以网络连接方式来分可分为普通网卡和无线网卡,以芯片类型来分可分为芯片组内置的网卡芯片(某些芯片组的南桥芯片,如SIS963)和主板所附加的独立网卡芯片(如Realtek8139系列)。部分高档家用主板、服务器主板还提供了双板载网卡。板载网卡芯片主要生产商是英特尔,3Com,Realtek,VIA和SIS等等。
如何鉴别与选购网卡 篇10
说起网卡的选购,最有必要谈一谈的就是PC使用的网卡了,因为它的使用范围最广,且使用者并非都是专业人士。PC网卡根据不同的标准可以划分出不同的类别,大致上有以下的3种:
1.按连接速度来划分:按照网卡的连接速度,网卡可分为10M网卡、100M网卡、10M/100M自适应网卡和1000M网卡四种。一般的网络应用,如网吧、局域网游戏网吧、小规模的办公网络等,你可以选择10MB的网卡,毕竟价格比较便宜嘛,而且,对于此类应用,甚至使用ADSL来说,都是够用了。当然,就目前的价格来说,10MB和100MB的网卡在价格上已经相差的很少了,你完全可以选择10/100MB自适应的网卡或者100MB的网卡。在条件允许的情况下,我强烈推荐大家使用10M/100M自适应网卡,它采用一种叫做自动协商的管理机制,可根据网络和对方的速度,自动确定是工作在10Mbps还是在100Mbps下,不需要进行人为的设定。同一品牌的网卡,自适应的比100MB的要稍微贵一些。
2.按接口来划分:网卡为了实现在不同传输介质上的连接,提供了几种不同的接口。网卡的接口有AUI接口(粗缆接口)、BNC接口(细缆接口)和RJ-45接口,
其中AUI接口已几乎绝迹了,单独提供AUI接口的网卡基本上没有;最常见的是BNC和RJ-45的接口。因此,在选购网卡时您一定要看清楚网卡所支持的接口类型,即您需要通过双绞线还是细缆来构建网络,否则购买的网络将无法使用。建议您还是使用RJ-45接口的网卡,毕竟它能提供更高的传输率,而双绞线的价格也已经到了非常普及的程度了,应该不是问题了。
3.按总线类型来划分:网卡根据总线类型来划分可以分为ISA、PCI和ELSA三种。最常见的是ISA和PCI的网卡。由于ISA总线为16位的,PCI总线为32位,因此在速度上PCI网卡有着明显的优势。而且,ISA网卡的CPU占用率比较高,往往会造成系统的停滞。如果您的主板支持PCI插槽的话,建议您还是选购PCI网卡为好。
除了以上的三点以外,在选购网卡的时候我们还应注意以下几个问题:
是否支持自动网络唤醒功能:现在许多MODEM支持自动唤醒功能,当有电话接入时便通过MODEM来启动计算机,不需要人为的干预。同样,在局域网中同样可以实现这种功能。当需要访问网络中的某一台计算机的资源,而被访问者处于关闭状态的时候,可利用网卡的自动唤醒功能,而被访问者在接收到访问信息后便自动启动登录网络。如果您的网络用户需要实现自动唤醒,便可选择具有自动唤醒功能的网卡。
是否支持远程启动:如果您要组建无盘工作站,所购买的网卡必须具有远程启动芯片插槽,而且要配备专用的远程启动芯片。因为远程启动芯片在一般情况下是不能通用的,所以你在购买时,必须购买与自己的网络操作系统相吻合的网卡。
【网卡驱动程序】推荐阅读:
网卡自我总结05-17
学生用无线网卡08-17
3G无线上网卡论文06-18
用单网卡连接两个网段06-07
wifi管家领取wifi上网卡教程07-05
伺服驱动器检测驱动10-09
驱动程序07-12
仪器驱动程序07-28
驱动程序检测08-06
虚拟设备驱动程序07-12