linux lcd裝置驅動剖析一

2021-06-20 04:20:07 字數 1877 閱讀 7810

s3c2440 lcd驅動原始碼檔案是:drivers/video/s3c2410fb.c

看驅動原始碼首先當然是先看入口函式,這裡是s3c2410fb_init函式

int __init s3c2410fb_init(void)

出口函式,自然是登出s3c2410fb_driver平台驅動

static void __exit s3c2410fb_cleanup(void)

我們研究的是s3c2440,只關心s3c2410fb_driver,s3c2412fb_driver不用理會。

static struct platform_driver s3c2410fb_driver = ,

};

這裡看到s3c2410fb_driver的name欄位為s3c2410-lcd。回顧這錢前面章節說過的知識,如果linux系統中存在同名的平台裝置時,就會呼叫平台驅動的probe函式。這裡,如果存在有同名"s3c2410-lcd"的平台裝置,就會呼叫s3c2410fb_driver的s3c2410fb_probe函式。

在source  insight搜尋s3c2410-lcd,很快就能搜尋到arch/arm/plat-s3c24xx/devs.c中有那麼一段

struct platform_device s3c_device_lcd = 

};export_symbol(s3c_device_lcd);

其中平台裝置中比較重要的是成員是resource,這裡是s3c_lcd_resource

static struct resource s3c_lcd_resource = ,

[1] =

};static u64 s3c_device_lcd_dmamask = 0xfffffffful;

那麼接下來當然是要分析probe函式了

static int __init s3c2410fb_probe(struct platform_device *pdev)

s3c2410fb_probe函式呼叫s3c24xxfb_probe函式,這是lcd驅動的關鍵函式之一,留到"linux lcd裝置驅動剖析二"再分析,但是在分析這個函式前,需要來熟悉一下幾個結構體。

幀緩衝裝置為標準字元裝置,主裝置號為29,對應/dev/fbn 裝置檔案,幀緩衝裝置最關鍵的乙個資料結構是fb_info結構體,它包括了關於幀緩衝裝置屬性和操作的完整描述。

struct fb_info ;
s3c2410fb_info結構體,這是s3c2410抽像出來的特有資訊

struct s3c2410fb_info ;
s3c2410fb_display結構體,關於lcd引數的描述,如解析度,lcd型別,bpp等等

/* lcd description */

struct s3c2410fb_display ;

對於tq2440的液晶屏例項為tq2440_lcd_cfg,為方便查閱這裡省略了其他解析度的引數設定

/* lcd driver info */

static struct s3c2410fb_display tq2440_lcd_cfg __initdata = ;

s3c2410fb_mach_info結構體,它包括了s3c2410fb_display結構體

struct s3c2410fb_mach_info ;
要理解s3c24xxfb_probe函式,首先必須理清上面幾個結構體之間的關係。

Linux字元裝置驅動剖析

cpp view plain copy intmain intargc char argv 1 dev目錄下的裝置檔案基本上都是通過mdev來動態建立的。mdev是乙個使用者態的應用程式,位於busybox工具箱中。其建立過程包括 2 如果初始化過程中沒有呼叫device create介面來建立裝置...

Linux LCD 驅動程式概述

入局 應用程式是如何操控lcd顯示器的?我們知道應用程式的呼叫介面,無非open read write 然後通過驅動程式最終作用到硬體裝置上。以字元裝置為例,對於驅動的開發者,實現了應用程式呼叫的驅動層中與之相匹配的drv open drv read drv write函式,為應用層序提供了操作實際...

Linux LCD 驅動調色盤原理

舉例如下 red color 19 0x1f green color 10 0x3f blue color 3 0x1f color red 11 green 5 blue 格式5 6 5 vd 0 23 我們開發板只用了16位。frambuffer記憶體大小為2402320 硬體時序學習 vclk...