“I/O Ports”的版本间差异

来自osdev
跳到导航 跳到搜索
(创建页面,内容为““I/O端口” 通常用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且与硬件的所有通信都是通过内存映射的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。 == 寻找端口列表 == 作为操作系统开发人员,“您不应…”)
 
 
第1行: 第1行:
“I/O端口” 通常用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且与硬件的所有通信都是通过内存映射的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。
“I/O端口” 通常是用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且它们与硬件的所有通信都是通过映射到内存地址的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。




== 寻找端口列表 ==
== 寻求端口列表 ==
作为操作系统开发人员,“您不应该寻找这个”。“标准化” I/O端口仅在某些情况下使用,例如PCI之前存在的硬件 (AT和兼容等)。) PC硬件。 使用 “标准化” I/O端口的设备示例是 [[软盘控制器 | 软盘驱动器]],[[串行端口 | 串行]] 和 [[并行端口 | 并行]] 端口,但是,大多数端口都是由插件卡 {{其中}} 声明的,您可能没有,有些 {{其中}} 甚至是通过PNP分配的,这意味着任何端口都可以用于所讨论的设备。 如果您想访问一个设备,您需要查找有问题的设备的详细信息,如果涉及某个固定端口,它会告诉您。 将端口完整映射到设备在技术上是不可行的,因为您将无法访问它。
作为操作系统开发人员,“你不应该主动寻求它”。 I/O端口仅在某些情况下使用,例如PCI之前存在的PC硬件 (AT和兼容设备等)。 使用 “标准化” I/O端口的设备的例子有 [[Floppy Disk Controller | 软盘驱动器]],[[Serial Ports| 串行]] 和 [[Parallel port| 并行]] 端口,但是大多数端口都是由你可能都没有的插卡 {{which}} 声明的,有些 {{which}} 甚至是通过PNP分配的,这意味着任何端口都可以用于所讨论的设备。 如果你想访问一个设备,你需要查找有问题的设备的详细信息,如果涉及某个固定端口,它会告诉你。 将端口事先完整映射到设备在技术上是不可行的,因为你将无法访问它。


== 端口滥用 ==
== 端口滥用 ==
一些设备 {{其中}} 便宜,并且不解码所讨论的I/O端口的所有地址位 (仅底部12或14)。这意味着最多有16个端口地址映射到同一设备。 That means that there are up to sixteen port addresses mapping to the same device.
一些较为廉价的设备 {{which}} ,并且不解码所讨论的I/O端口的所有地址位 (仅底部12或14)。 这意味着最多有16个端口地址映射到同一设备。
类似地,某些设备已选择通过使用稀疏寄存器文件来避免与此类设备发生冲突。 底部位将定义为常量,而 “顶部位” 将用于索引。 您将获得端口编号 <tt>0x82E8</tt> 、 <tt>0x84E8</tt> 、 <tt>0x86E8</tt> 等等。 这样的ISA设备通常容易干扰 [[PCI]] 分配的IO地址,因为它们的扩展。
类似地,某些设备已选择通过使用稀疏寄存器文件(sparse register file)来避免与此类设备发生冲突。 底部位被定义为常量,而 “顶部位” 用于索引。 你将获得端口编号 <tt>0x82E8</tt> 、 <tt>0x84E8</tt> 、 <tt>0x86E8</tt> 等等。 这样的ISA设备通常因为它们的扩展容易干扰 [[PCI]] 分配的IO地址。


旧设备的现代实现 (通常是IDE和VGA控制器) 具有一种实现,该实现被提及与移动寄存器即插即用,但它们仍然能够侦听遗留端口并做出相应的响应。
旧设备的现代实现 (通常是IDE和VGA控制器) 具有一种实现,该实现会被当作带移动寄存器的即插即用(plug-and-play )设备提及,但它们仍然能够侦听遗留端口并做出相应的响应。


== The list ==
== 列表 ==
If you have found a port number and you are still wondering what it's meant to do, here's a list of the most common ports:
如果你遇到了一个端口号,仍想知道它的含义,这里列出最常见的端口:
{| {{Wikitable}}
{| {{Wikitable}}
|-
|-
!Port range
!端口范围
!Summary
!简要说明


|-
|-
|0x0000-0x001F
|0x0000-0x001F
| 第一个legacy [[ISA DMA | DMA控制器]],通常用于转移到软盘。
| 第一个遗留的 [[ISA DMA | DMA控制器]],通常用于软盘传输。


|-
|-
第56行: 第56行:
|-
|-
|0x00C0-0x00DF
|0x00C0-0x00DF
| 第二个 [[DMA]] 控制器,常用于soundblasters
| 第二个 [[DMA]] 控制器,常用于soundblasters设备


|-
|-
|0x00E9
|0x00E9
| [[Bochs的家 | E9港黑客]]。在某些模拟器上用于直接将文本发送到主机的控制台。
| [[Bochs | Port E9 Hack]]。在某些模拟器上用于直接将文本发送到主机的控制台。


|-
|-
第80行: 第80行:
|-
|-
|0x03B0-0x03DF
|0x03B0-0x03DF
| 用于 [[VGA硬件 | IBM VGA]],其直接前身以及传统模式下的任何现代视频卡的范围。
| 用于 [[VGA Hardware| IBM VGA]],其直接前身以及传统模式下的任何现代视频卡的范围。


|-
|-
第95行: 第95行:


=== External Links ===
=== External Links ===
* [http://bochs.sourceforge.net/techspec/PORTS.LST Bochs' map of I/O ports to functions]
* [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)来避免与此类设备发生冲突。 底部位被定义为常量,而 “顶部位” 用于索引。 你将获得端口编号 0x82E80x84E80x86E8 等等。 这样的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 CMOSRTC 寄存器
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 第一个 串行端口

另见

External Links