如何确定外围设备的端口号?

4
我知道像硬盘驱动器、软盘驱动器等外围设备是通过读写它们的设备控制器上的某些控制寄存器来控制的。
我想知道以下问题:
  • 当这些外围设备插入计算机时,它们的控制寄存器的地址(端口号)是否由它们如何连接到地址总线上决定(即硬连线规则,而不是任何软件)?
  • 谁制定了端口号分配方案?
  • 如果我拿到一台裸机(没有操作系统和许多外围设备),我该如何找出端口号分配,以便使用它们来控制外围设备?
最后,感谢您的耐心回复。
1个回答

3
对于一台“裸机”,即一台相对较新的PC兼容设备,您可以在传统PCI的描述中找到一些答案:
引用:

在一个典型的系统中,固件(或操作系统)在启动时通过PCI配置空间查询所有PCI总线,以了解每个设备的存在以及每个设备需要哪些系统资源(内存空间、I/O空间、中断线等)。然后它分配资源并告诉每个设备它的分配是什么。

PCI配置空间还包含少量设备类型信息,这有助于操作系统选择设备驱动程序,或者至少与用户对话有关系统配置。

...
引用:

最后,PCI配置空间为每个PCI设备提供256字节的特殊配置寄存器访问。每个PCI插槽都有自己的配置空间地址范围。这些寄存器用于配置设备内存和I/O地址范围,以便从事务发起者响应。当计算机首次开机时,所有PCI设备只响应其配置空间访问。计算机BIOS扫描设备并为它们指派内存和I/O地址范围。

一旦您确定了设备的I/O地址,实际的命令代码就高度依赖于设备。希望一些制造商在线提供相关文档。

+1 提到PCI配置寄存器。回答问题,每个总线都不同,一些内存映射由BIOS处理。 - Sam Post
感谢gimel的详细回复。 - smwikipedia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接