Виртуальные эмуляторы usb для компьютера. V-USB — программная реализация USB для AVR. Libusb: и не одетая, и не обнаженная

Разработка различных устройств на основе микроконтроллеров - занятие, достойное настоящего компьютерного гика. Несомненно, полезной фишкой любого гаджета будет USB-интерфейс для подключения к компьютеру. Но что делать, если в микросхеме AVR не предусмотрена аппаратная поддержка USB?

V-USB: размер имеет значение

При разработке собственного гаджета часто встает проблема его подключения к компьютеру. Надо сказать, что порты LPT и COM - теперь экзотика на материнских платах ПК, не говоря о ноутбуках, у которых эти интерфейсы исчезли давным-давно. Поэтому у современных компьютеров практически не осталось альтернатив интерфейсу USB.

Если ресурсы чипа используются на все сто процентов, то лучше сразу смотреть в сторону устройств с аппаратной поддержкой универсальной последовательной шины (такие микроконтроллеры присутствуют в линейке любого производителя). В остальных случаях можно использовать софтовый USB.

Для микроконтроллеров Atmel существует замечательный проект V-USB, который предлагает программную реализацию низкоскоростного устройства USB 1.1. Код V-USB будет работать на любом устройстве AVR, у которого есть хотя бы 2 Кб Flash-памяти и 128 байт ОЗУ, с тактовой частотой 12; 12,8; 15; 16; 16,8 или 20 МГц.

Использование продукта возможно как в рамках open source лицензии GPL, так и на коммерческой основе. Для того чтобы разрабатывать собственные USB-устройства, обычно также нужно покупать что-то вроде лицензии. Но ребята из V-USB позаботились и об этом, приобретя пару Vendor ID - Product ID и разрешив их использовать любому желающему.

Аппаратная обвязка для подключения USB-шины к микроконтроллеру очень простая. Если устройство потребляет не слишком много, то запитать его можно прямо от шины (считается, что линия питания USB компьютера способна отдавать ток до 500 мА). Так как информационные линии (D+ и D–) используют уровень сигнала 3,6 В, кроме токоограничивающих резисторов, необходимы стабилитроны для согласования с 5-вольтовой логикой чипа. Чтобы обозначить тип подключения, нужно «подтянуть» напряжение питания через сопротивление 1,5 кОм к линии D–.

Альтернативный вариант сопряжения по USB - снизить напряжение питания контроллера посредством соответствующей микросхемы стабилизации или просто парой диодов. Последнюю схему можно найти на сайте проекта V-USB.

Программатор USBtiny

Для микроконтроллеров AVR существует множество различных программаторов. USBtiny здесь упоминается, в частности, потому, что содержит программную реализацию USB, аналогичную V-USB. Схема этого программатора проста: версия 2 содержит две микросхемы, а первая версия - лишь одну (собственно чип ATtiny2313). Благодаря подробному описанию на сайте и простым комплектующим устройство легко сделать даже начинающему. USBtiny совместим с популярной программой avrdude, используемой для программирования микроконтроллеров AVR.

Единственная проблема заключается в заливке прошивки в чип программатора - для этого нужен… программатор. Если есть компьютер с LPT-портом, то можно сделать один из вариантов FBPRG ака «пять проводков», который железно

Готовим санки

Программный инструментарий, необходимый для реализации простейшей прошивки USB-гаджета, предельно аскетичен: компилятор gcc-avr, библиотека avr-libc, программатор avrdude и набор binutils для AVR. В Debian/Ubuntu все, что нужно, устанавливается одной командой:

$ sudo apt-get install avrdude binutils-avr gcc-avr avr-libc

На безбрежных просторах интернета несложно найти очень подробное руководство по V-USB и libusb (на английском). Согласно мануалу, для добавления поддержки USB в проект потребуется папка usbdrv из архива с последней версией V-USB. В корне этой папки есть шаблон конфигурации usbconfig-prototype.h. Нужно сделать копию этого файла, назвав ее usbconfig.h. Далее - исправить usbconfig.h, указав порт (D), линии которого будут использоваться для ввода-вывода, непосредственно номера линии D+ (2) и D– (3), а также частоту (12 МГц), на которой работает чип (ATtiny2313):

#define USB_CFG_IOPORTNAME D #define USB_CFG_DMINUS_BIT 3 #define USB_CFG_DPLUS_BIT 2 #define USB_CFG_CLOCK_KHZ 12000

