我知道通过在设备控制器上读/写某些控制寄存器来控制硬件驱动程序,软盘驱动程序等外围设备。
我想知道以下问题:
最后和往常一样,感谢您的耐心和回复。 8 ^)
答案 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键盘等。我可以想象在今天的系统上,这些端口号仅用于向后兼容。