新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 高清嵌入式系統中的DVI驅動開發

        高清嵌入式系統中的DVI驅動開發

        作者: 時間:2012-05-08 來源:網絡 收藏

        3 Linux的幀緩沖設備
        3.1 framebuffer機制
        framebuffer(幀緩沖)是出現在Linux2.2.xx之后版本內核的一種程序接口,在Linux體系中它居于上層應用程序和底層顯示設備之間。framebuffer屏蔽了不同顯示設備間的差異,將顯示設備抽象為幀緩沖區,它是一種供用戶態實現直接寫屏的抽象設備。framebuffer可
        以看成是顯存的一個映像,用戶通過內存映射將其映射到進程的地址空間后,通過對顯示緩沖區的讀寫操作可直接控制LCD的屏幕輸出。
        frameBuffer設備主要基于linux/include/linux/fb.h和linux/drivers/video/fbmem.c這兩個文件。fb.h中包含了與幀緩沖設備相關的重要的數據結構。fbmem.c是framebuffer機制的核心程序,它為上層應用程序提供了通用接口,同時也為下層特定硬件提供了接口。其內的函數可對具體硬件進行操作,比如對寄存器進行設置,對顯示緩沖進行映射等。
        3.2 幾個重要的數據結構
        (1)struct fb_info
        這個結構是Linux為幀緩沖區設備定義的層接口,它包含了關于幀緩沖設備屬性和操作的完整描述,部分成員定義如下:
        b.jpg
        其中,var記錄用戶可以修改的顯示控制器參數,包括屏幕分辨率和每個像素的位寬等;fix記錄用戶不能修改的顯示控制器參數;cmap為當前的顏色表;fbops指向對底層硬件操作的函數集;dev表示幀緩沖設備;screen_base為I/O映射的虛擬基地址。
        (2)struct fb_ops
        該結構提供了指向底層操作的函數指針,其成員函數最終與LCD控制器硬件打交道,這些函數需要驅動者根據LCD控制器的硬件設置及LCD顯示屏的硬件參數進行設計。該結構部分成員定義如下:
        c.jpg
        其中,fb_check_var用于檢查可變的屏幕參數,并調整其為硬件支持的值;fb_set_par根據屏幕參數設置具體讀寫LCD控制器的寄存器以使其進入相應的工作狀態,fb_setcolreg設置color寄存器來實現偽顏色表和顏色表的填充。
        (3)struct fb_var_screeninfo
        這是fb_info的成員結構體。它記錄了幀緩沖設備和指定顯示模式的可修改信息,包括屏幕分辨率、每個像素的位寬、幀延時、行延時等。
        (4)struct fb_fix_screeninfo
        這是fb_info的成員結構體,它描述顯示卡的屬性,并且在運行時不能被修改,例如緩沖區的首地址、長度等。當一種模式被設定后,內存信息由顯示卡硬件給出,內存的位置等信息就不可修改。
        MX51將LCD控制器直接嵌入到處理器芯片內部,這為關于顯示功能的擴展提供了直接接口。LCD控制器驅動是設備驅動的核心,它是一個標準的framebuffer設備驅動。設計驅動程序,首要的是配置LCD控制器,設置幀緩沖區,這在很大程度上要依賴于上述的數據結構,驅動設計需填寫相關結構體并完成指定的接口函數。
        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 太保市| 东平县| 探索| 屏边| 信阳市| 康马县| 丰镇市| 红安县| 新晃| 改则县| 博客| 天祝| 乌恰县| 西藏| 中江县| 图木舒克市| 武定县| 绩溪县| 虞城县| 维西| 五华县| 轮台县| 武定县| 双鸭山市| 松阳县| 环江| 三门峡市| 克山县| 临湘市| 聂拉木县| 蓬安县| 木兰县| 康乐县| 吉首市| 奎屯市| 交城县| 庆元县| 孝感市| 确山县| 枣庄市| 宁明县|