Чтобы воспользоваться лицензией V-USB для устройства, числовые идентификаторы производителя и устройства изменять не надо. А вот символьные имена можно выбрать по своему вкусу (они позволят отличить несколько устройств на основе V-USB, подключенных к одному и тому же компьютеру):

#define USB_CFG_VENDOR_ID 0xc0, 0x16 #define USB_CFG_DEVICE_ID 0xdc, 0x05 #define USB_CFG_VENDOR_NAME "n","e","t","s","4","g","e","e","k","s",".","c","o","m" #define USB_CFG_VENDOR_NAME_LEN 14 #define USB_CFG_DEVICE_NAME "U","S","B","e","x","a","m","p","l","e" #define USB_CFG_DEVICE_NAME_LEN 10

Разнообразные гаджеты

У тебя есть идея какого-нибудь устройства? Не спеши паять и кодить, а поищи, возможно, кто-то подобное уже делал. Если не получится воспользоваться готовыми схемами и исходниками, то хотя бы не придется начинать все с нуля.

Например, проект V-USB благодаря лицензионной политике накопил приличную базу готовых (в том числе и свободно распространяемых) решений. Здесь можно найти различные реализации клавиатур, USB-адаптеров для джойстиков, геймпадов (в том числе и раритетных, например SNES/NES, Nintendo 64, ZX Spectrum джойстик, Sony PlayStation 1/2) и тому подобное. Адаптеры DMX, виртуальные порты COM и UART, i2c, Servo, беспроводные интерфейсы DCF77, IR - все, что поможет подключить к ПК больше новых устройств. Логгеры, платформы для датчиков и сенсоров, адаптеры для LCD-дисплеев, программаторы и загрузчики также могут оказаться полезными в хозяйстве.

Программа для чипа - элементарно!

При взаимодействии по шине USB компьютер - это главное устройство, которое периодически отправляет управляющие сообщения-запросы. Контроллер, соответственно, подчиненное и должен отвечать на запросы. Формат управляющего сообщения определяется структурой usbRequest_t из файла usbdrv.h:

Typedef struct usbRequest { uchar bmRequestType; uchar bRequest; usbWord_t wValue; usbWord_t wIndex; usbWord_t wLength; } usbRequest_t;

Создадим файл main.c на одном уровне с папкой usbdrv и опишем в нем необходимые заголовочные файлы, определения и переменные:

#include #include #include #include "usbdrv.h" #define F_CPU 12000000L // Частота МК #include #define DATA_OUT 1 // Команда отправки #define DATA_IN 2 // Команда получения // Буфер static uchar replyBuf = "Hello World!"; static uchar dataLength = 0, dataReceived = 0;

В main.c переопределим функцию usbFunctionSetup, которая вызывается автоматически при получении нового запроса:

