Программирование ARM Подключение камеры к LuckFox Pico через USB Fri, October 03 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Подключение камеры к 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, или любой другой:

T 809A USB hub

При подключении хаба вы должны увидеть в консоли 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, предназначенное для оцифровки аналогового видеосигнала.

Video capture device

При подключении этого устройства вы можете увидеть вот такие сообщения:

[  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` - имя устройства.
`534d:0021` - его идентификаторы Vendor ID и Product ID.

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 используется для получения дополнительной информации о видеоустройстве (например, список поддерживаемых форматов) и создания правильных симлинков в /dev/v4l/by-id/ и /dev/v4l/by-path/.
• Ошибка `No such file or directory` означает, что в вашей файловой системе Buildroot отсутствует исполняемый файл /lib/udev/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
[0]: 'MJPG' (Motion-JPEG, compressed) Size: Discrete 720x480 Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 640x480 Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Size: Discrete 480x320 Interval: Discrete 0.040s (25.000 fps) [1]: 'YUYV' (YUYV 4:2:2) Size: Discrete 480x320 Interval: Discrete 0.040s (25.000 fps)

Сделать снимок (если утилита fswebcam есть):

[root@luckfox root]# fswebcam -d /dev/video21 --no-banner test.jpg

Чтобы сделать снимок в формате JPEG с устройства /dev/video21 с помощью ffmpeg, используйте следующую команду:

[Базовая команда]

ffmpeg -f v4l2 -i /dev/video21 -frames:v 1 -q:v 2 output.jpg

Разбор параметров:

-f v4l2 - формат ввода (Video4Linux2)
-i /dev/video21 - устройство видеозахвата
-frames:v 1 - захватить только 1 кадр
-q:v 2 - качество JPEG (1-31, где 1 - лучшее качество)
output.jpg - имя выходного файла

[Дополнительные опции]

Указать разрешение:

ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video21 -frames:v 1 output.jpg

Указать формат пикселей:

ffmpeg -f v4l2 -input_format mjpeg -i /dev/video21 -frames:v 1 output.jpg

С предпросмотром доступных настроек:

# Посмотреть поддерживаемые форматы и разрешения
ffmpeg -f v4l2 -list_formats all -i /dev/video21

# Затем использовать подходящие параметры ffmpeg -f v4l2 -video_size 1920x1080 -input_format yuyv422 -i /dev/video21 -frames:v 1 output.jpg

С таймаутом (если камера медленно инициализируется):

ffmpeg -f v4l2 -i /dev/video21 -frames:v 1 -timeout 10000000 output.jpg

[Проверка результата]

После выполнения команды проверьте созданный файл:

file output.jpgls -la output.jpg

Если возникают проблемы с доступом к устройству, убедитесь, что у вас есть соответствующие права доступа к /dev/video21.

Если эти команды работают — камера функционирует правильно! Остальное — косметические улучшения.

[Решение проблемы с 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.

 

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


Защитный код
Обновить

Top of Page