Удивительно , как много документации вы можете найти для Video4Linux2 - и ни один из них на самом деле не объясняет , что Video4Linux есть .
Во-первых, Video4Linux2 - это каркас драйвера для Linux . Драйверы платформы на самом деле не контролируют устройства напрямую. Вместо этого они предоставляют абстрактную модель некоторого класса устройств, в данном случае это видеоустройства для приложений. Платформы драйверов предоставляют три основных преимущества:
- Предоставить унифицированный API для приложений, которые можно использовать с очень широким спектром физических устройств, независимо от того, подключены ли они через USB, PCIe, MIPI, Ethernet или другой тип шины передачи данных
- В ядре платформы содержат тип кода, который требуется почти во всех драйверах устройств определенного класса, что значительно сокращает объем разрозненного кода.
- В ядре фреймворки обеспечивают план написания новых драйверов более низкого уровня, которые фактически управляют оборудованием, тем самым упрощая разработку драйверов.
Таким образом, драйвер V4L2 является драйвером высокого уровня, который управляет драйвером UVC, который управляет драйвером USB, который может управлять драйвером даже более низкого уровня.
Эта модель Matryoshka очень распространена в дереве драйверов ядра Linux. V4L2 является одним из более сложных примеров, потому что некоторые устройства камеры требуют доступа к большим группам вспомогательных устройств в нескольких слоях, которые управляют камерой и направляют вывод камеры между различными компонентами, такими как процессоры изображений.
Вы по-прежнему можете обращаться к драйверу UVC напрямую из пространства пользователя, используя файл устройства и системные вызовы «ioctl», не обращаясь к драйверу V4L2, и вы по-прежнему можете обращаться к базовому драйверу USB напрямую из пространства пользователя, используя его файл устройства и файлы «ioctl».
Являясь общей структурой, предоставляющей функциональные возможности, общие для широкого спектра устройств, V4L2 не предоставляет вам всех функциональных возможностей, которые может предоставить драйвер UVC (при условии, что ваше устройство фактически обеспечивает больше функциональных возможностей UVC, чем требуется для поддержки V4L2) ,
Таким образом, если бы у вас было устройство UVC, обеспечивающее все функции, указанные в спецификации UVC, то для фактического использования некоторых из этих функций вам потребуется прямой доступ к драйверу UVC через файл устройства и систему «ioctl». вызывает, предполагая, что драйвер ядра ядра Linux на самом деле поддерживает все спецификации UVC.
Однако значение
Реализация драйвера uvcvideo относится только к API V4L2
в том, что в текущем ядре Linux драйвер UVC фактически не обеспечивает больше поддержки функций UVC, чем необходимо для V4L2.
Поддержка V4L2 в ядре сама по себе не обеспечивает поддержку UVC или USB или аппаратную поддержку USB более низкого уровня.