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

          關(guān) 閉

          新聞中心

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

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

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

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

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


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


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


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


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

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


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

          評(píng)論


          相關(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); })();