I/O Ports

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

“I/O端口” 通常用作x86的IO总线上特定地址的技术术语。 该总线以固定的顺序和大小提供与设备的通信,并被用作内存访问的替代方法。 在许多其他体系结构上,没有用于此类通信的预定义总线,并且与硬件的所有通信都是通过内存映射的IO完成的。 在现代x86硬件上也越来越多地发生这种情况。


寻找端口列表

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

端口滥用

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

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

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:

Port range Summary
0x0000-0x001F 第一个legacy 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 E9港黑客。在某些模拟器上用于直接将文本发送到主机的控制台。
0x0170-0x0177 辅助 ATA 硬盘控制器。
0x01F0-0x01F7 ATA 硬盘控制器。
0x0278-0x027A 并行端口
0x02F8-0x02FF 第二个 串行端口
0x03B0-0x03DF 用于 IBM VGA,其直接前身以及传统模式下的任何现代视频卡的范围。
0x03F0-0x03F7 软盘控制器
0x03F8-0x03FF 第一个 串行端口

另见

External Links