searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

QEMU模拟i440fx分析

2023-03-17 00:57:33
169
0

介绍

i440fx是intel在90年代发布的主板芯片组,是比较经典的芯片架构。20世纪初,intel推出了更先进的q35芯片组。QEMU主要支持对i440fx和q35的模拟,使用i440fx作为默认架构。本文简单分析QEMU如何模拟i440fx架构。

 

模拟一款设备,首先要看它的ds,从i440fx的ds,可以看到它的架构图如下:

可以看到,这是一个经典的南北桥架构。北桥包括PMC和DBX,主要用来连接CPU/内存等。南桥主要是是piix3,用来桥接pci-isa,连接usb,ide等。南北桥通过PCI总线连接。值得注意的是,中断控制器 I/O APIC 是直接连接到CPU的,意味着设备产生的终端可以直接发送给CPU。

 

查看QEMU的设备结构

bus: main-system-bus
  type System
  dev: hpet, id ""
    gpio-in "" 2
...
  dev: ioapic, id ""
    gpio-in "" 24
    version = 32 (0x20)
    mmio 00000000fec00000/0000000000001000
  dev: i440FX-pcihost, id ""
    pci-hole64-size = 2147483648 (2 GiB)
...
    bus: pci.0
      type PCI
      dev: PIIX4_PM, id ""    #设备用于电源管理
        smb_io_base = 1792 (0x700)
        disable_s3 = 0 (0x0)
...
			dev: piix3-ide, id ""    #IDE设备的控制器,下面可以挂IDE总线,
			        addr = 01.1      #IDE总线下面可以挂IDE设备,如硬盘等
			        romfile = ""
			        romsize = 4294967295 (0xffffffff)
...
			dev: e1000, id ""
	        mac = "52:54:00:12:34:56"
	        netdev = "hub0port0"
...
			dev: VGA, id ""
	        vgamem_mb = 16 (0x10)
	        mmio = true
	        qemu-extended-regs = true
...
			dev: PIIX3, id ""
			        addr = 01.0
			        romfile = ""
			        romsize = 4294967295 (0xffffffff)
...
				bus: isa.0
				          type ISA
				          dev: port92, id ""

 

代码分析

首先要把设备注册到QOM。

设备注册是通过DEFINE_I440FX_MACHINE进行的,定义在pc_piix.c里面。这个函数会调用到pc_init1(), 这是虚拟机初始化的核心函数。

pc_init1主要功能有内存计算/CPU初始化/内存初始化/i440fx初始化/中断初始化。

 

CPU初始化

在开启kvm的情况下,最终会调用到qemu_init_vcpu  -> kvm_start_vcpu_thread,为每个vcpu创建一个线程。

 

i440fx_init

用于对主板初始化。主要实现的功能如下:

 

 

0条评论
0 / 1000
陈****炤
7文章数
1粉丝数
陈****炤
7 文章 | 1 粉丝
原创

QEMU模拟i440fx分析

2023-03-17 00:57:33
169
0

介绍

i440fx是intel在90年代发布的主板芯片组,是比较经典的芯片架构。20世纪初,intel推出了更先进的q35芯片组。QEMU主要支持对i440fx和q35的模拟,使用i440fx作为默认架构。本文简单分析QEMU如何模拟i440fx架构。

 

模拟一款设备,首先要看它的ds,从i440fx的ds,可以看到它的架构图如下:

可以看到,这是一个经典的南北桥架构。北桥包括PMC和DBX,主要用来连接CPU/内存等。南桥主要是是piix3,用来桥接pci-isa,连接usb,ide等。南北桥通过PCI总线连接。值得注意的是,中断控制器 I/O APIC 是直接连接到CPU的,意味着设备产生的终端可以直接发送给CPU。

 

查看QEMU的设备结构

bus: main-system-bus
  type System
  dev: hpet, id ""
    gpio-in "" 2
...
  dev: ioapic, id ""
    gpio-in "" 24
    version = 32 (0x20)
    mmio 00000000fec00000/0000000000001000
  dev: i440FX-pcihost, id ""
    pci-hole64-size = 2147483648 (2 GiB)
...
    bus: pci.0
      type PCI
      dev: PIIX4_PM, id ""    #设备用于电源管理
        smb_io_base = 1792 (0x700)
        disable_s3 = 0 (0x0)
...
			dev: piix3-ide, id ""    #IDE设备的控制器,下面可以挂IDE总线,
			        addr = 01.1      #IDE总线下面可以挂IDE设备,如硬盘等
			        romfile = ""
			        romsize = 4294967295 (0xffffffff)
...
			dev: e1000, id ""
	        mac = "52:54:00:12:34:56"
	        netdev = "hub0port0"
...
			dev: VGA, id ""
	        vgamem_mb = 16 (0x10)
	        mmio = true
	        qemu-extended-regs = true
...
			dev: PIIX3, id ""
			        addr = 01.0
			        romfile = ""
			        romsize = 4294967295 (0xffffffff)
...
				bus: isa.0
				          type ISA
				          dev: port92, id ""

 

代码分析

首先要把设备注册到QOM。

设备注册是通过DEFINE_I440FX_MACHINE进行的,定义在pc_piix.c里面。这个函数会调用到pc_init1(), 这是虚拟机初始化的核心函数。

pc_init1主要功能有内存计算/CPU初始化/内存初始化/i440fx初始化/中断初始化。

 

CPU初始化

在开启kvm的情况下,最终会调用到qemu_init_vcpu  -> kvm_start_vcpu_thread,为每个vcpu创建一个线程。

 

i440fx_init

用于对主板初始化。主要实现的功能如下:

 

 

文章来自个人专栏
clink
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0