2013-07-12 2 views
11

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

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

ответ

0

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

+0

Нет, к сожалению, у меня нет такого доступа к коду, все, что я могу сделать, это добавить модули ядра и запустить тестовые приложения.Тесты выполняются на удаленном сервере –

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 или что-то еще), вы сами по себе. С достаточным количеством пота и слез крови вы можете написать свой собственный тип гаджета. (В идеале, используйте как можно больше в пользовательском пространстве и обрабатывайте только критически важные компоненты в ядре ..)

Остерегайтесь: невозможно одновременно понять и оценить USB.

+1

Это было бы идеально, если бы у меня был физический доступ к тестовой системе; к сожалению, я этого не делаю. Однако драйверы гаджета Linux могут пригодиться ... Я планирую писать драйвер USB, который при инициализации автоматически регистрирует виртуальное USB-устройство, которое отражает дескрипторы устройства, конфигурации и интерфейса, найденные в источнике гаджета Linux. Может ли это работать? –

+0

выглядит так, что модуль ядра был переименован в 'usb_f_mass_storage.ko'. см. [link] (https://github.com/torvalds/linux/blob/master/Documentation/usb/gadget-testing.txt) – netvope

Смежные вопросы