LCD驅動程式移植

2021-07-13 07:40:38 字數 2106 閱讀 7097

對lcd的操作可以像串列埠一樣,通過終端裝置層的封裝(/dev/tty*裝置)來輸出內容,也可以通過frame buffer(/dev/fb*裝置)直接在視訊記憶體上「繪製」影象。

tty(終端裝置)和frame buffer驅動程式的框架:

下面根據每層的檔案講解一下上圖:

1)顯示驅動程式

2)鍵盤驅動程式

2.操作例項

1)對/dev/tty*呼叫write函式的過程

2)usb鍵盤被按下的函式呼叫過程

開始移植程式

從前面的框架圖可知,架構相關的**為drivers/video/s3c2410fb.c,移植思想是一樣的:先確定lcd控制器所用的資源,然後把它們加入平台裝置結構,最後修改**使這些資源可用。

1.平台裝置結構

2.底層驅動**分析及修改

s3c2410fb_probe函式完成初始化lcd控制器、註冊中斷處理函式、註冊frame buffer裝置等工作,流程圖如下:

在這個函式中,與開發板相關的就是mach_info結構。他是平台裝置s3c_device_lcd結構中的dev.platform_data成員。對於s3c2440,開發板初始化函式smdk2440_machine_init呼叫s3c24xx_fb_set_platdata函式來裝置;對於s3c2410,沒有設定。

smdk2440_machine_init函式在arch/arm/mach-s3c2440/mach-smdk2440.c中,如下:

smdk2440_lcd_cfg結構表示lcd控制器的一些配置,比如解析度、時間特性等,在後面會有詳細描述。

s3c24xx_fb_set_platdata函式在arch/arm/plat-s3c24xx/devs.c中,它直接將引數smdk2440_lcd_cfg賦給裝置平台裝置s3c_device_lcd結構中的dev.platform_data成員。**如下:

所以,對於s3c2440,需要修改smdk2440_lcd_cfg結構;對於s3c2410,仿照s3c241增加乙個smdk2410_lcd_cfg結構,並呼叫s3c24xx_fb_set_platdata函式來設定它。

smdk2440_lcd_cfg是s3c2410fb_mach_info型別的資料結構,這個型別在include/asm-arm/arch-s3c2410/fb.h檔案中定義,如下:

第32行的fixed_syncs被設為1時表示「固定的」時間引數和邊框大小,這意味著使用者應用程式無法調整解析度等引數。

第35行的type表示lcd的型別,從lcdcon1暫存器位[6:5]可以知道它有4種取值,如下:

第38、39行的width、height用來設定影象的寬度和高度,它們去取xres、yres的預設值。

下面修改**:

1.對於s3c2440單板

2.對於s3c2410單板

3.配置核心以使用lcd

下面為一些常規用法:

lcd驅動程式

ok6410lcd測試程式 1.在螢幕上分別顯示紅綠藍三個長方形 自定義結構體用來在使用者空間裡管理幀緩衝的資訊 typedef struct fd dev fb dev t 實現緩衝裝置的開啟和關閉操作的介面 int fb open fb dev t fbd,char fbn 獲取lcd的可變引數...

LCD裝置驅動程式

對螢幕進行抓屏 cp dev fb0 myfile.png 幀緩衝裝置的主裝置號29,次裝置號0 31,也就是dev fb0 dev fb31 填充乙個fbinfo結構。用register framebuffer fbinfo 將fbinfo結構註冊到核心,對於fbinfo結構,最基本的是fs op...

LCD驅動程式(一)

lcd顯示原理 在jz2440上,想要讓lcd顯示,需要幾個部分1 lcd硬體 2 開發板上的lcd控制器 3 sdram記憶體存放資料frambuffer 4 可能還需要乙個調色盤 實際上是一塊記憶體,裡面資料可以組成各種顏色 顯示原理 在開發板上操作lcd控制器,使得開發板向sdram記憶體裡去...