Встроенный Linux для чтения и записи видео с USB-порта - PullRequest
2 голосов
/ 06 октября 2010

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

Хостом можно считать настольный компьютер с некоторой версией Linux, а устройством, которое фактически выполняет эту обработку видео, является Gumstix, использующий встроенный Linux.

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 26 октября 2010
1000 портов USB доступны в двух вариантах; хост, который является контроллером шины и находится на ПК и устройстве или в Linux, говорит о гаджете (есть версия, обычно встречающаяся в фотоаппаратах, где порт может переключать тип при подключении, называемый USB на ходу). Порт хоста может подключаться к нескольким портам гаджетов (через концентраторы). Хозяин всегда очень хорошо контролирует гаджеты, работающие в качестве рабов. Аппаратное обеспечение для двух типов портов сильно отличается, и многие встроенные ядра содержат примеры каждого типа контроллера. Ядро Linux содержит драйверы хоста для аппаратного контроллера хоста OHCI EHCI и UHCI и различные драйверы протоколов (принтеры, клавиатуры и т. Д.). Для некоторых типов устройств в организации USB реализованы стандартные протоколы, поэтому вам не нужны драйверы производителей для накопителей USB, поскольку все они должны соответствовать бесплатному и общедоступному стандарту.

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

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

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

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

1 голос
/ 06 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...