qemu中使用 9p virtio, 支持 host 和 guest 中共享目录

2023-05-16


title: qemu中使用 9p virtio, 支持 host 和 guest 中共享目录
date: 2018-09-30 19:24
author: gatieme
tags: qemu
categories:
- qemu
thumbnail:
blogexcerpt: 在使用qemu调试内核的时候, 如果没有网络,想要部署点驱动或者程序上去都需要重新制作文件系统,本文讲解了如何通过 9p virtio fs 实现在 qemu 和 host 机器上共享文件和目录。


CSDNGitHubHexo
qemu中使用 9p virtio, 支持 host 和 guest 中共享目录AderXCoding/system/tools/qemu/0001-9p_virtioKernelShow-(gatieme.github.io)

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦


#1 问题描述

使用 qemu 调试内核是很方便的,但是我们有时候想传点驱动或者程序上去跑一下子,都需要重新制作和打包文件系统,这样花费了我们的精力,也很烦。

那有没有什么办法能够在 qemu 和 host 机器之间共享文件呢,这样我们就省去了很多工作量。

于是 9p virtio fs 就登场了

#2 问题分析

9p 是啥,网络文件系统,用于共享目录。当然,qemu中使用9p是用于host和guest中共享目录,也不需要网络的支持,而是需要virtio的支持。

#3 qemu 使用 9p virtio实现共享目录

##3.1 qemu 支持和设置 virtfs

###3.1.1 qemu 启动参数添加 virfts

qemu 启动参数需要添加 :

-fsdev local,security_model=passthrough,id=fsdev0,path=/tmp/share \
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare

其中 pathhost 本地的共享目录

然后提示:

'virtio-9p-pci' is not a valid device model name

需要重新编译 qemu, 编译时添加额外的 configure 参数 --enable-virtfs

###3.1.2 qemu 支持 virtfs

./configure --enable-kvm --enable-virtfs --prefix=/opt/software/toolchain/qemu

注意 qemu 支持 virtfs 需要 libcaplibattr 等依赖库.

./configure --enable-kvm --enable-virtfs --prefix=/opt/software/toolchain/qemu                            !2818

ERROR: VirtFS requires libcap devel and libattr devel

CentOS 可以使用如下命令安装

sudo yum install -y libcap-devel
sudo yum install -y libattr-devel

编译安装 qemu 后, 再运行, 可以了.

##3.2 guest 支持和设置 virtfs

###3.2.1 在 guest 中挂载 host 共享的目录

mkdir /tmp/host_files
mount -t 9p -o trans=virtio,version=9p2000.L hostshare /tmp/host_files

如果提示 :

mount: unknown filesystem type '9p'

则说明构建的 guest 内核不支持 9p-virtio.
需要开启对应的内核选项, 并重新编译.

###3.2.2 需要在 kernel 中添加 9p 的支持

CONFIG_NET_9P=y
CONFIG_9P_FS=y
CONFIG_VIRTIO_PCI=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_NET_9P_DEBUG=y (Optional可选)

然后就可以使用了, 如果再加上 virtio console 的支持, 那么既有 shell, 又可以传输文件
基本可以代替 adb 的常用功能了.

最后, 一切就绪之后, 启动 qemu, 就可以看到目录正常挂载了.

host 机器的共享目录

host 机器的共享目录

guest 机器的挂载点

guest 机器的挂载点

#4 参考

qemu启动命令

kernel配置

qemu添加configure选项

qemu中使用9p,支持host和guest中共享目录

Qemu share folder - 9pnet_virtio: no channels available for device

Documentation/9psetup

