Насколько я знаю, драйвер устройства является частью программного обеспечения, которое может взаимодействовать с устройством определенного типа, подключенным к компьютеру.
В случае веб-камеры USB ответственным драйвером является UVC, который поддерживает любое устройство, совместимое с UVC. Это означает, что позволяет ОС или другой компьютерной программе получать доступ к аппаратным функциям без необходимости знать точные детали используемого оборудования.
По этой причине я установил драйвер устройства UVC Linux, выполнив:
opkg install kernel-module-uvcvideo
Веб - камера была признана ядром Linux: dev/video0
. Однако я все еще не мог выполнять потоковое видео с FFmpeg, так как мне не хватало V4L2 API. Я установил V4L2, настроив ядро.
Мои запросы:
- Как драйвер UVC и V4L2 связаны друг с другом?
- Какова цель API V4L2?
- Если бы я сначала не установил UVC, он будет установлен с V4L2?
LinuxTV ссылается: Реализация драйвера uvcvideo относится только к API V4L2 . Это означает, что UVC является частью V4L2 API?
Удивительно , как много документации вы можете найти для Video4Linux2 - и ни один из них на самом деле не объясняет , что Video4Linux есть .
Во-первых, Video4Linux2 - это каркас драйвера для Linux . Драйверы платформы на самом деле не контролируют устройства напрямую. Вместо этого они предоставляют абстрактную модель некоторого класса устройств, в данном случае это видеоустройства для приложений. Платформы драйверов предоставляют три основных преимущества:
Таким образом, драйвер V4L2 является драйвером высокого уровня, который управляет драйвером UVC, который управляет драйвером USB, который может управлять драйвером даже более низкого уровня.
Эта модель Matryoshka очень распространена в дереве драйверов ядра Linux. V4L2 является одним из более сложных примеров, потому что некоторые устройства камеры требуют доступа к большим группам вспомогательных устройств в нескольких слоях, которые управляют камерой и направляют вывод камеры между различными компонентами, такими как процессоры изображений.
Вы по-прежнему можете обращаться к драйверу UVC напрямую из пространства пользователя, используя файл устройства и системные вызовы «ioctl», не обращаясь к драйверу V4L2, и вы по-прежнему можете обращаться к базовому драйверу USB напрямую из пространства пользователя, используя его файл устройства и файлы «ioctl».
Являясь общей структурой, предоставляющей функциональные возможности, общие для широкого спектра устройств, V4L2 не предоставляет вам всех функциональных возможностей, которые может предоставить драйвер UVC (при условии, что ваше устройство фактически обеспечивает больше функциональных возможностей UVC, чем требуется для поддержки V4L2) ,
Таким образом, если бы у вас было устройство UVC, обеспечивающее все функции, указанные в спецификации UVC, то для фактического использования некоторых из этих функций вам потребуется прямой доступ к драйверу UVC через файл устройства и систему «ioctl». вызывает, предполагая, что драйвер ядра ядра Linux на самом деле поддерживает все спецификации UVC.
Однако значение
в том, что в текущем ядре Linux драйвер UVC фактически не обеспечивает больше поддержки функций UVC, чем необходимо для V4L2.
Поддержка V4L2 в ядре сама по себе не обеспечивает поддержку UVC или USB или аппаратную поддержку USB более низкого уровня.
источник