<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > 基于SEP4O2O的Linux frame buffer驅(qū)動設(shè)計(jì)

          基于SEP4O2O的Linux frame buffer驅(qū)動設(shè)計(jì)

          作者: 時(shí)間:2009-10-23 來源:網(wǎng)絡(luò) 收藏

          完成可變參數(shù)和固定參數(shù)的填充之后,要為本驅(qū)動申請中斷資源,具體函數(shù)為requestirq(irq,sep4020fb_irq,SA INTERRUPT,pdev一>name,info),irq為請求的中斷號,sep4020fb_irq為中斷處理服務(wù)子程序,SA_INTERRUPT表示為一個(gè)快速中斷處理,在執(zhí)行中斷的過程中禁止所有在當(dāng)前處理器上的其他中斷。申請中斷完畢之后,就要完成本驅(qū)動關(guān)鍵步驟,調(diào)用sep4020fb_map_video_memory()函數(shù)申請顯示緩沖區(qū)。在該函數(shù)中,首先調(diào)用PAGE_ALIGN()函數(shù)對齊申請的緩沖區(qū)的大小,使即將申請的顯示緩沖區(qū)大小為頁的整數(shù)倍;然后調(diào)用函數(shù)dma_all oc_writecombine(fbi->dev,fbi一>map_size,&fbi一>map_dma,GFP_KERNEL), 分配一塊寫合并的內(nèi)存區(qū)域作為幀緩存,函數(shù)返回值為申請的幀緩存的起始位置的虛擬地址,fbi一>map_dma代表的是該位置的物理地址,fbi一>map_si ze為此內(nèi)存區(qū)的大小。
          完成上面的工作之后,驅(qū)動程序在就有了一塊內(nèi)存區(qū)域作為幀緩沖,向此區(qū)域?qū)懭霐?shù)據(jù)就能顯示在液晶屏上。后面還要調(diào)用sep4020fb_init_registers(info)函數(shù)初始化L C D控制器的寄存器;然后調(diào)用sep4020fb_check_var(&fbinfo一>var,fbinfo)檢查可變參數(shù),最后調(diào)用register_(fbinfo)注冊幀緩沖設(shè)備。
          3.3 提供給應(yīng)用程序的接口
          本驅(qū)動設(shè)計(jì)定義了如下幾個(gè)接口供應(yīng)用程序調(diào)用:fb_ioctl,fb_blank,fb_fillrect.
          部分代碼如下:

          本文引用地址:http://www.ex-cimer.com/article/202630.htm


          sep4020_blank函數(shù)主要實(shí)現(xiàn)了將液晶屏清屏的功能。
          sep4020fb_fillrect函數(shù)實(shí)現(xiàn)了填充液晶屏一塊矩形區(qū)域的功能。
          sep4020fb_ioctl函數(shù)則為上層應(yīng)用提供了更多的功能,部分可供上層調(diào)用的命令如下:
          FBIOGET_VSCREENINFO表示用戶獲取屏幕的可變參數(shù);
          FBIOPUT_VSCREENINFO表示用戶設(shè)置可變的屏幕參數(shù);
          FBIOGET_FSCREENINFO表示用戶獲得屏幕的固定參數(shù);
          FBIOBLANK表示調(diào)用sep4020fb_blank函數(shù)清空液晶屏;
          FBIOPUTCMAP表示設(shè)置屏幕的顏色表;
          FBIOGETCMAP表示獲得顏色表。
          3.4 用戶空間對幀緩沖設(shè)備進(jìn)行訪問
          驅(qū)動程序經(jīng)過編譯并加載為模塊后,成為/dev/fb0設(shè)備,在應(yīng)用程序中,操作/dev/fb0一般遵循如下步驟:1)打開/dev/fb0設(shè)備文件;2)調(diào)用ioctl()操作取得屏幕的參數(shù),如屏幕分辨率和每個(gè)像素所占的比特?cái)?shù),進(jìn)而計(jì)算出顯示緩沖區(qū)的大?。?)將屏幕緩沖區(qū)映射到用戶空間;4)映射之后就可以向緩沖區(qū)寫入或者讀出數(shù)據(jù),進(jìn)行繪圖了。


          4 測試與結(jié)論
          根據(jù)前面論述的步驟向屏幕緩沖區(qū)寫入數(shù)據(jù),將每個(gè)像素的值設(shè)為0xF0F0,在屏幕上顯示如下圖像:

          測試結(jié)果顯示,在本課題驅(qū)動模塊的支持下,可以向屏幕緩沖區(qū)寫入數(shù)據(jù)并正確地在屏幕上顯示出來,工作完全正常。本文所提出的設(shè)計(jì)方案已經(jīng)應(yīng)用在本單位某產(chǎn)品上。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          關(guān)鍵詞: SEP4O2O buffer Linux frame

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();