📄 plug-and-play-howto.txt
字号:
The Linux Plug-and-Play HOWTO 中文版 作者: David S.Lawyer [1]bf347@lafn.org译者: 杜克石 [2]rock@371.net v0.00, November 1998 _________________________________________________________________ 帮助你理解和使用 PnP 设备. 如何使你的 Linux 支持 PnP. 第一个版本是不完 整的, 但也许对你有用. _________________________________________________________________ 1. 介绍 * 1.1 版权, 商标, 不担保, 和 信用 * 1.2 未来计划: 你也可以帮忙 * 1.3 此 HOWTO 的新版本 2. PnP 怎麽做: 分配 "资源" * 2.1 什麽是 Plug-and-Play (PnP)? * 2.2 计算机如何找设备(和 反过来) * 2.3 IRQ's -- 概述 * 2.4 DMA 通道 * 2.5 Memory 段 * 2.6 两种 "资源" * 2.7 问题 3. Plug-and-Play (PnP) 解决方案 * 3.1 介绍 * 3.2 Linux 需要 PnP * 3.3 总线问题 * 3.4 设置 PnP BIOS 4. 如何对付 PnP 卡 * 4.1 介绍 * 4.2 禁用 PnP ? * 4.3 BIOS 配置 PnP * 4.4 Isapnp * 4.5 修补核心让 Linux 支持 PnP * 4.6 PnP 软件和文档 5. 附录 * 5.1 地址 * 5.2 中断 -- 详述 * 5.3 Isolation _________________________________________________________________ 1. 介绍1.1 版权, 商标, 不担保, 和 信用 本小节请看原文 版权 Copyright (c) 1998 by David S. Lawyer. Please freely copy and distribute (sell or give away) this document. You may create derivative works and distribute them provided you: I. For the case of minor changes and corrections where there exists a current maintainer: Send your proposed changes to the current maintainer first. You may distribute (per II. below) only if the current maintainer neglects to incorporate your changes in a timely manner. If the changes are only to correct typos, you need not wait for a reply from the maintainer before you distribute. II. In all other cases: 1. Make a good faith effort to insure that a copy of the derivative work (including any master copy) gets on the Internet at a well-known (and mirrored) site for free downloading. 2. If you change the license, license the work in the spirit of this license, or use GPL (Free Software Foundation). 3. The major authors become the copyright owners (not to exceed 2). Minor contributions do not make you an author. 4. Make a good faith effort to contact the maintainer (or copyright owners if there is no maintainer) to let them know what you have done. If the changes are extensive, then you should also attempt to make more such contacts (including prior to your project). 5. Give full credit to significant previous authors and contributors although the credits section need not exceed 1% of the length of the document. 商标 If certain words are trademarks, the context should make it clear to whom they belong. For example "MS Windows" (or just "Windows") implies that "Windows" belongs to Microsoft (Micro$oft). 不担保 Much of the info in this HOWTO was obtained from Serial-HOWTO, the Internet, sales clerks, etc. and may be unreliable. While I haven't intentionally tried to mislead you, there are likely a number of errors in this document. Please let me know about them. Since this is free documentation, it should be obvious that neither I nor previous authors can be held legally responsible for any errors. 1.2 未来计划: 你也可以帮忙 请告诉我你的种种想法. 但首先注意, 如果你手中的版本是一个月以前的, 请看 是否有新版本. 此 HOWTO 第一个版本, 0.00, 我甚至没有看书: PnP 体系结构, 也并不完全理解 PnP. 也没有比较二个把 Linux 变成 PnP 操作系统的补丁的不同. 我不会充分解 释 BIOS 如何设置 PnP(更不要说补丁如何做了). 此 HOWTO 是不完整的并且可能 不正确(假如我错了, 请告诉我). 在此 HOWTO 中我使用 ?? 来表示我不知道答 案. 你想改进(重写)和维护此 HOWTO 吗? 我正在找人. 1.3 此 HOWTO 的新版本 此 HOWTO 的新版本可以在 LDP 的镜像站点上找到. 首先看 [3]http://sunsite.unc.edu/LDP/mirrors.html, 当你找到一个近的镜像站点 後, 点击 "Linux Documentation Project" (LDP), 在其它格式 HOWTO 中找. 如 果你仅仅想知道最新版本的日期, 你不必使用镜像站点, 看 [4]http://sunsite.unc.edu/LDP/HOWTO/Plug-and-Play-HOWTO.html 即可. 2. PnP 怎麽做: 分配 "资源"2.1 什麽是 Plug-and-Play (PnP)? Plug-and-Play 就是自动配置(低层)计算机中的插卡和其他设备, 然後告诉对应 的设备都做了什麽. Plug-and-Play 的任务是把物理设备和软件(设备驱动程序) 相配合, 并操作设备, 在每个设备和它的驱动程序之间建立通信通道. 换种说 法, PnP 分配下列资源给设备和硬件: I/O 地址, IRQ, DMA 通道, 内存段. 假如 你不理解这 4 项, 看下面的. 一旦这些资源被分配, 设备(名字在 /dev 目录 中)就准备好被使用(倘若这些物理设备在你的 PC 中). PnP 配置资源, 但仅是一定程度上的配置资源. 尽管使用了 PnP, 许多设备仍不 是被 PnP 来配置. 如调制解调器的配置, 'init string' 被通过 I/O 地址通道 送给调制解调器, 尽管 I/O 地址通道是由 PnP 分配的, 但 'init string' 与 PnP 无关. 设置串口的速度是由用户执行程序来做的而不由 PnP. 所以当说起 PnP 的时候, '资源'意味著资源中的一部分, '配置'意味著某些类型的配置. 2.2 计算机如何找设备(和 反过来) 计算机包括 CPU 来运算, 内存来存储程序和数据. 还有一些设备, 如磁盘驱动 器, 显示卡, 键盘, 网卡, modem 卡, 声卡, 串口和并口, 等等. 还有电源提供 电能, 主板上的各种总线把设备和 CPU 连在一起, 机箱把它们装起来. 过去, 许多设备都是插卡(印刷线路板). 今天, 除了插卡之外, 许多设备已经小 到一块芯片被做在主版上. 主版上的插卡也许包含不止一个设备. 内存有时也被 认为是设备但不是此 HOWTO 中的 plug-and-play. 计算机要正常工作, 每个设备必须在它的驱动程序(它也是操作系统的一部分, 在CPU上运行)控制下运行. 驱动程序与 /dev 目录下的特殊文件联系在一起, 尽 管他们不是真正的文件. 它们有象 hda1, ttyS0, eth1 等这样的名字. 麻烦的是 选择特殊设备的驱动程序, 就说 eth1 吧, 依赖于你使用的网卡的类型. 这样 eht1 就不能分配给除了可以使你安装的网卡正常工作的驱动程序外的其它驱动程 序. 为了控制设备, CPU (在驱动程序的控制下)向设备发送命令和从设备读取信 息. 要这样做, 每个设备驱动程序必须知道设备的接口地址, 比如用于通信的地 址. 知道这样的地址就如同建立了一条通信通道, 即使这个通道是 PC 里的许多 设备共享的数据总线. PC 有 3 类地址空间: 内存, I/O, 和配置(仅限于 PCI 总线). 只有前两个(内 存, I/O)被 PnP 配置. 在 PC 里这3种类型的地址共享同样的总线. (另外: 对于 PCI 总线, 它用于传输数据). 但是由特定电路来告诉设备地址是在 I/O 空间或 在内存空间.(译者注: 其实就是总线控制电路中的内存使能线, 当它为 0 电平 时, 表示当前地址是内存地址, 为 1 电平时, 表示当前地址是 I/O 地址.) 设备 通常使用 I/O 地址空间. 分配 I/O 地址主要有两步. 1. 设置插卡的 I/O 地址,等.(插卡寄存器地址中的一个) 2. 让设备驱动程序知道这些 I/O 地址. 第三步是在 /dev 目录中给设备和它的驱动程序取一个名字, 如 hda, ttyS0, 或 eth1. 前两步就象解决在一条街道上找某人的住宅号码的问题. 你必须知道住宅 号码并且某人必须把号码放在住宅前面, 你才可以找到它. 在计算机中, 驱动程 序必须知道接口地址, 并且硬件必须设置为相同的地址, 当然这些地址应是插卡 寄存器地址中的一个. 这两样都要做, 错误的是有些人仅做了其中一样, 然後却 对计算机找不到设备感到奇怪. 下面解释上面的: [5]IRQ's, [6]DMA 通道 IRQ, DMA 通道, 和 [7]内存地址, 所有这些都叫"资源". 2.3 IRQ's -- 概述 看过下面的简略介绍, 你也许还想看更详细的 [8]中断 -- 详解. 简述: 除了地 址外, 还有中断需要处理(如 IRQ5). 把它叫中断号. 我们在上面已经说过设备驱 动程序为了能通信必须知道插卡的地址. 那麽反过来怎麽办呢? 设备如何与驱动 程序通信呢? 所以设备需要知道驱动程序的地址, 这样设备就可以呼叫驱动程序 了. 例如: 设备接收到一些需要传送到主存的数据, 它需要告诉驱动程序马上来 拿这些数据, 并把数据从设备的缓冲区送到主存. 设备呼叫驱动程序用把一个中断电路连线(总线的一部分)的电平抬高的方法. 有16个这样的连线, 每个连线与一个特定的设备驱动程序关联. 每根连线有一个 特定的 IRQ(Interrupt ReQuest) 号. 设备需要把中断放到恰当的连线上, 并且 驱动程序必须侦听同一连线. 究竟使用哪根连线取决于存贮在设备中的中断号, 此中断号必须被驱动程序知道, 这样它才知道需要侦听那根中断线. 2.4 DMA 通道 DMA 代表 'Direct Memory Access'(直接内存访问). 就是允许设备从 CPU 手中 接管系统总线, 并直接把数据传送到主内存. 通常 CPU 分两步来传送数据: 1. 从设备的 I/O 存储空间读数据, 把数据放在 CPU 内部. 2. CPU 把数据从其内部 送到主内存. DMA 方式通常用一步就可把数据从设备直接送到主内存. 设备硬件 必须内置有这种能力并不是所有的设备都可以使用 DMA 的. 从 DMA 传输占用系 统总线开始的传输过程中 CPU 就不做什麽了. 当一个设备试图进行 DMA 时, 它会发出一个请求(用改变总线的 DMA 请求连线的 电平的方式). DMA 请求也可以用中断的方式来实现, 但会有一定的延时, 所以为 了快速, 就用一种特殊类型的中断 'DMA-请求' 来实现. 象中断一样, 把 'DMA- 请求线' 编号来识别是哪个设备发出的请求. 这些编号就叫 DMA-通道. 因为 DMA 传输使用系统总线(同一时间只能有一个使用), 所以它们实际上用同一个通 道, 编号主要用来识别谁在使用通道. 主板上的硬件寄存器纪录各通道的当前状 态. 要发出一个 DMA 请求, 设备必须知道自己的 DMA 通道号, 通道号由物理设 备存储在自己内部. 2.5 Memory 段 像 I/O 地址一样, 一些设备在主内存中分配有地址. 当你插这样的卡时, 你实际 上也插了一块内存模块(主内存, 不是 I/O 内存). 这段内存被设备和 CPU 共 享(运行设备驱动程序後). 这块内存意味著设备和主内存之间'直接'传输数据. 其实不是真正的传输, 设备把数据放到它自己的内存中同时也就放到了主内存 中. 插卡和设备驱动程序必须知道内存块的地址. 2.6 两种 "资源" 必须把设备驱动程序和他们控制的硬件联系起来. 这由向他们提供相同的资源来 解决. 例如: 串行口使用两个资源: 一个 IRQ 和 一个 I/O 地址. 这些资源必须 提供给设备驱动程序和物理设备两者. 驱动程序(和它的设备)被命名(如 ttlyS1). 地址和 IRQ 号被插卡存储在自己的记忆体中(或主板的一个芯片中). 2.7 问题 PC 体系只提供有限的 IRQ, DMA 通道, I/O 地址,等. 假如只有几种设备并且设 备都使用标准的资源, 把驱动程序和设备联系在一起没什麽问题. 每个设备有一 个固定的资源并且不与机器中的其他设备冲突. 没有两个设备使用相同的 I/O 地 址, IRQ, 等. 编写驱动程序时把这些资源写进去即可. 这样事情就简单了. 但实际情况不是这样. 今天不仅有许多不同的设备且它们极有可能发生冲突, 而 且同时又要使用不只一个同种类型的设备. 例如一个人可能想使用几个不同的磁 盘驱动器, 几个串口, 等等. 所以设备必须有一定的灵活性这样可以把它们设置 为任意的地址, IRQ, 等等. 因为要避开资源冲突. 但是一些 IRQ 和 地址是相当 标准的如时钟和键盘. 它们不需要这样的灵活性. 除了资源冲突之外, 还有一个问题是告诉驱动程序错误的资源信息. 例如: 你根 据猜想在配置文件中输入 IRQ4, 可设备实际使用的是 IRQ5. 这是资源分配的另 一种错误. 资源分配, 如果做的正确, 可以在硬件和它们的驱动程序之间建立通信通道. 例 如, 一个特定的 I/O 地址□围分配给一个设备驱动程序和一块硬件, 那麽就可在 它们之间建立通信通道. 驱动程序可以向设备送命令和信息. 实际上不只一条通 道, 因为驱动程序可用读设备寄存器的方式得到信息. 但是设备不能用这种方式 通信. 分配一个 IRQ, 把它作为驱动程序和设备可以交互的另一条通信通道. 3. Plug-and-Play (PnP) 解决方案3.1 介绍 PnP 把 PnP 资源自动分配给硬件和对应的软件. 就是, 把设备和它们的驱动程序 配对并建立通信通道. 在使用 PnP 之前, 硬件靠跳线, 软件靠配置文件(或类似 的方法)或猜测硬件使用的资源来分配资源. 这样并不能总是正常工作. 完全的 PnP (也不能总是正常工作), 需要 PnP BIOS 和操作系统的配合. 当计算 机开机时 BIOS 会运行来启动. 假如操作系统存储在硬盘上(通常是这样), 那麽
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -