我需要在 qemu 中将文件夹(或其他东西)挂载到文件系统。在 Poky 中挂载 FAT 有效,但在我们自定义的映像上却不行。所以...我尝试了 virtfs,因为它看起来很有希望。我再次以 Poky 为参考,让它先在那里工作。
我使用这个命令:
runqemu slirp nographic qemuparams="-virtfs local,path=$PWD/testfolder,security_model=none,mount_tag=host_share"
不幸的是,它不起作用。它抛出以下错误:
runqemu - ERROR - Failed to run qemu: qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.x2apic [bit 21]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.x2apic [bit 21]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.x2apic [bit 21]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.x2apic [bit 21]
qemu-system-x86_64: warning: TCG doesn't support requested feature: CPUID.01H:ECX.tsc-deadline [bit 24]
qemu-system-x86_64: -virtfs local,path=/home/myname/poky/build/testfolder,security_model=none,mount_tag=host_share: 'virtio-9p-pci' is not a valid device model name
据我从 Google 了解到的信息,第一条消息可以忽略,只有最后一行才重要。
我为此挣扎了一段时间,并试图运行与runqemu
生成完全相同的命令,但却在从 apt-repositories 安装的 QEMU 中运行它。
qemu-system-x86_64 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:35:02 -netdev user,id=net0,hostfwd=tcp:127.0.0.1:2222-:22,hostfwd=tcp:127.0.0.1:2323-:23,tftp=/home/myname/poky/build/tmp/deploy/images/qemux86-64 -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 -drive file=/home/myname/poky/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64-20230504075342.rootfs.ext4,if=virtio,format=raw -usb -device usb-tablet -usb -device usb-kbd -cpu IvyBridge -machine q35 -smp 4 -m 256 -serial mon:stdio -serial null -nographic -kernel /home/myname/poky/build/tmp/deploy/images/qemux86-64/bzImage -append 'root=/dev/vda rw ip=dhcp console=ttyS0 console=ttyS1 oprofile.timer=1 tsc=reliable no_timer_check rcupdate.rcu_expedited=1 ' -virtfs local,path=$PWD/testfolder,security_model=passthrough,mount_tag=host_share
令我惊讶的是,这成功了!启动时没有错误,之后我可以毫无问题地挂载 fs。所以……Yocto 生成的 QEMU 和 apt 构建的 QEMU 之间一定有所不同。
我发现这个问题StackOverflow 上有人遇到了同样的问题。这个人自己编译了 QEMU。因此,我去挖掘了我的 Yocto 和apt 构建日志文件。
我发现确实如上面链接的 SO 问题中的答案所述,virtfs 未启用为编译标志。然后我创建了一个包含以下内容的 bbappend 文件:
PACKAGECONFIG:append = " virtfs"
从详细的构建日志中,我现在可以看到已--enable-virtfs
添加到./configure
并且virtfs : enabled
也显示在概述中。
当然,现在它必须能工作了,对吧?不幸的是,不行...我仍然得到与最初相同的错误...
所以我有点不知所措...还有什么问题?我知道不同版本之间还有许多不同的选项,但我不知道哪些是相关的。