1

我目前正在编写 x86-64 内核,需要将 APIC 模式设置为对称 I/O 模式。英特尔的多处理器规范在第 31 页说,要启用此模式,您必须将 01H 写入 IMCR 寄存器。问题是这个寄存器(必须通过 outb/inb 访问)似乎没有记录。如何读取和写入 IMCR?

4

1 回答 1

1

正如@MichaelPetch 在评论中指出的那样,IMCR 寄存器是在 pdf 第 28 页定义的,不知何故我错过了它。引用:

IMCR 由两个读/写或只写 I/O 端口 22h 和 23h 支持,它们分别接收地址和数据。要访问 IMCR,请将值 70h 写入 I/O 端口 22h,这将选择 IMCR。然后将数据写入 I/O 端口 23h。上电默认值为零,将 NMI 和 8259 INTR 线直接连接到 BSP。写入 01h 值会强制 NMI 和 8259 INTR 信号通过 APIC

然而

如果未实施 PIC 模式,则 IMCR 是可选的。MP 特征信息字节的 IMCRP 位(参见第 4 章)使操作系统能够检测 IMCR 是否已实现

MP 浮动表已弃用,因此应避免检查这些表中的标志。而是解析 ACPI MADT 表并检查其中是否设置了 PIC 标志位

于 2020-11-16T16:16:30.477 回答