【问题标题】:How to determine the port numbers for peripheral devices?如何确定外围设备的端口号?
【发布时间】:2010-04-25 12:54:36
【问题描述】:

我知道诸如硬盘驱动器、软盘驱动器等外围设备是通过在其设备控制器上读/写某些控制寄存器来控制的。

我想知道以下问题:

  • 当这些外围设备插入计算机时,它们的控制寄存器的地址(端口号)是否由它们如何连接到地址总线(即硬接线 em> 规则,而不是任何软的东西)?
  • 端口号分配方案由谁制定?
  • 如果给我一台裸机(没有操作系统且有许多外围设备),我如何确定端口号分配,以便我可以使用它们来控制外围设备。

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

【问题讨论】:

    标签: c assembly io operating-system


    【解决方案1】:

    对于“裸机”是比较新的PC兼容机,可以在Conventional PCI描述中找到一些答案:

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

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

    ...

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

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

    【讨论】:

    • +1 用于提及 PCI 配置寄存器。更多关于 OP 的问题,每条总线都是不同的,一些内存映射由 BIOS 处理
    • 感谢 gimel 的详细回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2015-08-28
    • 2012-07-14
    • 2016-02-06
    相关资源
    最近更新 更多