Linux V4l2子系統專欄之一 子系統概述

2020-10-26 jerry的編程路

從本章開始,我們開始分析V4L2子系統(Video for Linux two),主要用於音視頻設備的框架。V4l2

主要用於驅動視頻輸出設備(video outpt interface)、Video overlay interface、Video output overlay device、

VBI interface、Radio interface等。本專欄主要分為如下幾章:

一、LINUX V4L2子系統概述

二、LINUX V4L2相關數據結構說明

三、LINUX video device分析

四、linux v4l2 device分析

五、linux v4l2 ctrls分析

六、linux v4l2 sub-device分析

七、linux v4l2 filehandler分析等幾部分

八、linux v4l2 videobuffer介紹


一、v4l2子系統框架

如下即為v4l2子系統框架,針對v4l2子系統而言,其主要通過字符設備節點與應用層交互:

  1. 通過字符設備文件,應用程式可通過字符設備文件完成與具體v4l2 device的通信;

而在v4l2子系統內部,則主要包括如下幾方面的內容:

  1. video_device結構體用於創建v4l2 device對應的字符設備節點,該數據結構包含了指向v4l2-dev的指針、字符設備指針(struct cdev類型)、字符設備文件相關的操作接口指針、v4l2 control handler、v4l2_fh;
  2. v4l2_dev則是對一個v4l2_dev的抽象,該v4l2_dev管理該device下所有的子設備(即v4l2_subdev),若該v4l2_dev沒有子設備,則v4l2_dev的作用應該不大,基本上針對沒有子設備的v4l2,藉助video_device操作,即可完成針對該v4l2_dev的訪問操作(通過字符設備的讀、寫、ioctl接口即可);
  3. V4l2_subdev則代表一個v4l2 dev的子設備,針對一個v4l2 dev,可以完成各種任務操作,但通常他們負責音視頻復用和編解碼。如網絡攝像頭的子設備通常是傳感器和攝像頭控制器。 針對v4l2_subdev則提供了該子設備的操作接口等信息,可實現與子設備的通信操作;
  4. V4l2_fh則對應一個已打開的v4l2_dev字符設備file,可以理解為該打開字符設備file的handler,一般為該字符設備文件的私有v4l2_dev變量;通過v4l2_fh,可以使用v4l2子系統提供的v4l2 control handler以及v4l2 event相關機制;
  5. V4l2 event機制主要實現將v4l2 dev的觸發事件發送給應用程式,主要藉助poll 、wait機制實現。
  6. v4l2_ctrl_handler是v4l2設備控制方法集的結構體,可通過字符設備文件提供的ioctl接口訪問對應的方法
  7. videobuff用於v4l2的buff操作,針對v4l2 device,主要有三種IO訪問方法(read/write)、內存映射緩衝區(內核驅動申請緩存並mmap至應用層)、USERPTR(

應用層負責分配內存空間,通過指針的形式傳遞給V4L2子系統驅動,V4L2 device driver會把捕獲的內容保存至指針所指的空間)

以上即是本章的主要內容,簡要說明了v4l2 子系統的幾個大的模塊。從現在開始即要進入v4l2子系統的分析,如有存在錯誤的地方,還希望大家能斧正,我也是在學習中,難免存在錯誤。