Linux-KVM-9P_virtio


  • 本作品/博文 ( AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017 ), 由 成坚(gatieme) 创作.

  • 采用知识共享许可协议<a rel="license"href=“http://creativecommons.org/licenses/by-nc-sa/4.0/”>知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名成坚gatieme ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的.

  • 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问,请与我联系.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qemu中使用 9p virtio, 支持 host 和 guest 中共享目录 的相关文章

  • 如何使用QEMU和KGDB调试Linux内核?

    我已经能够使用以下方式启动基于 powerpc 的系统 具体来说是 MPC8544DS 来调用 qemu v1 7 0 qemu system ppc M mpc8544ds m 512 kernel zImage s nographic
  • 查询 DNS 服务记录以查找主机名和 TCP/IP

    在一篇关于生命科学标识符 see LSID Tester 用于测试生命科学标识符解析服务的工具 罗德里克 DM 佩奇博士写道 给定 LSID urn lsid ubio org namebank 11815 在 DNS 中查询 SRV 记录
  • Android Studio 模拟器卡在 Google 徽标上

    我正在尝试在 Android Studio 模拟器中运行我的应用程序 模拟器已打开但卡在 Google 徽标加载中 我能做些什么 我的电脑是低端的 如何才能快速运行模拟器 我还在模拟器设置中减小了 RAM 的大小 但这并不能解决我的问题 请
  • 如何在 QEMU 用户模式下 GDB 单步调试动态链接的可执行文件?

    例如 对于 ARM 如果我静态编译 一切正常 sudo apt get install gdb multiarch gcc arm linux gnueabihf qemu user printf include
  • 实现自定义 u-boot 命令

    我想添加自定义命令命令u boot可以是一个简单的 hello world 命令 搜索后我发现了这个链接Yocto u boot 自定义命令它说看的地方timer命令输入cmd misc c作为起点 我怎么带这个timer命令到我的 u b
  • 升级到 macOS Catalina 后 Qemu 没有响应

    将我的 Mac 升级到 Catalina 后 我无法再使用 qemu 每当我尝试启动它时 它就会挂起 当 qemu 窗口处于活动状态时 菜单栏也不会响应 跑步qemu system i386 help不过确实有效 Qemu版本 4 1 0
  • QEMU、无可启动设备、Linux 的 Windows 子系统

    我正在学习如何构建基本的操作系统内核https intermezzos github io https intermezzos github io 我已经创建了我的 iso文件 我现在正在运行qemu system x86 64 cdrom
  • Java简单网络IP地址扫描器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想制作自己的 ip 扫描器 扫描本地网络上的可用 ip 就像 Angry IP Scanner 那样 我还想获取一些基本的设备信息
  • Android USB Host API:批量传输缓冲区大小

    我正在编写软件平板电脑之间进行通信 摩托罗拉 Xoom Android 版本 4 0 3 内核版本 2 6 39 4 以及使用 USB Host API 的外围设备由安卓提供 我只使用两种类型的通信 control controlTrans
  • 为什么 ARM 内核在使用 ELF 和二进制文件时表现不同

    我正在 ARM 上进行裸机开发并在 QEMU 上模拟 Raspi 3 下面是我的最小汇编代码 section text boot global start start 1 wfe b 1b 下面是我的链接器脚本 SECTIONS 0x800
  • 为 Android 模拟器创建虚拟硬件、内核、qemu 以生成 OpenGL 图形

    我是 Android 新手 希望使用模拟器 我想做的是创建自己的虚拟硬件 可以收集 OpenGL 命令并生成 OpenGL 图形 有人告诉我 为了做到这一点 我需要编写一个 Linux 内核驱动程序来实现与硬件的通信 此外 我需要编写一个
  • 在 qemu 中使用 GDB 调试 Linux 内核无法命中函数或给定地址

    我试图在 qemu 环境中使用 GDB 逐步理解内核启动顺序 以下是我的设置 在一个终端中我正在运行 Qemu arm bin qemu system arm M vexpress a9 dtb arch arm boot dts vexp
  • 如何告诉 qemu 将 ram 复制到文件中

    我正在制作一个操作系统 并使用 Qemu 对其进行调试 我想要一种方法来读取一些指令末尾的内存的一些大块 怎么做 可以对 Qemu 说将 ram 复制到文件中吗 如果不是我能做什么 qmp 或 hmp 命令dump guest memory
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • 批量传输和 Android USB API

    我有一个程序 我尝试通过 USB 将我的 Android 设备连接到网络摄像头 我在一些事情上遇到了麻烦 即正确传输数据 我尝试过使用bulkTransfer 但似乎无法识别它的使用情况 我一直在尝试寻找可能对我有帮助的例子 例如here
  • 如何在进程结束后自动关闭`qemu`的执行?

    我想要的是qemu打开并显示输出后的窗口运行后自动关闭pintOS 就像我运行命令时一样pintos run alarm multiple in tcshshell qemu 显示过程开始 然后一些alarm notifications然后
  • 使用 QEMU 模拟 Big Endian ARM 系统

    是否可以编译一些 Linux 内核并通过 QEMU 运行它 模拟一些 Big Endian ARM 处理器 如果 QEMU 无法做到这一点 我很想知道其他可以做到这一点的系统模拟器 我的基本目标是在尽可能多的本机环境中运行和调试专用的 Bi
  • 如何通过命令行关闭Android模拟器

    我无法从命令提示符正常停止模拟器 我使用的是 Linux Ubuntu v10 04 64 位 和 Android v2 3 API 9 Gingerbread 我使用其快照启动了模拟器 现在我关心的是优雅地关闭正在运行的模拟器实例 我尝试
  • qemu KVM内核模块没有这样的文件或目录

    我目前正在上操作系统课程 我需要使用 qemu 来运行我的教授提供的一个小型操作系统 我正在尝试在 MacBook Air 5 2 上的 virtualbox 上的 ubuntu 12 04 虚拟机中使用 qemu 我知道我遇到的问题可能与
  • 尝试使用 qemu-arm 运行arm二进制文件时如何解决“加载共享库时出错”?

    我正在运行 Linux Mint 14 并安装了 qemu qemu user 和 gnueabi 工具链 我编译了 test carm linux gnueabi gcc test c o test 当我尝试跑步时qemu arm usr

随机推荐