Как включить вывод звука с помощью pulseaudio во время работы?

USB является асимметричным :Существуют ведущие устройства USB (ваш ПК )и ведомые устройства USB (устройства ). Вот почему существует два разных типа USB-разъемов: тип A для ведущих и тип B для ведомых, хотя различие становится размытым из-за того, что разработчики оборудования используют тип A везде, а USB OTG может делать и то, и другое.

USB-гаджеты Linux — это модули ядра, представляющие USB-устройство на ведомом USB-контроллере. Им нужен (ведомый -)хост-контроллер (HC )для подключения; во встроенной системе Linux, представляющей устройство, это будет драйвер для контроллера USB. На ПК нет железа.

Но есть еще один модуль ядра, который может имитировать подчиненный контроллер USB:dummy_hcd. Этот модуль предоставляет виртуальный (ведомый -)хост-контроллер для подключения гаджетов и виртуальный (главный -)хост-контроллер, который дает вам дополнительную шину USB, на которой отображаются эти устройства.

Пример:

# modprobe dummy_hcd
# lsusb
...
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# modprobe g_serial
# lsusb
...
Bus 005 Device 002: ID 0525:a4a7 Netchip Technology, Inc. Linux-USB Serial Gadget (CDC ACM mode)
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

И вы получаете два новых узла устройства, /dev/ttyGS0из g_serialдля гаджета и /dev/ttyACM0из автоматически загружаемого модуля cdc_serial, представляющего устройство. Вы можете проверить, что они взаимодействуют, записывая в один и читая из другого.

Существует также g_webcamдрайвер гаджета UVC. Он создает новое /dev/video*устройство, и, как и /dev/ttyGS0выше, вы можете передавать потоковое видео на это устройство, чтобы использовать гаджет.И это то, что делает ваша uvc-gadgetпрограмма пользовательского пространства :Она либо берет статическое изображение, либо вводится другое существующее «настоящее» устройство UVC и передает его во вновь созданное /dev/video*, чтобы вы могли передать свое USB-устройство. реальные данные и посмотрите, правильно ли они выводятся на USB-мастере, который использует это устройство.

Однако это не работает с шиной dummy_hcd(Я попробовал только что ):Как и выше, второе/dev/video*устройство должно быть создано модулем ядра USB на главная сторона, которая использует веб-камеру. Этого не происходит; вместо этого система USB становится настолько запутанной через короткое время, что я больше не могу использовать клавиатуру и мышь.

Так что либо g_webcamглючит, либо возможно видеоподсистема пытается создать оба устройства с одним и тем же идентификатором и потом ломается, а может еще что. Я не знаю.

Таким образом, это может работать только в реальной встроенной системе с настоящим (ведомым -)хост-контроллером.

Итак, да, есть доступные инструменты, которые могут это сделать, но, к сожалению, симуляция содержит ошибки, если вы хотите, чтобы симулируемое устройство отображалось на том же компьютере (и на обычном ПК ). Это может по-прежнему работать на встроенной системе (, вы не сказали, где и как вы хотите использовать эмулируемое устройство ).

0
10.06.2021, 13:16
0 ответов

Теги

Похожие вопросы