Встроенный Linux считывает и записывает видео с USB-порта


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

Хостом можно считать рабочий стол, работающий под управлением некоторой версии Linux, и устройство, которое на самом деле делает это видео процессинг - это Gumstix под управлением embedded Linux.

Я в основном теряюсь в том, как начать этот проект или что исследовать в разделе ввода / вывода в Linux. Во-первых, можно ли одновременно читать видео, записывать видео и отправлять команды через один и тот же USB-порт? Видео относительно небольшое, особенно после сжатия устройством, поэтому пропускная способность не является проблемой. Основная проблема заключается в том, чтобы знать, с чего начать исследования для этого проекта. Есть ли что-нибудь вроде TCP / IP для USB, где вы могли бы открыть несколько соединений между хостом и устройством для передачи данных?

Придется ли нам писать собственные драйверы USB-устройств? Разработать свой собственный протокол или USB поддерживает выполнение нескольких вещей на одном порту относительно легко?

Должен ли я начать исследовать драйверы Linux, программирование на уровне пользователя и API или протокол USB? Или что-то совсем другое?

Я старший студент-компьютерщик, поэтому мой уровень опыта-это смесь программирования в C, C++, Java, Verilog, TCL и т. д. Почти все Программирование, связанное с сокетами, было в Java (OS independent), поэтому я действительно не знаю, с чего начать написание приложения Linux для выполнения такой задачи. У меня был приличный опыт работы с микропроцессорным программированием (AVR, coldfire), но опять же, несмотря на то, что он близок к тому, что мне нужно, он не очень помогает мне понять, с чего начать.

2 2

2 ответа:

Порты USB бывают двух видов; хост, который является контроллером Шины и находится на ПК и устройстве или в Linux, говорит гаджет (есть версия, обычно встречающаяся в фотокамерах, где порт может переключать тип при подключении, называемом USB on The go). Порт хоста может подключаться к нескольким портам гаджетов (через концентраторы). Хозяин всегда очень сильно контролирует гаджеты, работающие как рабы. Аппаратное обеспечение для двух типов портов очень различно, и многие встроенные ядра содержат примеры каждого из них. тип контроллера. Ядро Linux содержит драйверы хостов для оборудования OHCI EHCI и UHCI Host controller, а также различные драйверы протоколов (принтеры, клавиатуры и т. д.). Для некоторых типов устройств организация USB внедрила стандартные протоколы, поэтому вам не нужны драйверы производителей для USB-накопителей, поскольку все они должны соответствовать свободному и общедоступному стандарту.

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

Каталог гаджетов также включает в себя набор драйверов протоколов. Один трюк, который мог бы сэкономить много работы, состоял бы в настройке вашего устройства, чтобы выглядеть как сетевой интерфейс USB, это позволяет избежать написания большого количества низкоуровневых материалов, и вы можете воспользоваться преимуществами сетевых диагностических инструментов, и уровень USB абстрагируется от вашего устройства. применение на обоих концах. Это даже работает с хостом Windows без необходимости писать пользовательские драйверы Windows (XP поддерживает только протокол Microsoft RNDIS USB, а драйвер Windows глючит и может зависать при отключениях, но ядро включает оболочку RNDIS, и это решение может быть сделано, чтобы хорошо работать).

Я не был уверен из вашего вопроса, Является ли источник видео независимым USB-устройством, в этом случае ему потребуется отдельный порт USB-хоста на вашем устройстве или если он был поставлен хозяин.

Получите свой собственный набор источников ядра и изучите каталог USB gadget, а также загрузите спецификации USB из USB.org вы захотите понять главы 8 9 10 11, поскольку они объясняют, что происходит, когда хост обнаруживает гаджет, а также концепцию конечных точек. Mindshare сделал USB-книгу, которая была в порядке, как быстрое введение в USB.

То, что вы хотите, называется драйвером "гаджета" в Linux - драйвером, который заставляет Linux действовать как USB-устройство. Эта статья LWN на USB composite framework является хорошей отправной точкой.