qemu既支持仿真虚拟的usb存储设备,也支持连接实际的设备(如U盘)。相关的命令参数为:

-usb
-device usb-storage,drive=drive_id
-device usb-uas
-device usb-bot
-device usb-host,hostbus=bus,hostaddr=addr
-device usb-host,vendorid=vendor,productid=product
  • “-usb” 使能usb总线,如果系统已添加usb总线,则不需要这个参数
  • “usb-storage” 仿真使用bulk-only传输协议的虚拟设备(绝大部分u盘采用的传输方式),只支持单一逻辑单元
  • “usb-uas” 仿真使用UAS(USB attached SCSI)传输协议的虚拟设备,支持多逻辑单元(MLUN)
  • “usb-bot” 也是仿真使用bulk-only传输协议的虚拟设备,支持多逻辑单元
  • “usb-host” 连接实际的usb存储设备

下面介绍常用的 usb-storageusb-host 方式。

使用虚拟设备

首先创建设备文件,可以选择固定大小的raw格式或者大小动态增长的qcow2等格式。
使用raw格式的好处是可以直接在PC上对设备文件进行分区及格式化等操作,只是占用较多的存储空间。
而使用qcow2格式则只需占用很小的存储空间,适合仿真大容量设备,只是得挂载后才能分区或格式化。

raw格式

创建设备:

$ qemu-img create -f raw disk_01.img 32M
Formatting 'disk_01.img', fmt=raw size=33554432
$
$ ls -l disk_01.img
-rw-r--r-- 1 cjz cjz 33554432 Oct  6 21:18 disk_01.img

格式化设备:

$ mkfs.vfat disk_01.img
mkfs.fat 3.0.26 (2014-03-07)

qemu挂载设备:

qemu <other options ...> \-usb \-drive if=none,format=raw,id=disk1,file=disk_01.img \-device usb-storage,drive=disk1

还可以添加usb主控制器设备(root hub)来增加usb总线,并挂载设备到新总线上,比如:

qemu <other options ...> \-drive if=none,format=raw,id=disk1,file=disk_01.img \-device ich9-usb-ehci1,id=usb \-device usb-storage,bus=usb.0,drive=disk1

使用命令 “qemu -device ?” 可以查看支持的虚拟设备信息

qcow2格式

创建设备:

$ qemu-img create -f qcow2 disk_02.img 4G
Formatting 'disk_02.img', fmt=qcow2 size=4294967296 encryption=off cluster_size=65536 lazy_refcounts=off
$
$ ls -l disk_02.img
-rw-r--r-- 1 cjz cjz 197120 Oct  6 21:26 disk_02.img

可以看到4GB大小的设备实际只占用很小存储空间(将随着设备的使用情况而动态增加)。
qemu挂载方法与上面相同,只是把格式改成 “format=qcow2”

qemu <other options ...> \-usb \-drive if=none,format=qcow2,id=disk2,file=disk_02.img \-device usb-storage,drive=disk2

使用实际设备

首先使用 lsusb 命令查看连接到PC的usb设备信息,比如:

$ lsusb
...
Bus 002 Device 005: ID 05e3:0736 Genesys Logic, Inc. microSD Reader/Writer
...

qemu挂载方式1: 使用厂家和产品的唯一标识码

qemu <other options ...> \-usb \-device usb-host,vendorid=0x05e3,productid=0x0736

即对应lsusb显示的 “ID 05e3:0736”

qemu挂载方式2: 使用总线地址信息

qemu <other options ...> \-usb \-device usb-host,hostbus=2,hostaddr=5

即对应lsusb显示的 “Bus 002 Device 005”

使用实际设备需要root权限,否则会出现下面的错误:
libusbx: error [_get_usbfs_fd] libusbx couldn't open USB device /dev/bus/usb/002/005: Permission denied
libusbx: error [_get_usbfs_fd] libusbx requires write access to USB device nodes.

可以 “sudo” 运行qemu命令,或者创建udev规则来改变设备的访问权限,比如:
创建udev规则文件 /etc/udev/rules.d/qemu-usb.rules,并添加以下内容:
SUBSYSTEM=="usb", ATTRS{idVendor}=="05e3", ATTRS{idProduct}=="0736", MODE="0666"

QEMU测试

以实际设备为例,运行命令:

