[V4L2] Краткое описание платформы V4L2

Оглавление статей серии

[V4L2] Краткое описание платформы V4L2
[V4L2] Структура драйвера платформы V4L2
[V4L2] Подустройство V4L2


Введение: V4L2 — это набор видеоплатформ, специально разработанных для устройств Linux. Его основная основа находится в ядре Linux и может пониматься как платформа драйверов захвата источника видео во всей системе Linux. Он широко используется во встраиваемых устройствах, мобильных терминалах и персональном компьютерном оборудовании.Продукты кодирования на рынке, такие как: SDV, мобильные телефоны, IPC и записывающие устройства для вождения, используют эту структуру для сбора видео.Конечно, есть более мощные производители. Просто используйте набор фреймворков для сбора видео, реализованный самостоятельно, который является лучшим среди производителей. Следующее в основном относится к документации ядра Linux-4.4 для глобального введения в структуру V4L2.

Введение в структуру V4L2

Почти все устройства имеют несколько модулей IC. Они могут быть физическими (например, USB-камера содержит ISP, датчик и т. д.) или абстрактными (например, абстрактная топологическая структура USB-устройства) и находятся в каталоге /dev. Генерируется несколько узлов устройств, и эти модули IC также создают некоторые устройства, отличные от v4l2: DVB, ALSA, FB, I2C и устройства ввода. Именно из-за сложности аппаратного обеспечения драйвер v4l2 тоже стал очень сложным.

В частности, драйвер v4l2 должен поддерживать модули IC для операций микширования/кодирования аудио/видео, что еще больше усложняет драйвер v4l2. Обычно некоторые модули IC подключаются к драйверу основного моста через одну или несколько шин I2C, в то время как другие шины по-прежнему доступны. Эти микросхемы называются «подустройствами». Например, сенсор в устройстве камеры использует I2C. Обмен данными команды и использовать такие интерфейсы, как MIPI или LVDS, для передачи данных изображения.

Долгое время этот фреймворк (отсылка к старому фреймворку V4L2) ограничивался созданием узлов устройств v4l и video_buf через структуру video_device для обработки видеоданных. Это означает, что все драйверы должны настроить экземпляр устройства и сопоставить его с дочерним устройством. Иногда эти шаги очень сложны и их трудно выполнить правильно, а некоторые драйверы никогда не пишутся так, чтобы правильно выполнять эти шаги. Из-за отсутствия фреймворка существует много общего кода, который не подлежит рефакторингу, что приводит к повторному написанию этой части кода, что относительно неэффективно.

Таким образом, этот фреймворк абстрагирует и строит коды, необходимые всем драйверам, и инкапсулирует их в отдельные модули, что упрощает рефакторинг общих кодов драйверов устройств. v4l2-pci-skeleton.c — очень хорошая справочная программа, это платформа драйверов для карты сбора данных PCI. Эта процедура демонстрирует, как использовать структуру драйверов v4l2, и эту процедуру можно использовать в качестве шаблона драйвера для карты видеозахвата PCI. Вы также можете обратиться к этому методу написания кода для контакта в начале.Конечно, наиболее подходящим кодом является код drivers/media/video/omap3ispв папке.Этот код в основном можно использовать как полный код экземпляра устройства ввода (поскольку он включает в себя ISP, CSI, видео и других устройств, а также имеет полный конвейер потока данных, который использует почти все аспекты инфраструктуры V4L2 и имеет большую справочную ценность) для написания собственного кода драйвера устройства в качестве справочного материала.


Схема платформы V4L2

Деконструкция чертежей

Это очень большая картинка, но я выбрал только одну из нее. Эта картинка упрощает подмодули в V4L2 (упрощена до названий подмодулей, без введения во внутреннюю реализацию). Общая картина выглядит следующим образом: Устройство
Топология устройства V4L2
V4L2 топология
Что вы думаете об этой картинке? Он имеет следующие ключевые факторы:

  • v4l2_device: это общая структура всего устройства ввода. Его можно рассматривать как вход во всю структуру V4L2, выступая в качестве менеджера драйверов и хранителя входа. v4l2_subdev является производным от этой структуры. Он используется для общего управления устройствами видеовхода.Существует столько абстракций v4l2_device, сколько существует устройств ввода (например, USB-камеру в целом можно рассматривать как устройство V4L2). Ниже расположены подустройства ввода, соответствующие таким устройствам, как ISP, CSI, MIPI и т. д. Они подчиняются устройству V4L2.

  • media_device: используется для управления потоком данных во время выполнения, встроено в устройство V4L2. Среда выполнения означает: устройство V4L2 может иметь множество подустройств одного и того же типа (два или более датчиков, интернет-провайдеров и т. д.), а затем в устройстве Как мне это сделать знаете, какой тип подустройства должен использовать мой поток данных при работе? В это время наступает очередь media_device: он устанавливает виртуальное соединение для этой группы подустройств, устанавливает конвейер времени выполнения (конвейер) и может динамически изменять и управлять подключенными устройствами во время выполнения.

  • v4l2_ctrl_handler: Модуль управления, который обеспечивает интерфейс работы со специальными эффектами для суб-устройств (в основном видео и ISP-устройств) в пользовательском пространстве. Например, если вы хотите изменить яркость, контрастность, насыщенность и т. д. выходного изображения, вы можете сделать это через это.

  • vb2_queue: Обеспечивает интерфейс передачи буфера между ядром и пользовательским пространством. Устройство ввода генерирует кучу данных изображения. Где его следует разместить в ядре? Сколько можно разместить? Является ли оно непрерывным в целом, непрерывным по частям или физически прерывистым? Как пользователи получают к нему доступ? Это все управляемо.

Иерархическая деконструкция

  1. Вы можете увидеть запись custom_v4l2_dev на картинке. Это структура, определенная пользователем. Важно не то, как она определена. Важно то, что она содержит структуру v4l2_device. Как упоминалось выше, эта структура предоставляет обзор и , что эквивалентно положению центрального офиса управления, тогда центральное правительство решает, что это абстракция всего устройства ввода (например, всего устройства ввода USB-камеры, например всего устройства ввода камеры IPC). Он также имеет структуру media_device, как уже говорилось выше, он управляет линией потока данных и занимается структурным планированием и управлением маршрутами.

  2. В v4l2_device имеется связанный список, который поддерживает огромную цепочку подустройств.Все подустройства тесно связаны с v4l2_device как центром посредством двунаправленной кольцевой структуры связанного списка ядра. Кроме того, media_device — это один за другим media_entity (сейчас вам не нужно знать его конкретное значение, вам просто нужно знать, что это абстрактное тело, подобное компонентам на печатной плате). малые круги.В их маленьком круге поток данных течет беспрепятственно в определенном порядке и перемещается свободно.

  3. В конце абстрагируется узел устройства /dev/videoX. Это роль Министерства иностранных дел, которое отвечает за обеспечение узла связи между ядром и пользовательским пространством. Следует отметить, что суть этого узла устройства по-прежнему является символьным устройством, его внутренний набор операций такой же, как и у символьного устройства, но он просто инкапсулирован.

  4. На данный момент абстрагирована приблизительная четырехуровневая структура V4L2, как показано на следующем рисунке:
    Вставьте сюда описание изображения

Supongo que te gusta

Origin blog.csdn.net/qq_44710568/article/details/132604220
Recomendado
Clasificación