1. 程式人生 > 實用技巧 >《精通linux裝置驅動程式開發》 第12章視訊驅動程式 學習筆記

《精通linux裝置驅動程式開發》 第12章視訊驅動程式 學習筆記

主要內容:

  • 顯示框架
  • Linux視訊子系統
  • 顯示引數
  • 幀緩衝API

1.顯示框架

VGAVideo Graphics Array,視訊圖形陣列)是IBM提出的早期顯示標準,現在更多體現為解析度規範。嵌入式SoC通常有一個片上LCD控制器,在LCD控制器上輸出的是TTL訊號,許多手持裝置和電話使用QVGA型別的內部LCD面板,他們直接接收LCD控制器輸出的TTL平板視訊資料。

2.Linux視訊子系統

幀緩衝(frame buffer)是Linux視訊系統的核心概念,它進行了一般化的抽象並規定程式設計介面,可以與平臺無關的方式編寫應用層和較高核心層的程式。

因此,核心的幀緩衝介面允許應用程式與底層圖形硬體的變化無關,通用幀緩衝程式設計介面也使核心層與硬體無關。

3.顯示引數

有時,為了讓裝置能播放視訊,在編寫驅動程式的時候,只需要配置與顯示面板相關的屬性即可。

4.幀緩衝API

幀緩衝核心層向用戶空間輸出裝置結點,以便應用程式能訪問每個支援的視訊裝置。使用幀緩衝API主要要關心的資料結構定義在核心的include/linux/fb.h檔案中,而使用者側的定義在/usr/include/linux/fb.h檔案中。

4.1視訊卡的各個屬性儲存在struct fb_var_screeninfo內,該結構包含了很多欄位,比如X向解析度、一個畫素的位數、pixclockHSYNC範圍、VSYNC範圍和空邊長度。

struct fb_var_screeninfo {

    __u32 xres;

    __u32 yres;

    
/* ... */ __u32 bits_per_pixel; /* ... */ __u32 pixclock; __u32 left_margin; __u32 right_margin; /* ... */ __u32 hsync_len; __u32 vsync_len; /* ... */ };

4.2視訊硬體的固定資訊

struct fb_fix_screeninfo {
    char id[16];

    unsigned long smem_start;

    __u32 smem_len;

    
/* ... */ };