qemu <other options ...> \-device ich9-usb-ehci1,id=usb \-device usb-host,vendorid=0x05e3,productid=0x0736,bus=usb.0

这是qemu内核运行后的打印信息:

usb 1-1: new high-speed USB device number 2 using ehci-pci
usb 1-1: New USB device found, idVendor=05e3, idProduct=0736
usb 1-1: New USB device strings: Mfr=3, Product=4, SerialNumber=2
usb 1-1: Product: USB Storage
usb 1-1: Manufacturer: Generic
usb 1-1: SerialNumber: 000000000272
...
/ #
/ # lsusb
Bus 001 Device 002: ID 05e3:0736
Bus 001 Device 001: ID 1d6b:0002
/ #
/ # cat /sys/bus/usb/devices/1-1/1-1:1.0/bInterfaceClass
08
/ # cat /sys/bus/usb/devices/1-1/1-1:1.0/bInterfaceSubClass
06
/ # cat /sys/bus/usb/devices/1-1/1-1:1.0/bInterfaceProtocol
50
/ #

如果内核已包含 CONFIG_USB_STORAGE,则会自动检测usb存储设备,否则加载该模块:

该模块还依赖于SCSI模块: CONFIG_SCSICONFIG_BLK_DEV_SD
另外要正确识别FAT格式化的设备,还需支持FAT文件系统 CONFIG_FAT_FSCONFIG_VFAT_FS

cat /proc/filesystems 可以查看当前内核支持的文件系统列表

/ # insmod /lib/modules/3.12.74/usb-storage.ko
usb_storage: module verification failed: signature and/or required key missing - tainting kernel
usb-storage 1-1:1.0: USB Mass Storage device detected
scsi2 : usb-storage 1-1:1.0
usbcore: registered new interface driver usb-storage
/ # scsi 2:0:0:0: Direct-Access     Generic  STORAGE DEVICE   0272 PQ: 0 ANSI: 0
sd 2:0:0:0: Attached scsi generic sg2 type 0
sd 2:0:0:0: [sdb] 7744512 512-byte logical blocks: (3.96 GB/3.69 GiB)
sd 2:0:0:0: [sdb] Write Protect is off
sd 2:0:0:0: [sdb] No Caching mode page found
sd 2:0:0:0: [sdb] Assuming drive cache: write through
sd 2:0:0:0: [sdb] No Caching mode page found
sd 2:0:0:0: [sdb] Assuming drive cache: write throughsdb: sdb1
sd 2:0:0:0: [sdb] No Caching mode page found
sd 2:0:0:0: [sdb] Assuming drive cache: write through
sd 2:0:0:0: [sdb] Attached SCSI removable disk

sdb 为整个usb存储设备,sdb1 为设备上的的第一个分区。

/ # ls -l /dev/sdb*
brw-------    1 0        0           8,  16 Oct  7 07:59 /dev/sdb
brw-------    1 0        0           8,  17 Oct  7 07:59 /dev/sdb1
/ #
/ # cat /sys/block/sdb/size
7744512
/ # cat /sys/block/sdb/sdb1/size
7742431
/ #
/ # mount -t vfat /dev/sdb1 /tmp
/ #
/ # mount | grep sdb
/dev/sdb1 on /tmp type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/ #
/ # df -h | grep sdb
/dev/sdb1                 3.7G    100.0K      3.7G   0% /tmp
/ #

