我把十大笔记本电脑排名PCI卸载了怎么办

一、PCI总线系统体系结构

Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性和行为规约,并且详细定义了计算机系统中的各个不同部件之间应该如何正确地进行交互。

无论是在基于Intel芯片的PC机中,或是在基于Alpha芯片的工作站上,PCI毫无疑问都是目前使用最广泛的一种总线接口标准。同旧式的ISA总线不同,PCI将计算机系统中的总线子系统与存储子系统完全地分开,CPU通过一块称为PCI桥(PCI-Bridge)的设备来完成同总线子系统的交互,如图1所示。

图1 PCI子系统的体系结构

由于使用了更高的时钟频率,因此PCI总线能够获得比ISA总线更好的整体性能。PCI总线的时钟频率一般在25MHz到33MHz范围内,有些甚至能够达到66MHz或者133MHz,而在64位系统中则最高能达到266MHz。尽管目前PCI设备大多采用32位数据总线,但PCI规范中已经给出了64位的扩展实现,从而使PCI总线能够更好地实现平台无关性,现在PCI总线已经能够用于IA-32、Alpha、PowerPC、SPARC64和IA-64等体系结构中。

PCI总线具有三个非常显著的优点,使得它能够完成最终取代ISA总线这一历史使命:

  • 在计算机和外设间传输数据时具有更好的性能;
  • 能够尽量独立于具体的平台;
  • 可以很方便地实现即插即用。

图2是一个典型的基于PCI总线的计算机系统逻辑示意图,系统的各个部分通过PCI总线和PCI-PCI桥连接在一起。从图中不难看出,CPU和RAM需要通过PCI桥连接到PCI总线0(即主PCI总线),而具有PCI接口的显卡则可以直接连接到主PCI总线上。PCI-PCI桥是一个特殊的PCI设备,它负责将PCI总线0和PCI总线1(即从PCI主线)连接在一起,通常PCI总线1称为PCI-PCI桥的下游(downstream),而PCI总线0则称为PCI-PCI桥的上游(upstream)。图中连接到从PCI总线上的是SCSI卡和以太网卡。为了兼容旧的ISA总线标准,PCI总线还可以通过PCI-ISA桥来连接ISA总线,从而能够支持以前的ISA设备。图中ISA总线上连接着一个多功能I/O控制器,用于控制键盘、鼠标和软驱。

图2 PCI系统示意图

拿 VGA视频控制器作一个例子,

00 03ff 是它所映射的内存空间地址,占据内存地址空间1024 bytes的位置

0000,很容易看出高8位是总线号也就是0。剩下的0xa0=,可以看出如果低3位表示功能号,那么剩下的10100就是设备号,补全成8位的值就是即0x14.

PCI寻址判断系统结构图


系统中每个PCI设备,包括PCI-PCI桥接器在内,都有一个配置数据结构,它通常位于PCI配置地址空间中。PCI配置头允许系统来标识与控制设备。配置头在PCI配置空间的位置取决于系统中PCI设备的拓扑结构。例如将一个PCI视频卡插入不同的PCI槽,其配置头位置会变化。但对系统没什么影响,系统将找到每个PCI设备与桥接器并使用它们配置头中的信息来配置其寄存器。

