Емуляція масового зберігання USB через USB


3

Моя мета - емуляція локального пристрою USB в середовищі Linux. Я маю на увазі, що я хочу «змонтувати» локальний файл резервного зберігання (зроблений разом з dd) як USB-пристрій всередині робочої області кореневого користувача.

Після пошуку в Google я знайшов інтерфейс API USB-гаджета Linux та функцію масового зберігання: http://www.linux-usb.org/gadget/file_storage.html . Але це не зовсім зрозуміло: здається, що він може діяти лише як клієнт / сервер із з'єднанням USB між хостом Linux та іншим комп'ютером (Linux, Windows або Mac).

Я почав встановлювати POC на Debian Jessie з налаштованим ядром 3.16.7, але зіткнувся з такою помилкою "insmod: не можу вставити 'g_mass_storage.ko': Немає такого пристрою", коли я намагаюся завантажити модуль g_mass_storage .

Хто-небудь відчував подібні речі? Дякую.

Матьє


Просто встановлення локального файлу як файлової системи не буде працювати? Частина USB потрібна?
— Xen2050

Так, частина USB необхідна, оскільки ми використовуємо програмне забезпечення, яке потребує USB-пам’яті. Я хочу обійти необхідність USB-пристрою з емуляцією.
— Матьє

dummy_hcdСпочатку потрібно завантажити , і вам потрібно вказати файл резервного копіювання (створити з truncate/ fallocate/ ddабо так) для g_mass_storageйого fileпараметра. Перегляньте їх варіанти за допомогою modinfo. Краще використовувати modprobeзамість insmodbtw.
— Том Ян

Відповіді:


1

Том Ян,

Дякуємо за вашу корисну відповідь. Я успішно завантажив фіктивний модуль hcd. Потім, modprobe модуля g_mass_storage:

modprobe g_mass_storage file=/root/myUSBStorage/mass_storage.img stall=0 removable=y iSerialNumber=1234567890

Зараз у мене є наступний dmesg:

[  205.564158] g_mass_storage gadget: Mass Storage Function, version: 2009/09/11    
[  205.564164] g_mass_storage gadget: Number of LUNs=1    
[  205.564170]  lun0: LUN: removable file: /root/mass_storage.img    
[  205.564191] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11    
[  205.564194] g_mass_storage gadget: g_mass_storage ready    
[  205.780209] usb 3-1: new high-speed USB device number 2 using dummy_hcd    
[  205.952109] usb 3-1: New USB device found, idVendor=0525, idProduct=a4a5    
[  205.952124] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3    
[  205.952133] usb 3-1: Product: Mass Storage Gadget    
[  205.952140] usb 3-1: Manufacturer: Linux 3.11.0-15-generic with dummy_udc    
[  205.952145] usb 3-1: SerialNumber: 1234567890    
[  205.956075] g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage    
[  206.020057] usb-storage 3-1:1.0: USB Mass Storage device detected    
[  206.020255] usb-storage 3-1:1.0: Quirks match for vid 0525 pid a4a5: 10000    
[  206.020477] scsi3 : usb-storage 3-1:1.0    
[  206.020856] usbcore: registered new interface driver usb-storage    
[  207.036061] scsi 3:0:0:0: Direct-Access     Linux    File-Stor Gadget 0311 PQ: 0 ANSI: 2    
[  207.036807] sd 3:0:0:0: Attached scsi generic sg2 type 0    
[  207.076081] sd 3:0:0:0: [sdb] 8192 512-byte logical blocks: (4.19 MB/4.00 
MiB)    
[  207.088158] sd 3:0:0:0: [sdb] Write Protect is off    
[  207.088174] sd 3:0:0:0: [sdb] Mode Sense: 0f 00 00 00    
[  207.100210] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, 
doesn't support DPO or FUA
[  207.180419]  sdb: sdb1    
[  207.268281] sd 3:0:0:0: [sdb] Attached SCSI removable disk

FYI, мені довелося створити таблицю розділів і файлову систему всередині емуляції. Тепер я можу успішно монтувати емуляційний носій.

mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sdb1 on /mnt type vfat (rw)

Матьє

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.