dump_pci_dev();
+
+ {
+ int cmd = PCI_CMD(0, 31, 0, 0xF0);
+ uint32_t rcba = pci_read_config_long(cmd);
+ printk("IO-APIC RCBA: %08x\n", rcba); // 如果读到0xFFFFFFFF其实就代表机器太老了
+ }
+
+
// while (1)
// ;
}
# 使用set -m来启用作业控制,以便在后台启动 QEMU 进程。
set -m
+
+# pc-i440fx-10.1 支持 IDE 但是不支持IO-APIC的RCBA,读到值是0xFFFFFFFF
+# pc-q35-10.1 支持 IO-APIC的RCBA,读到的值是0xFED1C001,但是无法支持IDE
+# 原因是: q35是现代Intel平台(2008年后),原生不支持传统IDE,只支持AHCI/SATA
+# 所以现在的问题是,如果想开启第二颗CPU,来监视系统运行,就得开启 APIC
+# 如果要支持 APIC 就得用 q35 但是它已经不支持 IDE 了,所以就得写AHCI读SATA的代码
+# 当然还有一个次级解决方案:
+# 可以不用 q35 在默认的情况下(不写 -machine),是支持IDE的,也可以通过解析ACPI
+# 得到IO APIC的地址,地址是0xFEC00000,然后用它来初始化IO-APIC。
+
qemu-system-i386 \
-boot d \
-m 128 \