QEMU:将内核模块列入黑名单并不能阻止它在 `lspci` 中显示为可用

QEMU: blacklisting kernel module doesn't prevent it from showing up as available in `lspci`

我正在 QEMU 中工作,并尝试查看来宾是否仍可以在未加载相应内核模块的情况下使用 PCI 设备。

首先,lspci -v 显示以下内容:

00:01.3 Bridge: Intel Corporation ########## PIIX4 ACPI (rev 03)
    Subsystem: Red Hat, Inc Qemu virtual machine
    Flags: medium devsel, IRQ 9
    Kernel modules: i2c_piix4

在尝试删除 i2c_piix4 之前,lsmod 确认它已加载。要删除它,我编辑了 /etc/modprobe.d/blacklist.conf 并添加了行 blacklist i2c_piix4,然后调用了 sudo update-initramfs -urebooted。现在,该模块已从 lsmod 中消失,但仍列在 lspci 下。在 modprobe -r 之后仍然如此。我是否已将其正确列入黑名单,还是我需要添加其他步骤?

lspci 显示 pci 总线上的硬件 - 无论是否加载相应的内核模块。

要删除设备,您可以在 qemu 监视器中通过 id 执行此操作,或者使用 info qtreeinfo qom-tree 找到它并使用 device_del.

将其删除

但是 ps-i440fx 架构不支持删除您的特定设备。

(qemu) info qom-tree /machine/unattached/device[24]
/device[24] (PIIX4_PM)
  /piix4-pm[0] (qemu:memory-region)
  /acpi-cpu-hotplug[0] (qemu:memory-region)
  /acpi-evt[0] (qemu:memory-region)
  /acpi-tmr[0] (qemu:memory-region)
  /apm-io[0] (qemu:memory-region)
  /bus master container[0] (qemu:memory-region)
  /bus master[0] (qemu:memory-region)
  /acpi-pci-hotplug[0] (qemu:memory-region)
  /pm-smbus[0] (qemu:memory-region)
  /acpi-gpe0[0] (qemu:memory-region)
  /i2c (i2c-bus)
  /acpi-cnt[0] (qemu:memory-region)
(qemu)
(qemu) device_del /machine/unattached/device[24]
Device 'PIIX4_PM' does not support hotplugging
(qemu)