qemu: usb存储设备仿真相关推荐

  1. 树莓派linux系统识别u盘启动,树莓派Raspberry Pi实战之命令行下实现USB存储设备自动挂载...

    简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...

  2. 开始计算机USB存储功能,USB存储设备禁用怎么设置

    因为有些情况下我们必须得禁止USB存储设备,特别是涉及到当文件被泄漏或者复制时,那如何设置禁用USB存储设备呢?下面是学习啦小编为大家介绍禁用USB存储设备的设置方法,欢迎大家阅读. 禁用USB存储设 ...

  3. 将windows系统装到USB存储设备

    将windows系统装到USB存储设备 需求: 1)一般公司比较规范,计算机系统有严格的限制策略,如果自己不懂得如何更改或者没有权限更改,将极其不便. 2)计划在家里完成在公司未完成的事,甚至异地出差 ...

  4. 你的计算机usb管理策略,您的计算机已经实施了USB存储设备管理策略,系统发现你使用了USB存储设备,该设备已被阻止,如有疑问请与...

    满意答案 eq8276 2014.04.21 采纳率:42%    等级:9 已帮助:663人 要禁用 USB 存储设备,请根据您的具体情况使用下面的一个或多个步骤: 如果计算机上尚未安装 USB 存 ...

  5. linux 自动挂载usb设备,Raspberry Pi 自动挂载USB存储设备

    简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...

  6. 计算机怎样发现路由器上u盘,360 P2 无线路由器通过电脑终端查看路由USB存储设备操作流程 路由器...

    首先,将您的U盘 或 插入存储卡的读卡器 或 移动硬盘(以下称为USB存储设备),插入5G路由后面的USB接口上,如下图 插入USB存储设备后,5G路由面板上的USB指示灯(左数第三个)和后面USB卸 ...

  7. PS4 不支持USB存储设备的文件系统 如何解决?

    昨日我在拷贝PS4上通过SHARP录制的星际战甲影像在插入我 的U盘时,突然看到屏幕左上角出现提示说"不支持USB存储设 备的文件系统"的提示,但是以前我插这张U盘时PS4都可以识 ...

  8. 用 C# 编写 USB 存储设备使用痕迹检测和删除工具

    编写 USB 存储设备使用痕迹检测和删除工具 (C# Windows Form 编程练习) [版权所有 邱秋 2014 metaphysis@yeah.net, 转载请注明出处] 第一节 准备知识 之 ...

  9. 树莓派USB存储设备自动挂载并通过脚本实现自动拷贝,自动播放视频,脚本自动升级等功能...

    需求: 首先需要树莓派自动挂载USB设备,然后扫描USB指定目录下文件,将相关文件拷贝至树莓派指定目录,然后通过omxplayer循环播放新拷贝文件视频 1. 树莓派实现USB存储设备自动挂载 树莓派 ...

  10. 掀开USB存储设备自动运行的面纱(精简版)

    前前言2:为什么有精简版? 考虑原文(http://blog.sina.com.cn/u/56b798f8010007ht)太长而且比较罗嗦,部分新手会失去耐心看完,因此特地修改原文推出精简版.精简版 ...

最新文章

  1. jmeter将响应结果由Unicode转码成中文展示
  2. 视频通信关键技术探索及实践
  3. java 定时器框架_java定时器
  4. LeetCode 797. 所有可能的路径(DFS)
  5. 数据库 聚合 、分组、筛选、排序、日期等函数的应用
  6. 从B树、B+树、B*树谈到R树
  7. Mybaits整个Spring项目,简单示例,10分钟快速上手
  8. 华为数通ensp命令(二)
  9. 人脸识别闸机系统解决方案
  10. Q1营收超华尔街预期,挚文集团的价值等待回归
  11. Codeforces Gym 100015H Hidden Code(暴力)
  12. 高中数学知识点归纳总结三角函数与解三角形
  13. 用Python 画小猪佩奇
  14. C#连接数据库自动生成实体类
  15. linux实验实训报告,linux实验实训报告.doc
  16. sql 纵向求和_SQL语句(行列转换以及字符串求和)
  17. 《他乡的童年》观后感——英国教育
  18. win7 ie10代理设置不能用 设置完代理后点确定 回头再打开代理设置对钩并没有选上
  19. 关于BUCK降压的一些学习笔记3-->最简单的BUCK电路
  20. SEO关键词分析优化工具

热门文章

  1. 照相机的曝光(光圈和快门)
  2. 快门光圈感光度口诀_摄影:一张图让你明白什么叫光圈、快门、感光度、景深、ISO。...
  3. OpenCVSharp学习(十二):图片的逻辑运算
  4. 计算机蓝屏代码0x0000007b,win7系统开机蓝屏提示STOP:0X0000007B错误代码怎么办
  5. outlook怎么配置126邮箱服务器,outlook 如何配置126邮箱
  6. matlab 龙格库塔求解隐式方程,Matlab龙格库塔求解方程组问题
  7. VS2019登陆时脚本错误
  8. HCI 基础知识之一
  9. 服务器usb驱动安装系统安装失败怎么办,USB3.0驱动无法安装失败怎么办?USB驱动失败失败的解决方法...
  10. 详解矩阵算法在电商sku组件中的应用一