Подключение камеры к LuckFox Pico через USB |
![]() |
Добавил(а) microsin |
Здесь описывается подключение USB видеокамеры к плате LuckFox Pico Mini B, на которой работает сборка Linux Buildroot (см. Q006 [1]). Как это сделать, по шагам: 1. Первое, что необходимо сделать - сконфигурировать устройство USB платки LuckFox Pico Mini в режиме хоста USB. Как это делается, см. Q047 [1]. 2. После этого подключите источник питания +5V к контакту 1 (VBUS) платы. Это обеспечит питанием устройства, которые вы будете подключать к плате. Источник питания желательно использовать лабораторный, с установленным током защиты порядка 700 мА. 3. Подключитесь к консоли терминала Buildroot, чтобы можно было наблюдать сообщения системы. Для этого можно либо подключиться через UART (см. Q044 [1]), либо через SSH или ADB, если вы настроили сетевое подключение (см. Q036 [1]). 4. Для подключения к коннектору USB Type-C вам понадобится соответствующий USB-хаб, например T-809A, или любой другой: При подключении хаба вы должны увидеть в консоли Buildroot примерно такие сообщения: [root@luckfox root]# [ 187.785069] usb 1-1: new high-speed USB device
number 2 using xhci-hcd
[ 187.990667] hub 1-1:1.0: USB hub found
[ 187.991568] hub 1-1:1.0: 4 ports detected
[Подключение камеры] Теперь все готово к подключению камеры или другого видео-устройства через USB. Например, у вас есть устройство AV TO USB2.0, предназначенное для оцифровки аналогового видеосигнала. При подключении этого устройства вы можете увидеть вот такие сообщения: [ 561.525062] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
[ 561.687738] uvcvideo: Found UVC 1.00 device AV TO USB2.0 (534d:0021)
[ 561.688410] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported.
Enabling workaround.
[ 561.717315] udevd[703]: failed to execute '/lib/udev/v4l_id' 'v4l_id /dev/video21':
No such file or directory
[ 561.727917] udevd[705]: failed to execute '/lib/udev/v4l_id' 'v4l_id /dev/video22':
No such file or directory
Давайте разберем каждое сообщение из лога, чтобы понять, что происходит с подключением. В целом, сообщения говорят об успешном определении USB-видеоустройства, но с некоторыми незначительными проблемами совместимости и отсутствием вспомогательных утилит в вашей сборке Buildroot. 1. Устройство обнаружено [ 561.525062] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
Что это значит: ядро Linux Buildroot успешно обнаружило новое USB-устройство (вашу камеру) на порту `1-1.4` и присвоило ему номер `4`. Драйвер `xhci-hcd` (для USB 3.0/2.0) работает корректно. Это нормальное сообщение при подключении устройства. 2. Драйвер UVC загружен [ 561.687738] uvcvideo: Found UVC 1.00 device AV TO USB2.0 (534d:0021)
Что это значит: пожалуй самое важное и положительное сообщение. Ядро распознало ваше устройство как стандартную USB-видеокамеру (UVC - USB Video Class). Т. е. для системы не нужны проприетарные драйверы, она будет работать "из коробки" с драйвером `uvcvideo`. `AV TO USB2.0` - имя устройства. 3. Предупреждение о совместимости [ 561.688410] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported.
Enabling workaround.
Что это значит: драйвер `uvcvideo` обнаружил, что ваша камера не полностью соответствует стандарту UVC. В частности, она не поддерживает команду `GET_DEF(PROBE)`, которая используется для получения настроек по умолчанию. Однако драйвер включает в себя обходной путь (workaround) для таких случаев, и будет работать дальше. Это обычное предупреждение. Многие дешевые UVC-камеры (особенно преобразователи AV-to-USB) имеют небольшие несоответствия стандарту. На практике это редко мешает основной работе. 4. Ошибки udev [ 561.717315] udevd[703]: failed to execute '/lib/udev/v4l_id' 'v4l_id /dev/video21':
No such file or directory
[ 561.727917] udevd[705]: failed to execute '/lib/udev/v4l_id' 'v4l_id /dev/video22':
No such file or directory
Это основная проблема, но она не связана напрямую с драйвером камеры. • При создании устройств /dev/video21 и /dev/video22 демон udevd (который управляет устройствами в /dev) попытался запустить утилиту v4l_id. Это проблема, которую вероятно стоит решить. Без v4l_id пакет udev не сможет автоматически создать удобные симлинки, но сами устройства /dev/videoX будут созданы, и скорее всего будут полностью функциональны. Что делать дальше? 1. Проверьте работоспособность камеры (самое главное!) Убедитесь, что устройства создались, несмотря на ошибки: [root@luckfox root]# ls -la /dev/video*
При подключении камеры через USB (или устройства видеозахвата, которое система все равно видит как видеокамеру) вы должны увидеть в списке устройства /dev/video21 и /dev/video22 (или устройства с другими номерами). Обычно одно устройство используется для захвата видео, а второе — для метаданных или управления. 2. Попробуйте захватить изображение с помощью утилиты v4l2-ctl (должна быть в Buildroot). Посмотреть информацию о камере: [root@luckfox root]# v4l2-ctl --device=/dev/video21 --info
Driver Info:
Driver name : uvcvideo
Card type : AV TO USB2.0: AV TO USB2.0
Bus info : usb-xhci-hcd.0.auto-1.4
Driver version : 5.10.160
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : AV TO USB2.0: AV TO USB2.0
Serial : 20200909
Bus info : usb-xhci-hcd.0.auto-1.4
Media version : 5.10.160
Hardware revision: 0x00000121 (289)
Driver version : 5.10.160
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : AV TO USB2.0: AV TO USB2.0
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000010: from remote pad 0x100000a of entity 'Extension 3'
(Video Pixel Formatter): Data, Enabled, Immutable
Посмотреть поддерживаемые форматы и разрешения: [root@luckfox root]# v4l2-ctl --device=/dev/video21 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
Сделать снимок (если утилита fswebcam есть): [root@luckfox root]# fswebcam -d /dev/video21 --no-banner test.jpg
Чтобы сделать снимок в формате JPEG с устройства [Базовая команда]
Разбор параметров:
[Дополнительные опции] Указать разрешение:
Указать формат пикселей:
С предпросмотром доступных настроек:
С таймаутом (если камера медленно инициализируется):
[Проверка результата] После выполнения команды проверьте созданный файл:
Если возникают проблемы с доступом к устройству, убедитесь, что у вас есть соответствующие права доступа к Если эти команды работают — камера функционирует правильно! Остальное — косметические улучшения. [Решение проблемы с v4l_id (опционально)] Чтобы избавиться от ошибок в логе, вам нужно добавить утилиту v4l_id в вашу сборку Buildroot. 1. На хосте разработчика перейдите в каталог SDK и запустите конфигурацию Buildroot: $ cd ~/luckfox-pico/
$ ./build.sh buildrootconfig
2. Перейдите в раздел: Target packages -> Hardware handling -> udev -> udev rules pre-installation. 3. Найдите и включите опцию, которая добавляет `v4l_id` (часто она называется `Install udev rules for V4L devices` или просто `v4l_id`). Точное название может варьироваться. 4. Сохраните конфигурацию и пересоберите образ командой ./build.sh. 5. Прошейте новый образ на вашу плату LuckFox Pico. После этого при подключении камеры ошибки `failed to execute '/lib/udev/v4l_id'` должны исчезнуть, и появятся симлинки в /dev/v4l/by-id/. # ls -la /dev/v4l/by-id/
total 0
drwxr-xr-x 2 root root 80 Jan 1 00:09 .
drwxr-xr-x 4 root root 80 Jan 1 00:09 ..
lrwxrwxrwx 1 root root 13 Jan 1 00:09 usb-MACROSILICON_AV_TO_USB2.0_20200909-video-index0 -> video21
lrwxrwxrwx 1 root root 13 Jan 1 00:09 usb-MACROSILICON_AV_TO_USB2.0_20200909-video-index1 -> video22
6. Проверьте, что устройства /dev/videoX (в нашем примере video21, video22) доступны и работают. Если все хорошо, можете либо игнорировать ошибки, либо добавить v4l_id в образ Buildroot для чистоты логов и удобства. [Ссылки] 1. LuckFox FAQ. |