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...