首页 » Linux » QEMU在ISA方式下运行段错误的解决方法
十二
03

最近在用QEMU做关于x86平台最小化相关的项目,需要用到QEMU的”无PCI总线模式”,即”ISA总线模式”,相关的执行命令为

qemu -M isapc …

但是用上述命令启动qemu后,立即报Segmentation fault,即段错误,然后终止。调查一番后,发现原来是QEMU 0.13.0的一个bug,是由于ISA模式下,i440fx_state指针未初始化导致的。

解决方法很简单,可以自己编辑hw/pc_piix.c文件,在大概105行的位置,”pci_bus = NULL;”和”isa_bus_new(NULL);”两句之间加入”i440fx_state = NULL;”,然后重新编译即可。另外提供patch如下

diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 812ddfd..34c65d5 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -103,6 +103,7 @@ static void pc_init1(ram_addr_t ram_size,
         pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, isa_irq, ram_size);
     } else {
         pci_bus = NULL;
+        i440fx_state = NULL;
         isa_bus_new(NULL);
     }
     isa_bus_irqs(isa_irq);

参考文献

http://www.mail-archive.com/qemu-devel@nongnu.org/msg39372.html

, ,

发表评论