ClangBuiltLinux / boot-utils

Collection of files for booting Linux kernels
26 stars 7 forks source link

Add support for mounting a shared folder between the host and guest via virtiofs #82

Closed nathanchance closed 1 year ago

nathanchance commented 1 year ago

virtiofs, available in QEMU 5.2 or newer and Linux guests 5.4 or newer, is a more modern way to pass local folders along to QEMU, as it takes advantage of the fact that the folders are on the same machine as the hypervisor.

To use virtiofs, we first need to run virtiofsd, which is included with most base QEMU packages. Once we find it, we run it in the background and connect to it using some QEMU parameters, which were shamelessly taken from the official virtiofs website:

https://virtio-fs.gitlab.io/howto-qemu.html

To use it within the guest (you can use a different path than /mnt/shared but mount -t virtio shared must be used):

  / # mkdir /mnt/shared
  / # mount -t virtiofs shared /mnt/shared
  / # echo "$(uname -a)" >/mnt/shared/foo

On the host:

  $ cat shared/foo
  Linux (none) 6.1.0-rc8-next-20221207 #2 SMP PREEMPT Wed Dec  7 14:56:03 MST 2022 aarch64 GNU/Linux

This does require guest kernel support (CONFIG_VIRTIO_FS=y), otherwise it will not work inside the guest:

  / # mount -t virtiofs shared /mnt/shared
  mount: mounting shared on /mnt/shared failed: No such device

Closes: https://github.com/ClangBuiltLinux/boot-utils/issues/81

nathanchance commented 1 year ago

I just pushed a change to warn when CONFIG_VIRTIO_FS might not be set and print some information about using the folder within the guest. PTAL.

nathanchance commented 1 year ago

I've rebased on latest main, as there have been quite a few changes to the gdb section, which was refactored in 6c414760ec81119c09bcd3c9d9567154d4f3a071.

nathanchance commented 1 year ago

v2: #93