Raspberry Pi с сервером Ubuntu 24.10 – устройство отображается на Mac как g_ether гаджет, но не как веб-камера (uvc)

Вопрос или проблема

Я пытаюсь создать “виртуальную веб-камеру” на Raspberry Pi Zero 2 W с Ubuntu 24.10.

Я работаю через этот учебник:

https://developer.ridgerun.com/wiki/index.php/How_to_use_the_UVC_gadget_driver_in_Linux

где они хотят создать “виртуальную веб-камеру”, чтобы передавать видео так, как будто оно поступает с локально подключенной камеры.

Я прошел по скрипту (прилагается ниже) до конца, и все работало, но устройство не отображается на моем Mac как USB-устройство. Я смог настроить это же устройство как g_ether, просто загрузив модули, и оно определяется на Mac, так что я знаю, что мое оборудование/кабели в порядке.

Сообщение dmesg показывает:

[  923.318812] configfs-gadget.g1 gadget.0: uvc: uvc_function_bind() [  923.320674] dwc2 3f980000.usb: bound driver configfs-gadget.g1

Однако Mac не видит его:

% system_profiler SPUSBDataType USB:

USB 3.1 Bus:

Host Controller Driver: AppleT6000USBXHCI

USB 3.1 Bus:

Host Controller Driver: AppleT6000USBXHCI

USB 3.1 Bus:

Host Controller Driver: AppleT6000USBXHCI

Я видел примечание о том, что нужно сделать:

echo peripheral > $UDC_ROLE

и я подозреваю, что проблема в том, что не устанавливается устройство в режим периферии, даже несмотря на то, что я указал это в /boot/firmware/config.txt как dr_mode=peripheral.

Скрипт указывает установить UDC Role так: UDC_ROLE=/sys/devices/platform/soc/78d9000.usb/ci_hdrc.0/role

Поскольку мой контроллер 3f980000.usb, я зашел в /sys/devices/platform/soc/3f980000.usb, но там нет папки ci_hdrc.0, и я искал файл с именем role, но ничего не нашел:

root@raspberrypi:/sys/devices/platform/soc/3f980000.usb# find . -name role -print

Буду признателен за любую помощь!

скрипт:

#!/bin/bash

# Переменные, которые нам нужны, чтобы упростить все позже.
#

set -e

# Сначала загрузите модуль libcomposite
modprobe libcomposite

UDC=`ls /sys/class/udc`
UDC_ROLE=/sys/devices/platform/soc/78d9000.usb/ci_hdrc.0/role
CONFIGFS="/sys/kernel/config"
GADGET="$CONFIGFS/usb_gadget"
VID="0x0525"
PID="0x0102"
SERIAL="0123456789"
MANUF=$(hostname)
PRODUCT="UVC Gadget"

mkdir -p $GADGET/g1
cd $GADGET/g1
echo $VID > idVendor
echo $PID > idProduct

mkdir -p strings/0x409

echo $SERIAL > strings/0x409/serialnumber
echo $MANUF > strings/0x409/manufacturer
echo $PRODUCT > strings/0x409/product

mkdir configs/c.1

mkdir configs/c.1/strings/0x409

CONFIG="configs/c.1"
FUNCTION="uvc.0"
mkdir functions/$FUNCTION

mkdir -p functions/$FUNCTION/streaming/uncompressed/u/360p

cat <<EOF > functions/$FUNCTION/streaming/uncompressed/u/360p/dwFrameInterval
666666
1000000
5000000
EOF

mkdir functions/$FUNCTION/streaming/header/h
cd functions/$FUNCTION/streaming/header/h
ln -s ../../uncompressed/u
cd ../../class/fs
ln -s ../../header/h
cd ../../class/hs
ln -s ../../header/h
cd ../../class/ss
ln -s ../../header/h
cd ../../../control
mkdir -p header/h
ln -s header/h class/fs
ln -s header/h class/ss
cd ../../../

echo 2048 > functions/$FUNCTION/streaming_maxpacket

ln -s functions/$FUNCTION configs/c.1

echo $UDC > UDC

echo "Готово. Список /dev/video*"

ls /dev/video*

Я пытался настроить устройство как в g_webcam, так и в configfs (по скрипту), и в обоих случаях устройство отображается как привязанный к UDC в dmesg, но устройство не обнаруживается на хосте (Mac).

Я пробовал использовать Raspberry Pi OS Lite 64 (Debian 12 Bookworm) и Ubuntu 24.10 и получаю такие же результаты. Оно будет определяться как g_ether, но не как g_webcam или через configfs.

Ответ или решение

Проблема, с которой вы столкнулись при настройке виртуальной камеры на Raspberry Pi Zero 2 W с использованием Ubuntu 24.10, может быть связана с различными факторами. Ваша цель – создать виртуальную веб-камеру так, чтобы она корректно отображалась на Mac, но в текущий момент устройство определяется только как g_ether (Ethernet), что указывает на то, что настройка USB-гаджета UVC (USB Video Class) прошла неудачно.

Вот несколько шагов и рекомендаций, которые могут помочь в решении вашего вопроса:

1. Проверка конфигураций USB

Убедитесь, что вы правильно задали режим работы порта USB в файле конфигурации. В вашем случае строка dr_mode=peripheral должна находиться в файле /boot/firmware/config.txt. Также проверьте, что другие опции, касающиеся USB, не находятся в конфликте с этой настройкой.

2. Установка роли UDC

Вы упомянули, что не можете найти файл role в системе. Это может быть проблемой. Чтобы проверить, что контроллер USB правильно опознан, выполните команду:

ls /sys/class/udc/

Подождите, пока система отобразит список доступных UDC (USB Device Controllers). Вам нужно будет указать правильный путь к role. Если вы не найдете ci_hdrc.0, то посмотрите другие директории, возможно, ваш UDC будет расположен по другому пути, например, /sys/class/udc/usb3_udc/role.

3. Правильная инициализация пакетов

Убедитесь, что вы вызвали команду echo peripheral > $UDC_ROLE перед связыванием UVC функции. Это гарантирует, что штука будет работать в режиме периферийного устройства, что необходимо для корректной работы веб-камеры.

4. Проверка дров и модулей

Проверьте, что все необходимые модули загружены. Используйте команду:

lsmod | grep uvc

Если модуль uvcvideo не загружен, выполните:

sudo modprobe uvcvideo

Это может потребоваться для корректной работы виртуальной камеры.

5. Логи и отладка

Посмотрите полные логи dmesg, чтобы понять, не возникает ли ошибок при инициализации UVC:

dmesg | grep uvc

Так вы сможете выявить возможные проблемы на этапе инициализации.

6. Проверка Mac

На стороне Mac можно использовать утилиты, такие как system_profiler SPUSBDataType для проверки, распознается ли устройство. Если устройство не отображается как веб-камера, это может указывать на то, что оно не пройдет процесс инициализации.

Заключение

Попробуйте выполнить вышеперечисленные шаги и проверьте статус вашего устройства после каждого изменения. Если проблема не решится, возможно, стоит попробовать использовать другой USB-кабель или порт. Не забывайте следить за обновлениями прошивки Raspberry Pi и изменениями в документации к вашему дистрибутиву. Это может помочь в устранении ошибок, связанных с совместимостью.

Если потребуется больше помощи, обратитесь к форумам Raspberry Pi или специализированным ресурсам, так как у вас уже есть базовые знания, и сообщество может предложить дополнительные советы или рекомендации.

Оцените материал
Добавить комментарий

Капча загружается...