USB_PUBLIC uchar usbFunctionSetup(uchar data) { usbRequest_t *rq = (void *)data; switch(rq->bRequest) { case DATA_OUT: // Обработать команду отправки данных usbMsgPtr = replyBuf; // Указать буфер return sizeof(replyBuf); // Возвратить размер буфера case DATA_IN: // Обработка команды получения данных dataLength = (uchar)rq->wLength.word; // Получить длину dataReceived = 0; // Вызовов usbFunctionWrite будет много if(dataLength > sizeof(replyBuf)) // Проверка на переполнение dataLength = sizeof(replyBuf); return USB_NO_MSG; // Возвратить 255 } return 0; }

Как видно из листинга, самый простой способ отправить данные компьютеру - установить в usbFunctionSetup значение указателя usbMsgPtr на буфер ОЗУ (replyBuf), где находятся данные, а затем вернуть его длину. Размер буфера не должен превышать 254 байта. Для ATtiny2313 c его 128 байтами ОЗУ этого достаточно. Для более функциональных устройств есть второй способ - переопределение функции usbFunctionRead.

Чтобы получить данные, во-первых, нужно в функции usbFunctionSetup извлечь длину сообщения из поля wLength запроса и сохранить ее в глобальной переменной dataLength. Во-вторых, в main.c требуется переопределить функцию usbFunctionWrite, предназначенную для обработки получаемых данных и вызываемую автоматически (и очевидно, несколько раз), если usbFunctionSetup возвращает значение USB_NO_MSG (255):

USB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len) { uchar i; // Сохранить полученную порцию данных в буфер for(i = 0; dataReceived < dataLength && i < len; i++, dataReceived++) replyBuf = data[i]; return (dataReceived == dataLength); }

Собственно, функция usbFunctionWrite занимается тем, что заполняет буфер replyBuf полученными данными.

Кстати, чтобы этот метод работал, нужно внести изменения в usbconfig.h:

#define USB_CFG_IMPLEMENT_FN_WRITE 1

Ну и последняя функция прошивки - main:

Int main() { usbInit(); // Инициализировать USB usbDeviceConnect(); // Подключить устройство sei(); // Разрешить прерывания // В бесконечном цикле ждать управляющие сообщения while(1) usbPoll(); return 0; }

Задействуем USART/UART

Хорошая альтернатива программному/аппаратному USB - использование в чипе популярного интерфейса USART/UART со сторонним преобразователем этого протокола в USB, который можно выполнить, например, на основе микросхемы FT232RL.

Libusb: и не одетая, и не обнаженная

Ты спросишь: а придется ли писать драйвер для операционной системы компьютера, чтобы подключить USB-устройство? Если использовать libusb, то можно обойтись без реализации полноценного модуля ядра. Libusb - это open source библиотека, которая позволяет быстро запрограммировать, во-первых, поиск устройства на шине, а во-вторых - обмен данными с ним.

Под Linux библиотеку и необходимые заголовочные файлы можно получить из исходных кодов. А лучше воспользоваться стандартным репозиторием твоего дистрибутива. Для Debian/Ubuntu, например, так:

$ sudo apt-get install libusb-dev

Существует также порт libusb под Windows - libusb-win32. Вопреки названию проекта, также поддерживаются 64-битные ОС от Microsoft (начиная с версии 1.2.0.0).

Но libusb - это отдельная тема разговора. Думаю, с программированием для ПК ты знаком и сможешь в этом разобраться сам. Поэтому буду краток. Создаем файл usbtest.c и начинаем наполнять его контентом. Сначала необходимые заголовочные файлы и определения:

#include [...] // Для компьютера смысл команд обратный, // но обозначения остаются те же #define DATA_OUT 1 #define DATA_IN 2

Функция usbOpenDevice для инициализации устройства:

Usb_init(); // Инициализировать USB usb_find_busses(); // Найти шины usb_find_devices(); // Найти устройства // Перебрать все шины for(bus=usb_get_busses(); bus; bus=bus->next) { // Перебрать все устройства на шине for(dev=bus->devices; dev; dev=dev->next) { // Если идентификаторы вендора и продукта не совпадают... if(dev->descriptor.idVendor != vendor || dev->descriptor.idProduct != product) continue; // ...пропустить эту итерацию // Попробовать получить дескриптор устройства if(!(handle = usb_open(dev))) { fprintf(stderr, "%s\n", usb_strerror()); continue; } return handle; // Вернуть дескриптор } } // Устройство не найдено return NULL;

Как видно, параметрами usbOpenDevice выступают числовые идентификаторы производителя и устройства. В случае если устройство присутствует на шине, возвращается его дескриптор. Если устройств на V-USB будет несколько - придется дописать проверку символьных имен вендора и продукта.

И функция main консольной утилиты usbtest:

Int main(int argc, char **argv) { // Дескриптор устройства usb_dev_handle *handle = NULL; int nBytes = 0; char buffer; // Ищем устройство handle = usbOpenDevice(0x16C0, 0x05DC); if(handle == NULL) { fprintf(stderr, "Could not find USB device!\n"); exit(1); } // Аргумент out - получить данные от чипа if(strcmp(argv, "out") == 0) { nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, DATA_OUT, 0, 0, (char *)buffer, sizeof(buffer), 5000); printf("Got %d bytes: %s\n", nBytes, buffer); // Аргумент in - отправить строку (следующий аргумент) } else if(strcmp(argv, "in") == 0 && argc > 2) { nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, DATA_IN, 0, 0, argv, strlen(argv)+1, 5000); } if(nBytes < 0) fprintf(stderr, "%s\n", usb_strerror()); usb_close(handle); // Закрыть дескриптор return 0; }

Здесь правит бал функция usb_control_msg, которая объявлена во включаемом файле usb.h. Она имеет кучу параметров и собственно создает те управляющие сообщения, обработка которых реализована в прошивке микроконтроллера.

Proteus отдыхает

Всенародно любимый симулятор электрических схем Proteus ISIS бесполезен при разработке устройств с программной реализацией USB. Его эмулятор USB поддерживает только чипы с аппаратной поддержкой универсальной последовательной шины (например, AT90USB646 или AT90USB1286).

Собираем, прошиваем, тестируем

Ниже приведен небольшой, но очень полезный Makefile, c помощью которого командой make из main.c и usbtest.c легко получить прошивку для чипа - main.hex и бинарник утилиты usbtest:

CC = avr-gcc OBJCOPY = avr-objcopy CFLAGS = -Wall -Os -Iusbdrv -mmcu=attiny2313 OBJFLAGS = -j .text -j .data -O ihex OBJECTS = usbdrv/usbdrv.o usbdrv/oddebug.o usbdrv/usbdrvasm.o main.o CMDLINE = usbtest # Цель: собрать все all: main.hex $(CMDLINE) # Сборка утилиты для компьютера $(CMDLINE): usbtest.c gcc -I ./libusb/include -L ./libusb/lib/gcc -O -Wall usbtest.c -o usbtest -lusb # Очистить проект от бинарного кода clean: $(RM) *.o *.hex *.elf usbdrv/*.o # Получение файла прошивки из elf-файла %.hex: %.elf $(OBJCOPY) $(OBJFLAGS) $< $@ # Сборка elf-файла main.elf: $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) -o $@ # Сборка файлов библиотеки V-USB $(OBJECTS): usbdrv/usbconfig.h # C в объектный код %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # asm в объектный код %.o: %.S $(CC) $(CFLAGS) -x assembler-with-cpp -c $< -o $@

Чтобы залить прошивку в микроконтроллер с помощью программатора usbtiny, набираем команду:

$ sudo avrdude -p t2313 -c usbtiny -e -U flash:w:main.hex:i -U lfuse:w:0xef:m

В avrdude фьюзы задаются не слишком наглядно, но их можно легко рассчитать в одном из online-калькуляторов.


Подключаем устройство к компьютеру и проверяем, как оно работает (usbtest c параметром out считывает строку, in - записывает указанную строку в буфер чипа):

$ sudo ./usbtest in all_ok $ sudo ./usbtest out

Ложка дегтя

Софтовый USB не есть панацея. Программные реализации обычно имеют ряд упрощений, таких как отсутствие проверки контрольной суммы и симметричности канала, что отрицательно сказывается на помехозащищенности. Также обычно софтовые библиотеки используют низкоскоростные режимы работы USB. Да и код USB-библиотеки «кушает» и без того небольшую память чипа.

Подглядываем…

На уровне логики протокол USB - это, по сути, многоуровневая пакетная передача данных. В этом нетрудно убедиться (а заодно узнать много интересного про USB), воспользовавшись анализатором сетевых протоколов Wireshark. Предварительно необходимо загрузить драйвер USB-монитора:

$ sudo modprobe usbmon

Теперь в списке интерфейсов Wireshark можно выбирать шины USB. Посмотреть номер шины устройства можно, например, в логах.

Заключение

Надеюсь, после того, как ты научился пересылать данные между компьютером и микроконтроллером AVR, твоя страсть к электронике воспылает с новой силой, породив немало оригинальных и полезных устройств. Остается лишь пожелать тебе успехов на этом сложном, но интересном поприще.

11

У меня есть приложение Linux, для которого я хотел бы автоматизировать некоторые тесты, и его состояние должно изменяться в зависимости от состояния определенных устройств, то есть USB-устройств, WLAN-устройств, WAN-устройств. Однако у нас больше нет физических USB-устройств, WLAN, WAN и т. Д. Устройств, поэтому мне нужно выяснить способ тестирования этой программы без фактического подключения физических устройств, включения/выключения их и т. Д.

Я начинаю с простого создания виртуального USB-устройства, которое я могу контролировать из пользовательского пространства, но с моей стороны возникает фундаментальный недостаток знаний, который мешает мне принимать какие-либо из похожих тем на этих форумах и применять их к моему проекту. Я чувствую, что мне нужно создать какой-то виртуальный USB-драйвер, а затем связать его с какой-то программой на уровне пользователя, а не с usbfs. Однако, даже если я создаю этот виртуальный драйвер, как мне «подключить» это устройство из пользовательского пространства и получить мою программу, зарегистрированную с помощью этого конкретного драйвера? Является ли то, что я пытаюсь сделать, даже возможно?

  • 2 ответа
  • Сортировка:

    Активность

0

Не можете ли вы протестировать приложение в виртуальной среде с помощью VMWare? Затем вы можете «подключить» любое виртуальное устройство на своем компьютере к гостевой виртуальной машине и протестировать приложение таким образом.

8

Лучший способ - использовать драйверы и оборудование для гаджетов Linux, которые позволяют вам быть USB-устройством. Драйвер гаджета позволяет компьютеру «притворяться» любым устройством. Тогда ваша тестируемая система имеет один кабель USB OTG для гаджета. Вам даже не нужно отключать кабель, если у вашего гаджета есть подходящее оборудование. «Гаджет-ящик» может быть вашим рабочим столом/ноутбуком под управлением Linux (если он поддерживает USB OTG) или даже Android-телефоном или малиной Pi. (Осторожно, что USB кабелей высасывать Просто потому, что канатные припадки не означает, что он правильно подключен к USB OTG.).

После того, как вы имеете право аппаратного USB OTG, гаджет коробок все программное обеспечение:

1) Если тестируемое устройство поддерживает OTG, убедитесь, что ваш гаджет не пытается и не является USB-хостом. (Тогда ваше тестируемое устройство станет USB-клиентом.) I.e. убедитесь, что такие вещи, как usb_storage , не загружаются автоматически.

2) Ядро поддерживает гаджеты для USB-концентраторов, USB-Ethernet, USB-последовательных портов и USB-накопителей. Просто загрузите нужные модули в свой гаджет, и он «просто работает». Например, чтобы создать USB-накопитель, сделайте что-то вроде этого: « insmod g_file_storage.ko file=/dev/ram0 ». Дальняя сторона будет думать, что вы подключили USB-накопитель.

Для последовательных устройств, гаджет может работать в пользовательском пространстве код, который «поднимает трубку» на/Dev/USBx»и переговоры в устройство под испытанием. (По-видимому, эмулирующий модем 4G или любой другой.)

Тонны устройств действительно «USB-серийный» под капотом, потому что производитель был слишком ленив, чтобы понять USB.

3) С небольшим повторным компиляцией или настройкой вы можете использовать эти универсальные устройства для гаджета, ID или возвращать различные строки поставщика и т. Д. Это не будет таким же, как «тестирование на реальном аппаратном обеспечении», но, по крайней мере, вы тестируете стандартную версию этих устройств.

4) Для типов устройств, которые еще не находятся в ядре (например, Wi-Fi или что-то еще), вы сами по себе. С достаточным количеством пота и слез крови вы можете написать свой собственный тип гаджета. (В идеале, используйте как можно больше в пользовательском пространстве и обрабатывайте только критически важные компоненты в ядре..)

