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

时间:2010-04-25 12:54:36

标签: c assembly operating-system

我知道通过在设备控制器上读/写某些控制寄存器来控制硬件驱动程序,软盘驱动程序等外围设备。

我想知道以下问题:

  • 当这些外围设备插入计算机时,它们的控制寄存器的地址(端口号)是由它们连接到地址总线的方式决定的(即硬接线
  • 规则,而不是任何软件)?
  • 谁制定了端口号分配方案?
  • 如果给我一台裸机(没有操作系统和许多外围设备),我怎么能找出端口号分配,这样我就可以用它来控制外围设备的发现。

最后和往常一样,感谢您的耐心和回复。 8 ^)

2 个答案:

答案 0 :(得分:3)

对于作为相对较新的PC兼容机器的“裸机”,您可以在Conventional PCI说明中找到一些答案:

  

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

     

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

...

  

最后,PCI configuration space可以访问每个PCI设备256字节的特殊配置寄存器。每个PCI插槽都有自己的配置空间地址范围。寄存器用于配置设备内存和它们应从事务启动器响应的I / O地址范围。首次打开计算机时,所有PCI设备仅响应其配置空间访问。计算机BIOS扫描设备并为其分配内存和I / O地址范围。

一旦为设备建立了I / O地址,实际的命令代码就是高度特定于设备的。希望有些制造商在线提供相关文档。

答案 1 :(得分:0)

我认为I / O端口号主要由主板的芯片组确定(或分配)。我进一步假设最初的IBM PC架构使用了其他制造商接管的特定任务,以便符合IBM PC标准。

AFAIK,并非所有设备都使用固定的I / O端口号。这尤其正确,因为更现代的总线(例如从PCI开始)允许重新配置特定设备使用的端口范围。您可能需要研究P'n'P技术以了解更多信息。

AFAIK,固定的I / O端口号主要用于标准(传统)组件,例如ATA(IDE)HDD和FDD控制器,PS / 2键盘等。我可以想象在今天的系统上,这些端口号仅用于向后兼容。