亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        圖像顯示之Linux Framebuffer

        2018-10-19 06:52:52深圳技師學(xué)院郭惠婷吳躍前
        電子世界 2018年19期
        關(guān)鍵詞:設(shè)備

        深圳技師學(xué)院 梁 志 郭惠婷 吳躍前

        現(xiàn)代大部分智能設(shè)備所用操作系統(tǒng)是linux,其中顯示圖像是不可缺少的功能。本文分析圖像顯示所用的linux Frambuffer的工作原理、底層設(shè)備驅(qū)動(dòng)注冊(cè)和應(yīng)用層的使用。

        1.Linux Frambuffer的基本介紹

        Linux Frambuffer 中文名簡(jiǎn)稱為linux幀緩沖區(qū),可以理解其為linux系統(tǒng)對(duì)底層圖像設(shè)備進(jìn)行抽象而形成的抽象層(中間層),它屏蔽了圖像硬件的底層差異,向用戶態(tài)進(jìn)程提供了一個(gè)接口方便應(yīng)用層程序顯示圖像。

        在不帶操作系統(tǒng)的情況下,要液晶屏顯示圖像,首先得驅(qū)動(dòng)液晶屏,這需要根據(jù)具體型號(hào)液晶屏的分辨率、時(shí)延參數(shù)、位色等相關(guān)硬件參數(shù)去配置相關(guān)的硬件寄存器,而所用編程語言一般是嵌入式C語言,明顯這樣顯示圖像的操作對(duì)于應(yīng)用工程師有非常大難度和操作上的麻煩。

        在帶操作系統(tǒng)的況下,需要液晶屏顯示圖像,應(yīng)用工程師只需知道底層的圖像設(shè)備已經(jīng)給內(nèi)核抽象成一個(gè)緩存區(qū)(這個(gè)緩存區(qū)就可以理解為Frambuffer),這個(gè)緩存區(qū)一般每一個(gè)INT型數(shù)據(jù)就對(duì)應(yīng)著屏上的一個(gè)像素點(diǎn)顯示數(shù)據(jù).應(yīng)用工程師只需要把圖像數(shù)據(jù)寫到緩存沖區(qū),緩存沖區(qū)的數(shù)據(jù)會(huì)由底層驅(qū)動(dòng)傳輸?shù)揭壕辽?。由此可見?yīng)用程序工程師顯示圖像再不需要關(guān)注圖像硬件操作,把更多精力放在應(yīng)用邏輯上的思考。

        2.Linux Frambuffer的架構(gòu)

        Linux Frambuあer在系統(tǒng)中位置示意圖如圖1所示:

        圖1

        由圖1可見從應(yīng)用到硬件,共分三層。Linux Framebuあer 處于系統(tǒng)中間位置,是linux 內(nèi)核顯示子系統(tǒng),對(duì)下層提供了相應(yīng)的注冊(cè)接口,讓下層的圖像硬件設(shè)備注冊(cè)進(jìn)內(nèi)核;對(duì)上層的應(yīng)用程序提供系統(tǒng)調(diào)用,讓應(yīng)用程序簡(jiǎn)單操作顯示圖像。

        (1)Linux 內(nèi)核顯示子系統(tǒng)層:

        在Linux內(nèi)核中顯示子系統(tǒng)定義了很多信息.其中重要的結(jié)構(gòu)體信息有:

        fb_info :用于定義幀緩存設(shè)備的相關(guān)信息,比如:可變參數(shù),固定參數(shù),底層操作函數(shù)指針。

        fb_var_screeninfo:描述幀緩存設(shè)備可以修改的參數(shù),如:長(zhǎng)寬等

        fb_ fi x_screeninfo:描述幀緩存設(shè)備固定的參數(shù),比如:緩存首地址,緩存長(zhǎng)度等

        fb_ops:描述幀緩存設(shè)備具體硬件操作的函數(shù)指針,是底層硬件操作的抽象,比如fb_open、fb_release、fb_read、fb_write、fb_ioctl、fb_mmap等:

        重要的函數(shù)如下:

        register_framebuffer():底層硬件驅(qū)動(dòng)注冊(cè)函數(shù),底層驅(qū)動(dòng)通過設(shè)置fb_info后調(diào)用該函數(shù)向系統(tǒng)注冊(cè)。

        unregister_framebuffer():底層硬件驅(qū)動(dòng)注鎖函數(shù),底層驅(qū)動(dòng)通過該函數(shù)向系統(tǒng)注銷自身。

        (2)底層硬件設(shè)備驅(qū)動(dòng)層:

        Linux framebuffer是一個(gè)字符設(shè)備(主設(shè)備號(hào)是29),在內(nèi)核中使用platform驅(qū)動(dòng)模型實(shí)現(xiàn),platform device描述了設(shè)備相關(guān)的硬件信息,主要通過結(jié)構(gòu)體resource描述幀緩存設(shè)備所用的地址資源,中斷資源等等。

        platform driver描述設(shè)備相關(guān)軟件信息,主要實(shí)現(xiàn)幀緩存設(shè)備具體的寄存器相關(guān)操作。

        比如幀設(shè)備(LCD)platform driver實(shí)現(xiàn)過程實(shí)如下:

        (1)通過platform_get_resource從platform device獲得設(shè)備所用資源。

        (2)通過kzalloc申請(qǐng)顯存空間大小。

        (3)初始化設(shè)備控件器所使用的GPIO,主要初始化引腳功能選擇、引腳驅(qū)動(dòng)能力。

        (4)設(shè)備驅(qū)動(dòng)信號(hào)初始化,其中重點(diǎn)設(shè)置行同步信號(hào),像素時(shí)鐘信號(hào),幀同步信號(hào),數(shù)據(jù)使能號(hào),其設(shè)置要根據(jù)硬件手冊(cè)和控制器手冊(cè)來配置。

        (5)定義一個(gè)fb_info并始化相關(guān)成員,指定設(shè)備可變和固定參數(shù)。

        (6)調(diào)用register_framebuあer()把設(shè)備注冊(cè)進(jìn)內(nèi)核。

        (7)最實(shí)現(xiàn)一個(gè)注銷設(shè)備操作,這時(shí)使用unregister_framebuffer。

        3.應(yīng)用層

        在應(yīng)用層使用framebuffer顯示圖像前,需要了解映射,如圖2所示:

        因硬件顯示設(shè)備的物理顯示區(qū)是通過幀緩存區(qū)操作,而幀緩存區(qū)是處于內(nèi)核空間,應(yīng)用程序不能隨意操作,此時(shí)可以通過系統(tǒng)調(diào)用mmap把幀緩存映射到用戶空間,在用戶空間中創(chuàng)建出幀緩存映射區(qū)(用戶圖像數(shù)據(jù)緩存區(qū)),以后只需把用戶圖像數(shù)據(jù)寫入到幀緩存映射區(qū)就可在硬件設(shè)備上顯示圖像。

        具體實(shí)現(xiàn)流程如下:

        (1)打開幀設(shè)備的設(shè)備文件,常用設(shè)備文件為/dev/f0。

        (2)通過系統(tǒng)調(diào)用ioctl函數(shù)獲得幀設(shè)備相關(guān)信息,比如幀設(shè)備的寬、高和像素位等。

        (3)通過mmap映射內(nèi)核幀緩存區(qū)到用戶空間圖像數(shù)據(jù)緩存區(qū),映射區(qū)的大小由幀設(shè)備的寬高等參數(shù)確定。

        (4)把圖像數(shù)據(jù)復(fù)制到用戶空間圖像數(shù)據(jù)緩存區(qū),圖像就可以在幀設(shè)備上顯示出來。

        (5)使用完后 ,調(diào)用close關(guān)閉設(shè)備。

        Linux frambuffer 的出現(xiàn)大大簡(jiǎn)化對(duì)顯示設(shè)備的操作,不過需要注意的是framebuffer最大支持32顯示緩存。

        猜你喜歡
        設(shè)備
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        調(diào)試新設(shè)備
        基于VB6.0+Access2010開發(fā)的設(shè)備管理信息系統(tǒng)
        基于MPU6050簡(jiǎn)單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        廣播發(fā)射設(shè)備中平衡輸入與不平衡輸入的轉(zhuǎn)換
        電子制作(2018年10期)2018-08-04 03:24:48
        食之無味,棄之可惜 那些槽點(diǎn)滿滿的可穿戴智能設(shè)備
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        HTC斥資千萬美元入股虛擬現(xiàn)實(shí)設(shè)備商WEVR
        Automechanika Shanghai 2014 之“看” 汽保設(shè)備篇
        如何在設(shè)備采購(gòu)中節(jié)省成本
        日韩一区二区中文字幕视频| 亚洲精品综合一区二区三| 91伦理片视频国产精品久久久| 国产福利永久在线视频无毒不卡 | 人妻少妇精品视频专区vr| 欧美亚洲熟妇一区二区三区| AV无码最在线播放| 国产人妖赵恩静在线视频| 国产av在线观看一区二区三区| 娇妻在交换中哭喊着高潮| 久久精品夜夜夜夜夜久久| 最新福利姬在线视频国产观看| 亚洲精品国产亚洲av| 日本激情网站中文字幕| 日本老熟妇乱| 91老司机精品视频| 成人短篇在线视频夫妻刺激自拍| 国产一区二区三区四色av| av人摸人人人澡人人超碰妓女| 亚洲国产成人AV人片久久网站| 国产精品美女自在线观看| 亚无码乱人伦一区二区| 久久久噜噜噜www成人网| 午夜福利视频男同女同| 国产精品一区二区夜色不卡 | 久久精品伊人无码二区| 男女动态视频99精品| 少妇高潮av久久久久久| 午夜福利电影| 亚洲在线一区二区三区四区| 国产成人精品日本亚洲i8| 欧美日韩国产码高清综合人成| 国产婷婷丁香五月麻豆| 美女狂喷白浆网站视频在线观看| 成年美女黄的视频网站| 欧美极品少妇性运交| 国产女主播免费在线观看| 亚洲国产精品不卡av在线| 7777奇米四色成人眼影| 精品三级久久久久久久| 男女做羞羞事的视频网站|