日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
嵌入式系統(tǒng)中LCD驅(qū)動的實現(xiàn)原理
嵌入式系統(tǒng)中LCD驅(qū)動的實現(xiàn)原理
 更新時間:2008-8-4 5:16:07  點擊數(shù):15
【字體: 字體顏色
: fb_write, /*寫操作*/

ioct1: fb_ioct1, /*I/O操作*/

mmap: fb_mmap, /*映射操作*/

open: fb_open, /*打開操作*/

release: fb_release,  /*關(guān)閉操作*/

}

 

其成員函數(shù)都在linux/driver/video/fbmem.c中定義,其中的函數(shù)對具體的硬件進行操作,對寄存器進行設(shè)置,對顯示緩沖進行映射。主要結(jié)構(gòu)體還有以下幾個。

 

Struct fb_fix_screeninfo:記錄了幀緩沖設(shè)備和指定顯示模式的不可修改信息。它包含了屏幕緩沖區(qū)的物理地址和長度。

Struct fb_var_screeninfo:記錄了幀緩沖設(shè)備和指定顯示模式的可修改信息。它包括顯示屏幕的分辨率、每個像素的比特數(shù)和一些時序變量。其中變量xres定義了屏幕一行所占的像素數(shù),yres定義了屏幕一列所占的像素數(shù),bits_per_pixel定義了每個像素用多少個位來表示。

Struct fb_info:Linux為幀緩沖設(shè)備定義的驅(qū)動層接口。它不僅包含了底層函數(shù),而且還有記錄設(shè)備狀態(tài)的數(shù)據(jù)。每個幀緩沖設(shè)備都與一個fb_info結(jié)構(gòu)相對應(yīng)。其中成員變量modename為設(shè)備名稱,fontname為顯示字體,fbops為指向底層操作的函數(shù)的指針。

 

LCD驅(qū)動開發(fā)的主要工作

 

1 編寫初始化函數(shù)

 

初始化函數(shù)首先初始化LCD控制器,通過寫寄存器設(shè)置顯示模式和顏色數(shù),然后分配LCD顯示緩沖區(qū)。在Linux中可以用kmalloc()函數(shù)分配一段連續(xù)的空間。緩沖區(qū)大小為:點陣行數(shù)×點陣列數(shù)×用于表示一個像素的比特數(shù)/8。緩沖區(qū)通常分配在大容量的片外SDRAM中,起始地址保存在LCD控制寄存器中。本文采用的LCD顯示方式為640×480,16位彩色,則需要分配的顯示緩沖區(qū)為640×480×2=600kb。最后是初始化一個fb_info結(jié)構(gòu),填充其中的成員變量,并調(diào)用register_framebuffer(&fb_info),將fb_info登記入內(nèi)核。

 

2 編寫成員函數(shù)

 

編寫結(jié)構(gòu)fb_info中函數(shù)指針fb_ops對應(yīng)的成員函數(shù),對于嵌入式系統(tǒng)的簡單實現(xiàn),只需要下列三個函數(shù)就可以了。

struct fb_ops{

……

int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con, struct fb_info *info);

int (*fb_get_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info);

int (*fb_set_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info);

……

}

Struct fb_ops在include/linux/fb.h中定義。這些函數(shù)都是用來設(shè)置/獲取fb_info結(jié)構(gòu)中的成員變量的。當(dāng)應(yīng)用程序?qū)υO(shè)備文件進行ioctl操作時候會調(diào)用它們。對于fb_get_fix(),應(yīng)用程序傳入的是fb_fix_screeninfo結(jié)構(gòu),在函數(shù)中對其成員變量賦值,主要是smem_start(緩沖區(qū)起始地址)和smem_len(緩沖區(qū)長度),最終返回給應(yīng)用程序。而fb_set_var()函數(shù)的傳入?yún)?shù)是fb_var_screeninfo,函數(shù)中需要對xres、yres和bits_per_pixel賦值。

對于/dev/fb,對顯示設(shè)備的操作主要有以下幾種。

 

● 讀/寫(read/write)/dev/fb:相當(dāng)于讀/寫屏幕緩沖區(qū)。

● 映射(map)操作:由于Linux工作在保護模式,每個應(yīng)用程序都有自己的虛擬地址空間,在應(yīng)用程序中是不能直接訪問物理緩沖區(qū)地址的。為此,Linux在文件操作 file_operations結(jié)構(gòu)中提供了mmap函數(shù),可將文件的內(nèi)容映射到用戶空間。對于幀緩沖設(shè)備,則可通過映射操作,可將屏幕緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶就可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū),在屏幕上繪圖了。

I/O控制:對于幀緩沖設(shè)備,對設(shè)備文件的ioctl操作可讀取/設(shè)置顯示設(shè)備及屏幕的參數(shù),如分辨率、顯示顏色數(shù)和屏幕大小等。ioctl的操作是由底層的驅(qū)動程序來完成的。在應(yīng)用程序中,操作/dev/fb的一般步驟如下:打開/dev/fb設(shè)備文件;用ioctrl操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕分辨率和每個像素的比特數(shù),根據(jù)屏幕參數(shù)可計算屏幕緩沖區(qū)的大;將屏幕緩沖區(qū)映射到用戶空間;映射后即可直接讀寫屏幕緩沖區(qū),進行繪圖和圖片顯示了。

 

LCD模塊化驅(qū)動

 

在對S3C2410的LCD編寫模塊化驅(qū)動程序時,首先要從內(nèi)核中去除LCD驅(qū)動。這里需要做一些改動,系統(tǒng)調(diào)用被加在以下文件中,需去除:/root/usr/src/arm/linux/kernel/sys.c;/root/usr/src/arm/linux/include/arm-arm下的unistd.h和lcd.h;/root/usr/src/arm/linux/arch/arm/kernel下的calls.s。

編寫模塊化驅(qū)動程序,有以下幾個關(guān)鍵的函數(shù)。

lcd_kernel_init(void)//當(dāng)模塊被載入時執(zhí)行

lcd_kernel_exit(void)//當(dāng)模塊被移出內(nèi)核空間時被執(zhí)行

lcd_kernel1_ioctl(struct*inode, struct*file, unsigned int cmd, unsigned longarg) //其他功能

每當(dāng)裝配設(shè)備驅(qū)動程序時,系統(tǒng)自動調(diào)用初始化模塊lcd_kernel_init(void)。

另一個必須提供的函數(shù)是lcd_kernel_exit(void),它在模塊被卸載時調(diào)用,負責(zé)進行設(shè)備驅(qū)動程序的工作。

執(zhí)行insmod lcd.o命令即可將LCD驅(qū)動添加到內(nèi)核中,執(zhí)行rmmod lcd命令即可從內(nèi)核中刪除LCD驅(qū)動。

 

靜態(tài)加載LCD驅(qū)動

 

將寫好的lcd驅(qū)動程序lcd.c放到arm/linux/drivers/char目錄下,修改arm/linux/drivers/char/config.in文件,加上一行:Bool'LCD driver support'CONFIG_LCD;修改arm/linux/drivers/char/Makefile文件,加上一行:obj-$(CONFIG_LCD)+=lcd.o。

 

這樣,當(dāng)再進行make xconfig時,就會選擇是否將LCD驅(qū)動編譯進內(nèi)核。同樣的辦法也可用在其他設(shè)備上。

<!--開始插入圖片--><!----><!--結(jié)束插入圖片-->

  • 上一篇: MC33991型二相步進電機驅(qū)動器
  • 下一篇: 二級數(shù)據(jù)矩陣碼在飛機發(fā)動機上的應(yīng)用
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1