Эмулятор для массового хранилища FAT32 с файлом устройства

#filesystems #emulation #smartcard #javacard #usb-mass-storage

#файловые системы #эмуляция #смарт-карта #javacard #usb-mass-storage

Вопрос:

У меня есть карта miniSD, похожая на смарт-карту (насколько я знаю, это javacard), и я пытаюсь написать для нее эмулятор, который работает на Windows и Linux. Эмулятор будет использоваться в тестах интеграции программного обеспечения. Я хочу протестировать свой клиент без использования фактического оборудования по нескольким причинам. Одна из причин заключается в том, что фактическое оборудование необратимо изменит свое состояние и не допускает полного сброса.

Устройство реализует массовое хранилище с файловой системой FAT32. Он содержит специальный файл устройства, который используется для управления устройством с помощью простых операций записи / чтения файлов.

Моя цель состоит в том, чтобы виртуальное (эмулируемое) устройство отображалось с буквой диска в проводнике Windows сразу после запуска эмулятора, подобно тому, как если бы кто-то действительно подключал реальное устройство.

Интересно, есть ли какой-нибудь открытый программный проект, на котором я мог бы основать свою программу? Очевидно, что самые большие проблемы

  • Предоставление / разработка «виртуального» (USB / SD) устройства массового хранения
  • Перехват операций ввода-вывода файлов в специальном файле устройства.

Согласно Википедии, файлы устройств являются распространенным способом упрощения разработки драйверов. Итак, я подумал, существуют ли существующие решения для эмуляции для разработчиков драйверов. По крайней мере, я не смог найти ни одного.

Важным первым шагом было бы моделирование самого файла устройства. Моей первой идеей было использовать обычный файл и взаимодействовать с клиентом путем фактического чтения / записи в этот файл во время его просмотра. Т.е. очистите файл, как только клиент записал в него, и запишите в него ответ. Я не знаю, может ли это вообще работать. Одна из проблем заключается в том, что клиент не открывает файл в режиме общего доступа, поэтому мой симулятор не может получить к нему доступ одновременно.

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

У Microsoft есть некоторая документация о том, как писать эмуляторы и драйверы USB-устройств, но она кажется очень сложной, и я подумал, есть ли существующее решение, которое можно было бы расширить:

Наконец, есть проект USB / IP, но я не знаю, полезен ли он, поскольку мне все еще нужно разработать драйвер, а затем я возвращаюсь к сложной документации MS выше.

Комментарии:

1. Смарт-карта и micro-SD настолько разные, что я не понимаю, что у вас есть и что вы пытаетесь. Смарт-карта обеспечивает гораздо больше, чем просто хранение и извлечение данных, что я не вижу, как специальный интерфейс устройства вписывается в общую картину.

2. Это Javacard, который содержит небольшой процессор, который позволяет запускать простые Java-программы. (Эта программа сама по себе скрыта и не подлежит замене). Вы можете выполнять запись в этот специальный файл для выполнения таких задач, как подписание данных или получение открытого ключа. Вы записываете несколько байтов, которые представляют операцию, а остальные байты являются аргументами. Затем вы считываете из файла, чтобы получить ответ. Удивительно, но вы также можете хранить дополнительные файлы, как на обычном microSD. При записи вы фактически не сохраняете данные. Карта перехватывает эти операции ввода-вывода.