Проект Олоф Лагерквист, отличная программа для эмуляции дисков, но поскольку диски эмулировать могут все, а вот создать флешку или дискету не все могут похвастаться. Диски создаются в виртуальной памяти, физически их можно выгружать в файловые образы. После установки, программа доступна из панели управления ПК.

Жмем "ОК" все виртуальный образ готов.

Образ
Образ можно сохранить и монтировать при необходимости. Где это пригодится? Например для ленивых на такую виртуальную флешку можно закинуть сертификаты для КриптоПро.)) Или использовать как диск в оперативной памяти для хранения кеша, файла подкачки и прочего.
Есть еще альтернативная GUI -

Автоматическое подключение:
echo off
rem поместить в автозагрузку для автоматического монтирования
c:\WINDOWS\system32\imdisk.exe -a -f "%PROGRAMFILES%\flash.img" -m f: -o rem

Некоторые параметры командной строки:

imdisk.exe -e -s 300M -m B: - увеличение диска B на 300 Мб

imdisk -a -t file -o ro -m y: -f C:\Boot.img - монтировать образ Boot.img диском Y, только чтение

imdisk -a -t file -m y: -f C:\Boot.img - монтировать образ Boot.img диском Y, только чтение/запись

imdisk -d -m y: - демонтировать диск Y

