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

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于SEP4O2O的Linux frame buffer驅(qū)動設計

          基于SEP4O2O的Linux frame buffer驅(qū)動設計

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

          3 L i nux驅(qū)動軟件設計實現(xiàn)
          3.1 驅(qū)動核心結(jié)構(gòu)體的介紹
          3.1.1.fb_jnfo結(jié)構(gòu)體
          幀緩沖設備最關鍵的一個數(shù)據(jù)結(jié)構(gòu)體是fb info結(jié)構(gòu)體,其中包含了關于幀緩沖設備屬性和操作的完整描述,定義如下:

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


          限于篇幅,只列出了部分成員,其中fb_var_screeninfo記錄用戶可以修改的顯示控制器參數(shù),包括屏幕分辨率和每個像素的比特數(shù)等;fb_fix_screeninfo記錄用戶不能修改的顯示控制器參數(shù);cmap為目前的顏色表;fb_ops為幀緩沖操作函數(shù)集;screen_base為幀緩沖的虛擬基地址;i oremapped的虛擬內(nèi)存大??;pseudo_palette為偽16色的顏色表。
          3.1.2.fb_ops結(jié)構(gòu)體
          本結(jié)構(gòu)體為指向底層操作的函數(shù)的指針,這些函數(shù)是需要驅(qū)動程序開發(fā)人員編寫填充的,部分成員定義如下


          fb_check_var ()用于調(diào)整可變參數(shù),并修整為硬件支持的值;fb_set_par()則根據(jù)屏幕參數(shù)設置具體讀寫LCD控制器的寄存器以使得LCD控制器進入相應的工作狀態(tài),使用戶設置的屏幕參數(shù)在硬件上有效;f bsetcolreg ()成員函數(shù)實現(xiàn)偽顏色表和顏色表的填充。
          3.1.3.fb_var_screeni nfo
          本結(jié)構(gòu)體定義了用戶可以修改的顯示控制器參數(shù),部分成員如下:


          本結(jié)構(gòu)體中,xres為屏幕的水平像素數(shù);yres為屏幕垂直寬度:bits_per_pixel定義每個像素由多少個位表示;pixclock定義了像素時鐘;left_margin是表示行切換中從同步到繪圖之間的延遲;right_margin表示行切換中從繪圖到同步之間的延遲;upper_margin表示幀切換中從同步到繪圖之間的延遲;lower_margin表示幀切換中從繪圖到同步之間的延遲;hsyn_len表示水平同步的長度;vsync_len表示垂直同步的長度。
          3.2 幀緩沖設備的模塊加載和卸載函數(shù)
          由于LCD控制器被集成在SOC芯片上作為一個獨立的硬件模塊,也就是platform_device而存在,因此本驅(qū)動中包含平臺驅(qū)動。首先我們要定義platform_driver結(jié)構(gòu)體:


          定義了此結(jié)構(gòu)體之后,在幀緩沖設備的模塊加載函數(shù)sep4020fb_init(void)中,我們只需要使用函數(shù)platform_driver_register(sep4020fb_driver)注冊平臺驅(qū)動,而其余大部分的初始化工作移交到平臺驅(qū)動的探測函數(shù)sep4020fb_probe中完成。
          在函數(shù)sep4020fb_probe(struct platform_device*pdev)中,首先要申請SEP4020的幀緩沖信息結(jié)構(gòu)體:structsep4020fb_info*info,在此結(jié)構(gòu)體中,成員sep4020fb_ma c h_i n f o記錄了seP4020幀緩存的機器信息,sep4020fb_hw包含了sep4020微處理器LCD控制器所涉及到的所有寄存器的信息,screen_dma表示幀緩存的物理地址,而screen_cpu代表了幀緩存的虛擬地址。之后要為sep4020fb_mach_info申請內(nèi)存空間,申請完畢之后就要初始化fb_info結(jié)構(gòu)體中的固定和可變參數(shù),即填充fb_var_screeninfo var和fb_fix_screeninfo fix成員。首先通過fb_info一>fbops=&sep4020fb_ops將為sep4020微處理器定義的函數(shù)操作結(jié)構(gòu)體賦予幀緩存信息結(jié)構(gòu)體中對應的成員,sep4020fb_ops定義了指向底層操作的一系列函數(shù),本文將在后面詳細介紹;由于本課題選用的液晶屏為320×240TFT彩屏,所以fb_info->var.xres賦值為320,fb_info一>var.yres賦值為240,fb_info一>var.bits_per_pixel賦值為16,這樣就可以算出幀緩存的長度為320×240×16/8個字節(jié),將此值賦給fbinfo->fix.smem_len成員。

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


          關鍵詞: SEP4O2O buffer Linux frame

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();