Ответ 1
Лучший способ - использовать драйверы и оборудование для гаджетов 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) С небольшим повторным компиляцией или настройкой вы можете использовать эти универсальные устройства гаджета для обозначения различных идентификаторов USB или возврата различных строк поставщика и т.д. Это будет не то же самое, что "тестирование на реальном аппаратном обеспечении", но, по крайней мере, вы тестируете стандартную версию этих устройств.
4) Для типов устройств, которые еще не находятся в ядре (например, Wi-Fi или что-то еще), вы сами по себе. С достаточным количеством пота и слез крови вы можете написать свой собственный тип гаджета. (В идеале, как можно больше в пространстве пользователя, и обрабатывайте только критически важные компоненты в ядре..)
Остерегайтесь: невозможно одновременно понять и оценить USB.