qemu: usb存储设备仿真
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-storage 和 usb-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_SCSI 及 CONFIG_BLK_DEV_SD
另外要正确识别FAT格式化的设备,还需支持FAT文件系统 CONFIG_FAT_FS 及 CONFIG_VFAT_FScat /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存储设备仿真相关推荐
- 树莓派linux系统识别u盘启动,树莓派Raspberry Pi实战之命令行下实现USB存储设备自动挂载...
简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...
- 开始计算机USB存储功能,USB存储设备禁用怎么设置
因为有些情况下我们必须得禁止USB存储设备,特别是涉及到当文件被泄漏或者复制时,那如何设置禁用USB存储设备呢?下面是学习啦小编为大家介绍禁用USB存储设备的设置方法,欢迎大家阅读. 禁用USB存储设 ...
- 将windows系统装到USB存储设备
将windows系统装到USB存储设备 需求: 1)一般公司比较规范,计算机系统有严格的限制策略,如果自己不懂得如何更改或者没有权限更改,将极其不便. 2)计划在家里完成在公司未完成的事,甚至异地出差 ...
- 你的计算机usb管理策略,您的计算机已经实施了USB存储设备管理策略,系统发现你使用了USB存储设备,该设备已被阻止,如有疑问请与...
满意答案 eq8276 2014.04.21 采纳率:42% 等级:9 已帮助:663人 要禁用 USB 存储设备,请根据您的具体情况使用下面的一个或多个步骤: 如果计算机上尚未安装 USB 存 ...
- linux 自动挂载usb设备,Raspberry Pi 自动挂载USB存储设备
简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...
- 计算机怎样发现路由器上u盘,360 P2 无线路由器通过电脑终端查看路由USB存储设备操作流程 路由器...
首先,将您的U盘 或 插入存储卡的读卡器 或 移动硬盘(以下称为USB存储设备),插入5G路由后面的USB接口上,如下图 插入USB存储设备后,5G路由面板上的USB指示灯(左数第三个)和后面USB卸 ...
- PS4 不支持USB存储设备的文件系统 如何解决?
昨日我在拷贝PS4上通过SHARP录制的星际战甲影像在插入我 的U盘时,突然看到屏幕左上角出现提示说"不支持USB存储设 备的文件系统"的提示,但是以前我插这张U盘时PS4都可以识 ...
- 用 C# 编写 USB 存储设备使用痕迹检测和删除工具
编写 USB 存储设备使用痕迹检测和删除工具 (C# Windows Form 编程练习) [版权所有 邱秋 2014 metaphysis@yeah.net, 转载请注明出处] 第一节 准备知识 之 ...
- 树莓派USB存储设备自动挂载并通过脚本实现自动拷贝,自动播放视频,脚本自动升级等功能...
需求: 首先需要树莓派自动挂载USB设备,然后扫描USB指定目录下文件,将相关文件拷贝至树莓派指定目录,然后通过omxplayer循环播放新拷贝文件视频 1. 树莓派实现USB存储设备自动挂载 树莓派 ...
- 掀开USB存储设备自动运行的面纱(精简版)
前前言2:为什么有精简版? 考虑原文(http://blog.sina.com.cn/u/56b798f8010007ht)太长而且比较罗嗦,部分新手会失去耐心看完,因此特地修改原文推出精简版.精简版 ...
最新文章
- jmeter将响应结果由Unicode转码成中文展示
- 视频通信关键技术探索及实践
- java 定时器框架_java定时器
- LeetCode 797. 所有可能的路径(DFS)
- 数据库 聚合 、分组、筛选、排序、日期等函数的应用
- 从B树、B+树、B*树谈到R树
- Mybaits整个Spring项目,简单示例,10分钟快速上手
- 华为数通ensp命令(二)
- 人脸识别闸机系统解决方案
- Q1营收超华尔街预期,挚文集团的价值等待回归
- Codeforces Gym 100015H Hidden Code(暴力)
- 高中数学知识点归纳总结三角函数与解三角形
- 用Python 画小猪佩奇
- C#连接数据库自动生成实体类
- linux实验实训报告,linux实验实训报告.doc
- sql 纵向求和_SQL语句(行列转换以及字符串求和)
- 《他乡的童年》观后感——英国教育
- win7 ie10代理设置不能用 设置完代理后点确定 回头再打开代理设置对钩并没有选上
- 关于BUCK降压的一些学习笔记3-->最简单的BUCK电路
- SEO关键词分析优化工具
热门文章
- 照相机的曝光(光圈和快门)
- 快门光圈感光度口诀_摄影:一张图让你明白什么叫光圈、快门、感光度、景深、ISO。...
- OpenCVSharp学习(十二):图片的逻辑运算
- 计算机蓝屏代码0x0000007b,win7系统开机蓝屏提示STOP:0X0000007B错误代码怎么办
- outlook怎么配置126邮箱服务器,outlook 如何配置126邮箱
- matlab 龙格库塔求解隐式方程,Matlab龙格库塔求解方程组问题
- VS2019登陆时脚本错误
- HCI 基础知识之一
- 服务器usb驱动安装系统安装失败怎么办,USB3.0驱动无法安装失败怎么办?USB驱动失败失败的解决方法...
- 详解矩阵算法在电商sku组件中的应用一