imdisk -a -s 150M -m #: -p "/fs:ntfs /y /q /v:imdisk - создать диск размером 150 Мб, буква диска первая свободная, форматирование в NTFS, метка диска imdisk

imdisk -a -s 10% -m #: -p "/fs:ntfs /y /q /v:imdisk - тоже что и предыдущее, только размер указан как 10 процентов от свободной памяти.

imdisk -a -s -500M -m #: -p "/fs:ntfs /y /q /v:imdisk - тоже что и предыдущее, только размер указан со знаком минуса, то есть равный обьёму свободной памяти минус указанный размер. При 1200 Мб свободной памяти размер диска станет 1200-500=700Мб

imdisk.exe -a -t proxy -o ip -f 127.0.0.1:80 -m Z: - использование с сервером, нашёл в инете, на деле не проверял.

A - подключение вирт. диска.

D - отключение вирт. диска.

E - редактирование вирт. диска.

_________________________

B - указать смещение, то есть начало данных на диске, указывается для дисков созданных в разных программах, в образах которых нужно пропустить начальные атрибуты в файле.

S - размер виртуального диска. Размер является количеством байтов если не прибавлен суффикс a (авто), b (колич. 512 байтовых блоков), k (тысяча байт), m (миллион байт), g (миллиард байт), t (триллиона байт), K (килобайт), M (мегабайт), G (гигабайт) или T (терабайт). Тысяча байт и килобайт, отличаются тем, что в килобайте 1024 байт, а не 1000. Например. -s 150M или -s 10% - 10 процентов от свободной памяти. Параметр -500M - со знаком минуса определяет размер создаваемого диска как обьём свободной памяти минус указанный размер.