典型的办法是用PCI槽相对主板的位置来决定其PCI配置头在配置空间中的偏移。比如主板中的第一个PCI槽的PCI配置头位于配置空间偏移0处,而第二个则位于偏移256处(所有PCI配置头长度都相等,为256字节),其它槽可以由此类推。系统还将提供一种硬件相关机制以便PCI设置代码能正确的辨认出对应PCI总线上所有存在的设备的PCI配置头。通过PCI配置头中的某些域来判断哪些设备存在及哪些设备不存在(这个域叫厂商标志域:

图6.2给出了256字节PCI配置头的结构,它包含以下域:

用来唯一标识设备的数值。Digital 21141快速以太设备的设备标识为0x0009。
此域提供PCI标准定义中此设备的状态信息。
通过对此域的写可以控制此设备,如允许设备访问PCI I/O内存。
此域标识本设备的类型。对于每种类型的视频,SCSI等设备都有标准的分类代码。如SCSI设备分类代码为0x0100。
这些寄存器用来决定和分配此设备可以使用的PCI I/O与PCI内存空间的类型,数量及位置。
PCI卡上的四个物理引脚可以将中断信号从插卡上带到PCI总线上。这四个引脚标准的标记分别为A、B、C及D。中断引脚域描叙此PCI设备使用的引脚号。通常特定设备都是采用硬连接方式。这也是系统启动时,设备总使用相同中断引脚的原因。中断处理子系统用它来管理来自该设备的中断。

本设备配置头中的中断连线域用来在PCI初始化代码、设备驱动以及Linux中断处理子系统间传递中断处理过程。虽然本域中记录的这个数值对于设备驱动毫无意义。但是它可以将中断处理过程从PCI卡上正确路由到Linux操作系统中相应的设备驱动中断处理代码中。


三.PCI驱动程序设计

内核为驱动提供的函数:

从配置区相应寄存器得到I/O区域的基址:

从配置区相应寄存器得到I/O区域的内存区域长度:

从配置区相应寄存器得到I/O区域的内存的相关标志:

PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设备,以及这些设备的参数和属性。

Linux驱动程序通常使用结构(struct)来表示一种设备,而结构体中的变量则代表某一具体设备,该变量存放了与该设备相关的所有信息。好的驱动程序都应该能驱动多个同种设备,每个设备之间用次设备号进行区分,如果采用结构数据来代表所有能由该驱动程序驱动的设备,那么就可以简单地使用数组下标来表示次设备号。

在PCI驱动程序中,下面几个关键数据结构起着非常核心的作用:

这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe( )和卸载设备的函数remove( ):

这个数据结构也在文件include/linux/pci.h里,它详细描述了一个PCI设备几乎所有的硬件信息,包括厂商ID、设备ID、各种资源等:

在用模块方式实现PCI设备驱动程序时,通常至少要实现以下几个部分:初始化设备模块、设备打开模块、数据读写和控制模块、中断处理模块、设备释放模块、设备卸载模块。下面给出一个典型的PCI设备驱动程序的基本框架,从中不难体会到这几个关键模块是如何组织起来的。

/* 指明该驱动程序适用于哪一些PCI设备 */

/* 对特定PCI设备进行描述的数据结构 */

/* 设备文件操作接口 */


/* 加载驱动程序模块入口 */

/* 卸载驱动程序模块入口 */

上面这段代码给出了一个典型的PCI设备驱动程序的框架,是一种相对固定的模式。需要注意的是,同加载和卸载模块相关的函数或数据结构都要在前面加上__init、__exit等标志符,以使同普通函数区分开来。构造出这样一个框架之后,接下去的工作就是如何完成框架内的各个功能模块了。

在Linux系统下,想要完成对一个PCI设备的初始化,需要完成以下工作:

  • 检查PCI总线是否被Linux内核支持;
  • 检查设备是否插在总线插槽上,如果在的话则保存它所占用的插槽的位置等信息。
  • 读出配置头中的信息提供给驱动程序使用。

当Linux内核启动并完成对所有PCI设备进行扫描、登录和分配资源等初始化操作的同时,会建立起系统中所有PCI设备的拓扑结构,此后当PCI驱动程序需要对设备进行初始化时,一般都会调用如下的代码:

驱动程序首先调用函数pci_present( )检查PCI总线是否已经被Linux内核支持,如果系统支持PCI总线结构,这个函数的返回值为0,如果驱动程序在调用这个函数时得到了一个非0的返回值,那么驱动程序就必须得中止自己的任务了。在2.4以前的内核中,需要手工调用pci_find_device( )函数来查找PCI设备,但在2.4以后更好的办法是调用pci_register_driver( )函数来注册PCI设备的驱动程序,此时需要提供一个pci_driver结构,在该结构中给出的probe探测例程将负责完成对硬件的检测工作。

在这个模块里主要实现申请中断、检查读写模式以及申请对设备的控制权等。在申请控制权的时候,非阻塞方式遇忙返回,否则进程主动接受调度,进入睡眠状态,等待其它进程释放对设备的控制权。

PCI设备驱动程序可以通过demo_fops 结构中的函数demo_ioctl( ),向应用程序提供对硬件进行控制的接口。例如,通过它可以从I/O寄存器里读取一个数据,并传送到用户空间里:

/* 将读取的数据传输到用户空间 */

)等操作,Linux内核源码中的driver目录里提供了许多设备驱动程序的源代码,找那里可以找到类似的例子。在对资源的访问方式上,除了有I/O指令以外,还有对外设I/O内存的访问。对这些内存的操作一方面可以通过把I/O内存重新映射后作为普通内存进行操作,另一方面也可以通过总线主DMA(Bus Master DMA)的方式让设备把数据通过DMA传送到系统内存中。

PC的中断资源比较有限,只有0~15的中断号,因此大部分外部设备都是以共享的形式申请中断号的。当中断发生的时候,中断处理程序首先负责对中断进行识别,然后再做进一步的处理。

释放设备模块主要负责释放对设备的控制权,释放占用的内存和中断等,所做的事情正好与打开设备模块相反:

卸载设备模块与初始化设备模块是相对应的,实现起来相对比较简单,主要是调用函数pci_unregister_driver( )从Linux内核中注销设备驱动程序:


1、如果是win8平板电脑,可以直接通过OTG线来连接,一头连平板一头连打印机,根据提示在平板上安装驱动即可,win8系统自动安装驱动。 2、无线连接需要安装支持无线打印的路由器...

那就是一台电脑,没法连啊。

都是大品牌,具体的要具体型号做比较,相对来说华硕的性价比更高一些。

方法很多: (1)买一根或者制作一根交叉网线直接连接就可以(网段和工作组设置匹配);关于交叉网线,可以用度娘去搜索,导出都是正确答案,这里从略。 (2)如果有路由器或者交换机,那么...

好处:看得到真机,而且在电脑城的专卖店产品质量基本没什么问题,若要有问题就是厂家出厂问题,而且也有销售人员给你介绍相关的产品知识(但不排除忽悠可能,现在有很多)坏处:销售人员乱忽悠...

这个很简单的,看你的显示器是什么接口,一般是VGA或者DVI接口,笔记本一般支持VGA接口,你去买根VGA信号线把显示器和笔记本连接起来在按Fn+F3(不一定是F3,要看你的笔记本...

电脑给电脑开wifi 1、需要创建无线网络链接,进入桌面左下角处的开始菜单,点击“控制面板”; 2、然后点击“网络和Internet”; 3、打开“网络和共享中心...

没搞懂你想表达什么,大钟寺蓝景丽家有双叶家具在一层西厅

两步: 1. 采用交连线连接两台机器; 2. 在机器中设置IP地址。 具体如下...使用同一工作组下设置方法:鼠标右键我的电脑=》属性=》计算机名=》更改...

你好!使用快捷键win+e可以调出资源管理器,等同于“我的电脑”。

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

重新装一下主板驱动就能解决了

我要回帖

更多关于 十大笔记本电脑排名 的文章

 

随机推荐