要弄清楚 Linux PCI 设备驱动,首先要明白,所谓的 Linux PCI 设备驱动实际包括 Linux PCI 设备驱动和设备本身驱动两部分。
不知道读者理不理解这句话,本人觉得这句话很重要,对于 PCI、USB 这样的驱动来说,必须要理解这个概念,才能明白该如
何看待 Linux 下的 PCI 和 USB 以及类似的总线型的驱动。
在 http://tldp.org/LDP/tlk/dd/pci.html 这篇文章里(整本书叫做 The Linux Kernel,中文翻译
见 http://oss.org.cn/ossdocs/linux/kernel/本文也参考了该中文翻译) 提到了:
Linux PCI 初始化代码逻辑上分为三个部分:
(1)PCI 设备驱动程序
这个伪设备驱动程序从总线 0 开始查询 PCI 系统并且定位系统中所有的 PCI 设备和 PCI 桥。它建立一个
可以用来描述这个 PCI 系统拓朴层次的数据结构链表。并且对所有的发现的 PCI 桥编号。
(2)PCI BIOS
这个软件层提供在 bib-pci-bios 归约中描述的服务。虽然 Alpha AXP 不提供 BIOS 服务,在其 Linux
版本中包含了相应的功能。
(3)PCI Fixup
与特定系统相关的 PCI 初始化修补代码
而这里主要就是探讨 Linux PCI 设备驱动,会在最后列出一段包含设备本身驱动的示例代码,仅供参考。
一、概述及简介
PCI(Periheral Component Interconnect)有三种地址空间:PCI I/O 空间、PCI 内存地址空间和 PCI 配置空间。其中,PCI
I/O 空间和 PCI 内存地址空间由设备驱动程序使用,而 PCI 配置空间由 Linux 内核中的 PCI 初始化代码使用,这些代码用于配
置 PCI 设备,比如中断号以及 I/O 或内存基地址。对于写 Linux 设备驱动来说,要大致了解 Linux 内核已经帮我们做了哪些工
作,而我们要完成的是哪些工作,后者就是我们写驱动时要完成的工作。所以这里的 PCI 设备驱动就是要大致描述对于 PCI 设
备驱动,Linux 内核都帮我们做了什么(主),接着就是我们应该完成什么(次)。
(1)Linux 内核做了什么
简单的说,Linux 内核主要就做了对 PCI 设备的枚举和配置;这些工作都是在内核初始时完成的。
枚举:对于 PCI 总线,有一个叫做 PCI 桥的设备用来将父总线与子总线连接。作为一种特殊的 PCI 设备,PCI 桥主要包括以
下三种:
(1)Host/PCI 桥: 用于连接 CPU 与 PCI 根总线,第 1 个根总线的编号为 0。在 PC 中,内存控制器也通常被集成到 Host/PCI
桥设备芯片中,因此 Host/PCI 桥通常也被称为“北桥芯片组(North Bridge Chipset)”。
(2)PCI/ISA 桥: 用于连接旧的 ISA 总线。通常,PCI 中类似 i8359A 中断控制器这样的设备也会被集成到 PCI/ISA 桥设备中。
因此,PCI/ISA 桥通常也被称为“南桥芯片组(South Bridge Chipset)”
评论1
最新资源