Linux: как передать данные через USB-накопитель конечной точки драйвера cd c -adm из пользовательского пространства - PullRequest
0 голосов
/ 26 февраля 2020

Я новичок в Linux драйверах, и я начал с написания приложения для USB-устройства на базе CD c -ACM в linux. Поэтому я использовал драйвер cdc_acm. Устройство USB, которое я использую, имеет 2 массовых конечных точки (чтение и запись) и одно прерывание конечной точки.

Теперь мой вопрос заключается в том, работают ли все эти конечные точки в одном и том же файле / dev / ttyACM0, и как вызов write для этого tty-файла get transform to acm_write_bulk fops call?

Если я запишу данные для запуска функции USB в файл ttyACM0, будут ли данные отправляться через конечную точку массового вывода? Или как я должен отправить данные в конечную точку массива непосредственно из пространства пользователя. Должен ли я написать какой-либо драйвер поддержки в пространстве ядра? Точно так же, как я могу прочитать данные из конечной точки прерывания в пространстве пользователя?

Заранее благодарен за вашу помощь.

1 Ответ

0 голосов
/ 26 февраля 2020

Нет необходимости писать драйвер пространства ядра. Вы можете открыть /dev/ttyACM0 с помощью системного вызова open, установить для него параметры, используя term ios (необязательно), а затем использовать системные вызовы read и write для чтения и записи. объемные данные с вашего устройства. К этим системным вызовам проще всего обращаться из C и C ++, но большинство языков имеют библиотеку, которую можно использовать для доступа к последовательным портам.

Я не знаю отличного способа чтения данных из конечной точки прерывания. в Linux но вы, по крайней мере, можете взглянуть на ioctl TIOCMGET, TIOCGICOUNT и TIOCMIWAIT, в которых вы действительно нуждаетесь.

Интерфейс последовательного порта Linux абстрагирует все подробности о USB, конечных точках и массовых передачах, поэтому вы можете использовать более простой и абстрактный API для связи с последовательным портом. Фактически, вы можете использовать один и тот же код на любом типе последовательного порта, независимо от того, какой драйвер ядра реализует последовательный порт. Это может помочь вам найти в Inte rnet такие вещи, как "linux программирование последовательного порта" или "программирование последовательного порта posix", чтобы понять, как это сделать.

Если вам действительно интересно как работает драйвер Linux CD C ACM и как он преобразует системный вызов write в соответствующую передачу USB, вы можете прочитать источник драйвера cd c -acm . Тем не менее, это способ помимо того, что вам нужно сделать, чтобы просто использовать последовательный порт.

...