相關焦點

  • LINUX IIO子系統專欄分析之一 IIO子系統概述
    從本章開始,我們進行IIO子系統專欄的分析文檔,本次IIO子系統專欄分析文檔大概包含如下幾章:一、 IIO子系統概述二、IIO子系統相關數據結構分析三、iio trigger 介紹四、iio event介紹五、iio buffer介紹六、iio device的註冊與註銷介紹七、iio trigger
  • Linux regmap子系統分析之一 系統概述
    本系統專欄主要涉及如下幾個子章節:一、regmap子系統概述二、regmap子系統數據結構分析三、regmap子系統接口說明四、regmap bus實例說明(以i2c為例)本章我們主要對regmap子系統做一個簡單的說明。
  • LINUX CommonClock Framework子系統分析之一 系統概述
    本專欄主要介紹linux的ccf子系統,主要用於系統clock的管理等操作。本專欄我們大概分為如下幾章進行學習:一、CCF子系統概述二、CCF子系統數據結構分析及關聯說明三、CCF子系統的clk註冊與註銷接口實現分析四、虛擬的clk設備驅動實現 本章我們主要進行CCF子系統的概述。
  • Linux regulator子系統分析之一 總體概述
    Linux regulator 子系統主要用於管理電壓、電流電源設備的電壓、電流輸入使能、動態調整電壓、電流等,屬於電源管理的一部分。從本章開始我們分析regulator子系統。主要分為如下幾部分:一、regulator子系統總體概述二、regulator相關數據結構分析三、regulator相關註冊、註銷函數分析四、regulator設備驅動實現本章主要對regulator子系統進行簡要說明。
  • LINUX 中斷子系統專欄之一 子系統架構簡述
    因此這周就簡要介紹irq子系統框架,然後再開發一個虛擬的irq controller driver 。針對irq 子系統專欄,主要包括如下兩部分內容:一、IRQ子系統框架簡述二、虛擬IRQ CONTROLLER DRIVER實例本篇主要是IRQ子系統框架簡述,本篇文章主要分為如下幾個小章節:一、IRQ相關概念說明二、IRQ子系統相關數據結構及其關聯說明三、IRQ子系統提供的相關接口對於irq
  • Linux GUI子系統概述 GUI子系統的構成及工作流程
    Linux GUI子系統概述 GUI子系統的構成及工作流程 Nick 發表於 2020-12-05 10:45:54 作者:Nick 開始前的幾點說明
  • win10安裝linux子系統(wsl)
    win10安裝linux子系統(wsl)1、打開Microsoft Store方式一:在電腦左下角打開方式二:在電腦左下角的搜索裡2、允許windows運行linux子系統打開控制面板->程序和功能->啟動或關閉windows功能勾上「適用於Linux的Windows子系統」,點擊確定,然後按提示重啟電腦。
  • 驅動調試(三)-V4L2 driver 整體架構
    1.從字符設備開始:悉v4l2用戶空間編程的都知道, v4l2編程主要是調用一系列的ioctl函數去對v4l2設備進行打開, 關閉, 查詢, 設置等操作. v4l2設備是一個字符設備, 而且其驅動的主要工作就是實現各種各樣的ioctl.
  • Linux input子系統編程、分析與模板
    內核中的輸入子系統自底向上分為設備驅動層,輸入核心層,事件處理層。由於每種輸入的設備上報的事件都各有不同,所以為了應用層能夠很好識別上報的事件,內核中也為應用層封裝了標準的接口來描述一個事件,這些接口在"/include/upai/linux/input"中。
  • 剛知道,原來win 10內置了一個Linux子系統
    win 10上安裝linux是沒必要這麼麻煩的,win 10自帶了一個linux子系統,只是大家沒有發現而已。下面筆者就為大家介紹一下win 10的Linux子系統。筆者的電腦上已經裝好了這個子系統,打開它的方式非常簡單,就像打開普通的程序一樣,接下來筆者給大家說一下安裝子系統的具體步驟。
  • win10子系統kali-linux安裝圖形化界面總結
    之前是有個虛擬機的,後來發現win10專業版自帶有linux子系統。於是就安裝使用了一下。由於網上一些安裝圖形化界面的教程因為時間太久等原因有些不能用了。所以整理了這份文檔,供後來人避坑。環境系統:win10專業版開啟:開發者模式和Windows功能(適用於Linux的Windows子系統)下載&安裝打開win10自帶的MicrosoftStore(應用商店),搜索linux,就可以找到
  • LINUX IIO子系統分析之三 IIO trigger分析
    則主要用於創建虛擬的irq chip,在trigger內部,當多個trigger consumer註冊時,則trigger內部會為其分配一個虛擬的irq,並根據trigger consumer提供給pollfunc,為該irq註冊中斷處理函數,這樣當該trigger觸發後,則會遍歷所有該trigger上已註冊的虛擬irq,調用其中斷處理函數從而執行trigger consumer提供的處理函數(關於linux
  • 打造適用於 Linux 的 Windows 子系統——替代虛擬機的好幫手
    如今微軟在Windows10系統中,推出了適用於 Linux 的 Windows 子系統,說簡單點,就是把Linux發行版當作桌面應用安裝在Windows10中。準備工作控制面板——> 程序——> 程序和功能——> 啟用或關閉 Windows 功能——> 適用於 Linux 的 Windows 子系統——> 確定 (然後重啟)
  • 「正點原子Linux連載」第五十八章Linux INPUT子系統實驗
    第五十八章Linux INPUT子系統實按鍵、滑鼠、鍵盤、觸控螢幕等都屬於輸入(input)設備,Linux內核為此專門做了一個叫做input子系統的框架來處理輸入事件。輸入設備本質上還是字符設備,只是在此基礎上套上了input框架,用戶只需要負責上報輸入事件,比如按鍵值、坐標等信息,input核心層負責處理這些事件。
  • 簡單分析「Windows將被微軟放棄淪為Linux子系統」
    昨天看一個消息:有觀點認為Windows將被微軟放棄而淪為Linux子系統 – Windows – cnBeta.COMhttps://www.cnbeta.com/articles/tech/1034593.htmWindows
  • win10子系統下OpenFoam的安裝
    1.安裝Ubuntu子系統 打開控制面板-程序-程序和功能-啟用或關閉windious功能欄,然後勾選適用linux的windious子系統對話框。
  • Windows10安裝Linux子系統 + ROS(告別雙系統和虛擬機)
    然後裝個雙系統吧,來回切系統極不方便,有時候一天開機十幾次。在Linux下跑東西時,自己又啥也不能幹。而且安裝雙系統時,很有可能把自己原來的windows搞崩潰。那麼,告別這些遠古時代的操作,我們在win10下安裝Linux子系統。
  • Win10如何訪問Linux子系統文件
    這就可以讓我們在一臺電腦中同時運行Windows10和Linux系統時實現文件互訪。下面MS酋長就來演示一下Windows10如何訪問Linux子系統中的文件:首先,你要想體驗該功能,你必須已經在Windows10中啟用WSL並安裝Linux子系統,並且想要訪問的Linux子系統必須是處於運行狀態,不過以後微軟應該會完善該功能,實現在Linux子系統未運行狀態也能被訪問文件。
  • Linux設備驅動進階學習專欄匯總(強烈建議收藏)
    LINUX VFS系統專欄該專欄偏重於代碼的分析,主要基於linux 3.10內核分析的,不建議大家詳細看了,大概看下前三章就可以了(好久沒有看,這部分我也忘的差不多了。。。)。、字符設備、混雜設備、RTC子系統、IIC子系統、SPI子系統、MMC子系統、MTD子系統、NAND子系統、UART子系統、TTY子系統、MII BUS子系統、INPUT子系統、LED子系統、HWMON子系統、GPIO子系統、PWM子系統、PINCTRL子系統、REGULATOR子系統、CCF子系統、REGMAP子系同等。
  • Linux regmap子系統分析之二 從數據結構分析系統實現
    一、數據結構間的關聯及說明 針對regmap子系統,我們首先要知道regmap子系統要解決的痛點是什麼?另外有的設備廠家針對一款設備可能存在iic接口與spi接口兩種可選的接口方式,針對這一類設備進行設備驅動開發時,該驅動也會抽象出統一的讀寫接口(如AD913x型號、AD538x型號的設備,就包含兩種接口類型的型號);基於以上考慮,linux內核子系統提供了regmap子系統,該子系統對外提供統一的讀寫接口,而針對AD913x型號、AD538x型號的設備驅動而言,則只需要提供兩種類型的probe、remove