“I/O Ports”的版本间差异
(创建页面,内容为““I/O端口” 通常用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且与硬件的所有通信都是通过内存映射的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。 == 寻找端口列表 == 作为操作系统开发人员,“您不应…”) |
|||
第1行: | 第1行: | ||
“I/O端口” | “I/O端口” 通常是用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且它们与硬件的所有通信都是通过映射到内存地址的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。 | ||
== | == 寻求端口列表 == | ||
作为操作系统开发人员,“你不应该主动寻求它”。 I/O端口仅在某些情况下使用,例如PCI之前存在的PC硬件 (AT和兼容设备等)。 使用 “标准化” I/O端口的设备的例子有 [[Floppy Disk Controller | 软盘驱动器]],[[Serial Ports| 串行]] 和 [[Parallel port| 并行]] 端口,但是大多数端口都是由你可能都没有的插卡 {{which}} 声明的,有些 {{which}} 甚至是通过PNP分配的,这意味着任何端口都可以用于所讨论的设备。 如果你想访问一个设备,你需要查找有问题的设备的详细信息,如果涉及某个固定端口,它会告诉你。 将端口事先完整映射到设备在技术上是不可行的,因为你将无法访问它。 | |||
== 端口滥用 == | == 端口滥用 == | ||
一些较为廉价的设备 {{which}} ,并且不解码所讨论的I/O端口的所有地址位 (仅底部12或14)。 这意味着最多有16个端口地址映射到同一设备。 | |||
类似地,某些设备已选择通过使用稀疏寄存器文件(sparse register file)来避免与此类设备发生冲突。 底部位被定义为常量,而 “顶部位” 用于索引。 你将获得端口编号 <tt>0x82E8</tt> 、 <tt>0x84E8</tt> 、 <tt>0x86E8</tt> 等等。 这样的ISA设备通常因为它们的扩展容易干扰 [[PCI]] 分配的IO地址。 | |||
旧设备的现代实现 (通常是IDE和VGA控制器) | 旧设备的现代实现 (通常是IDE和VGA控制器) 具有一种实现,该实现会被当作带移动寄存器的即插即用(plug-and-play )设备提及,但它们仍然能够侦听遗留端口并做出相应的响应。 | ||
== | == 列表 == | ||
如果你遇到了一个端口号,仍想知道它的含义,这里列出最常见的端口: | |||
{| {{Wikitable}} | {| {{Wikitable}} | ||
|- | |- | ||
! | !端口范围 | ||
! | !简要说明 | ||
|- | |- | ||
|0x0000-0x001F | |0x0000-0x001F | ||
| | | 第一个遗留的 [[ISA DMA | DMA控制器]],通常用于软盘传输。 | ||
|- | |- | ||
第56行: | 第56行: | ||
|- | |- | ||
|0x00C0-0x00DF | |0x00C0-0x00DF | ||
| 第二个 [[DMA]] | | 第二个 [[DMA]] 控制器,常用于soundblasters设备 | ||
|- | |- | ||
|0x00E9 | |0x00E9 | ||
| [[ | | [[Bochs | Port E9 Hack]]。在某些模拟器上用于直接将文本发送到主机的控制台。 | ||
|- | |- | ||
第80行: | 第80行: | ||
|- | |- | ||
|0x03B0-0x03DF | |0x03B0-0x03DF | ||
| 用于 [[ | | 用于 [[VGA Hardware| IBM VGA]],其直接前身以及传统模式下的任何现代视频卡的范围。 | ||
|- | |- | ||
第95行: | 第95行: | ||
=== External Links === | === External Links === | ||
* [http://bochs.sourceforge.net/techspec/PORTS.LST | * [http://bochs.sourceforge.net/techspec/PORTS.LST bochs的I/O端口到功能的映射] | ||
[[Category:X86]] | [[Category:X86]] |
2022年1月21日 (五) 01:53的最新版本
“I/O端口” 通常是用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且它们与硬件的所有通信都是通过映射到内存地址的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。
寻求端口列表
作为操作系统开发人员,“你不应该主动寻求它”。 I/O端口仅在某些情况下使用,例如PCI之前存在的PC硬件 (AT和兼容设备等)。 使用 “标准化” I/O端口的设备的例子有 软盘驱动器, 串行 和 并行 端口,但是大多数端口都是由你可能都没有的插卡 [待列出?] 声明的,有些 [待列出?] 甚至是通过PNP分配的,这意味着任何端口都可以用于所讨论的设备。 如果你想访问一个设备,你需要查找有问题的设备的详细信息,如果涉及某个固定端口,它会告诉你。 将端口事先完整映射到设备在技术上是不可行的,因为你将无法访问它。
端口滥用
一些较为廉价的设备 [待列出?] ,并且不解码所讨论的I/O端口的所有地址位 (仅底部12或14)。 这意味着最多有16个端口地址映射到同一设备。 类似地,某些设备已选择通过使用稀疏寄存器文件(sparse register file)来避免与此类设备发生冲突。 底部位被定义为常量,而 “顶部位” 用于索引。 你将获得端口编号 0x82E8 、 0x84E8 、 0x86E8 等等。 这样的ISA设备通常因为它们的扩展容易干扰 PCI 分配的IO地址。
旧设备的现代实现 (通常是IDE和VGA控制器) 具有一种实现,该实现会被当作带移动寄存器的即插即用(plug-and-play )设备提及,但它们仍然能够侦听遗留端口并做出相应的响应。
列表
如果你遇到了一个端口号,仍想知道它的含义,这里列出最常见的端口:
端口范围 | 简要说明 |
---|---|
0x0000-0x001F | 第一个遗留的 DMA控制器,通常用于软盘传输。 |
0x0020-0x0021 | 第一个 可编程中断控制器 |
0x0022-0x0023 | 访问Cyrix处理器的特定于模型的寄存器。 |
0x0040-0x0047 | PIT (可编程间隔定时器) |
0x0060-0x0064 | “8042” PS/2控制器 或其前身,处理键盘和鼠标。 |
0x0070-0x0071 | CMOS 和 RTC 寄存器 |
0x0080-0x008F | DMA (页面寄存器) |
0x0092 | 快速 A20 门寄存器的位置 |
0x00A0-0x00A1 | 第二 PIC |
0x00C0-0x00DF | 第二个 DMA 控制器,常用于soundblasters设备 |
0x00E9 | Port E9 Hack。在某些模拟器上用于直接将文本发送到主机的控制台。 |
0x0170-0x0177 | 辅助 ATA 硬盘控制器。 |
0x01F0-0x01F7 | 主 ATA 硬盘控制器。 |
0x0278-0x027A | 并行端口 |
0x02F8-0x02FF | 第二个 串行端口 |
0x03B0-0x03DF | 用于 IBM VGA,其直接前身以及传统模式下的任何现代视频卡的范围。 |
0x03F0-0x03F7 | 软盘控制器 |
0x03F8-0x03FF | 第一个 串行端口 |