O - установить опции, применяется совместно с параметрами указанными ниже

ro - только чтение

rw - чтения/запись

rem - установить как сменный диск (флешка). Это определяет свойства диска, кэширование и прочее.

fix - установить как постоянный, фиксированный диск (в противоположность rem)

cd - создание виртуального CD-ROM/DVD-ROM.

fd - создание флоппи диска. По умолчанию для размеров 160K, 180K, 320K, 360K, 640K, 720K, 820K, 1200K, 1440K, 1680K, 1722K, 2880K, 123264K or 234752K.

hd - создание раздела харда.

ip - параметр для подключения к прокси серверу.

comm - подключение к серверу памяти через COM-порт.

________________

M - Определяет букву накопителя. Например -m B: или -m y: или -m #: - первая свободная буква диска.

F - имя файла вирт. диска, например -f C:\Boot.img или -f \\server\share\image.bin или -F \Device\Harddisk0\Partition1\image.bin - последнее, когда буква диска не назначена и определение по номеру харда, номеру партиции (логического диска) и далее реальный путь.

Иногда бывают такие ситуации, когда приходится работать с утилитами (бухгалтерскими, социальными, которые требуют обязательного наличия в компьютере внешнего носителя). Или же просто необходимо установить новую версию операционной системы . Но, что делать, если нет ни флешки, ни каких-либо свободных CD. Выход есть! Нужна специальная программа, которая будет работать как виртуальная флешка.

OSFmount- спасательный круг для тех, у кого нет под рукой съёмных носителей

OSFmount- это маленькая программка, которая поможет создать накопитель. Это приложение может создать как готовый образ (image) накопителя, так и RAM, который существует только в ОЗУ . Флоппи-винчестер, искусственный оптический диск, и,главное, виртуальная флешка - программа может монтировать все эти образы . Windows 10, Windows 8, Windows 7 виртуальная флешка создастся на любой операционной системе Windows, причём как в 64-битной среде, так и в 32-битной. В mount даже можно определять для искусственного диска определённую букву и устанавливать нужные атрибуты. При этом размер утилиты не дотягивает даже до 2 мегабайт, её размер всего 1,95 Мбайт. Из минусов только то, что программа не поддерживает русский язык.

Инструкция по использованию OSFmount

В использовании она лёгкая и для создания флешки не потребуется много времени и усилий. Итак, как создать виртуальную флешку на компьютере с помощью OSFmount:


Также в работе могут понадобятся некоторые опции, которые открываются после нажатия на «Drive Actions». В этой опции есть следующие:

  • Dismount - для размонтирования;
  • Format- с помощью этой опции можно совершать форматирование ;
  • Savetoimagefile - для сохранения в требуемом формате;
  • Open - для открытия;
  • Set media read-only - запрещает запись;
  • Extendsize - служит для расширения;
  • Set media writable -разрешает запись.

Вот так очень легко можно сделать virtual usb flash на компьютере. Образы для virtual flash можно выбирать любые. Но в случае с загрузочным image накопитель придётся отформатировать и открываться она будет только в этом приложении.

Альтернативной версией этого приложения является Virtual Flash Drive, которая также очень проста и удобна при создании искусственного хранилища информации. Их отличие в том, что в OSTmount больше дополнительных опций и помимо usb flash, можно делать другие искусственные накопители.

Заключение

Теперь становится понятно, даже если под рукой нет никаких внешних носителей, а они очень нужны, то можно в несколько кликов сделать их искусственно созданный аналог.

Публикации по теме