FrameBuffer(LCD裝置層程式設計)

2021-09-25 10:44:10 字數 2222 閱讀 2971

大部分驅動程式都是核心自帶的,主要是為了進行驅動移植。驅動模型分為驅動層和裝置層。現在核心已經帶有驅動層帶**,還缺少裝置層**。我們可以根據核心提供的lcd驅動程式,分析出裝置層**。

在「平台裝置驅動之平台裝置」中,可以知道裝置層步驟:

1.裝置占用的資源;2.裝置的平台資料結構struct platform_data(可以從裝置相應的驅動程式中獲得);3.定義並填充struct platform_device結構;4.註冊;5.登出

而1,2中的問題可以從兩個方面得到:(1)裝置硬體原理圖;(2)驅動層的探測函式(probe)

s3c2410fb_probe       (drivers\video\s3c2410fb.c)

1 static int __init s3c24xxfb_probe(struct platform_device *pdev,

2enum s3c_drv_type drv_type)

3

platform_data是平台資料結構,其對應的是mach_info,struct s3c2410fb_mach_info();   (include\mach\fb.h)

1

struct s3c2410fb_mach_info ;

struct s3c2410fb_mach_info()中的struct s3c2410fb_display()

1

struct s3c2410fb_display ;

平台資料已經找到,接下來是平台資料的初始化和struct platform_device的定義          (arch\arm\mach-s3c2440\mach-mini2440.c)

1

//(arch\arm\mach-s3c2440\mach-mini2440.c)

2static

struct s3c2410fb_display mini2440_lcd_cfg __initdata =;

3031

32static

struct s3c2410fb_mach_info mini2440_fb_info __initdata =;

5051

#endif

5253

/*(arch\arm\plat-s3c24xx\dev.c)

*/54

55static

struct resource s3c_lcd_resource =,

61 [1] =

6667

};68

6970

//struct platform_device的定義 (arch\arm\plat-s3c24xx\dev.c)

7172

struct platform_device s3c_device_lcd =

81 };

我在看struct platform_device時,發現裡面少了struct platform_data的定義,於是便有了在probe函式中,為什麼struct s3c2410fb_mach_info *mach_info=pdev->dev.platform_data?

也就是說為什麼pdev->dev.platform_data結構型別會是struct s3c2410fb_mach_info, 比如在led驅動時,dev.platform_data的結構型別就會是s3c2410_leds_drv_data.led_pdata, 就是說platform_data是怎麼實現不同資料結構之間的賦值的?

經查詢資料知道,在dev.c ( arch\arm\plat-s3c24xx\dev.c)中,會呼叫函式void __init s3c24xx_fb_set_platdata(struct s3c2410fb_mach_info *pd), **如下

1

void __init s3c24xx_fb_set_platdata(struct s3c2410fb_mach_info *pd)

2 else

12 }

在這個程式完成了對dev.platformdata的定義,對函式void __init s3c24xx_fb_set_platdata(struct s3c2410fb_mach_info *pd)的理解,可以參考

p.s. void  __init s3c24xx_...注意(初始化函式)init前面的__ , 而不是_ ;之前在調程式時,遇到了這種提示,找了大半天才發現,是這錯了_^_

Framebuffer LCD驅動介紹

學習framebuffer過程中,最大的困惑不是fb層的各個資料結構的互動,而是stm32驅動lcd時的畫點,畫線,畫圈這樣的函式上哪去了。直到了解了lcd控制器的原理,總算知道了為什麼沒了。原來給lcd控制器承包了!在說framebuffer之前,得先提一下lcd控制器。如下圖 那麼我們要怎麼在應...

android layout weight設定解讀

參考文章 android layout weight的真實含義是 一旦view設定了該屬性 假設有效的情況下 那麼該 view的寬度等於原有寬度 android layout width 加上其在剩餘空間中的佔比!設螢幕寬度為l,在兩個view的寬度都為match parent的情況下,原有寬度為l...

Android RecyclerView設定空布局

1 自定義乙個emptyrecyclerview繼承recyclerview 2 採用adapterdataobserver觀察者模式來監聽資料的變化,如果有資料就隱藏空布局,反之,則顯示。view memptyview private adapterdataobserver emptyobserv...