FEMU模拟器学习笔记

发布时间 2023-08-20 14:11:17作者: 完全感覚Dreamer

 

  • QEMU参数解析

    QEMU的main函数进来后,首先要进行参数解析。一个启动模拟器的命令行如下:

x86_64-softmmu/qemu-system-x86_64 -name "FEMU-ZNSSD-VM" -enable-kvm -cpu host -smp 2 -m 4G -device virtio-scsi-pci,id=scsi0 -device scsi-hd,drive=hd0 -drive file=/home/yao/images/u20s.qcow2,if=none,aio=native,cache=none,format=qcow2,id=hd0 -device femu,devsz_mb=4096,femu_mode=3 -net user,hostfwd=tcp::8080-:22 -net nic,model=virtio -nographic

    QEMU将这些参数分为几大类,每一类构成一个QemuOptsList。。。

 

  • FEMU模块

    FEMU是QEMU的一个device,实际代码中以QOM(Qemu Object Model)的方式实现。QOM是QEMU实现的面向对象编程模式。QEMU是用C语言编写的,而C语言是面向过程的编程语言,无法享受面向对象编程模式针对复杂软件系统在设计模式上的优越性。为解决该问题,QEMU社区通过C语言实现了一套面向对象的编程接口,即QOM,并成功将其应用在QEMU设备模型的管理中。

#/hw/femu/femu.c

static const TypeInfo femu_info = {
    .name          = "femu",
    .parent        = TYPE_PCI_DEVICE,
    .instance_size = sizeof(FemuCtrl),
    .class_init    = femu_class_init,
    .interfaces = (InterfaceInfo[]) {
        { INTERFACE_PCIE_DEVICE },
        { }
    },
};