火龍果軟件Linux驅(qū)動(dòng)開發(fā)培訓(xùn)6匯編_第1頁
火龍果軟件Linux驅(qū)動(dòng)開發(fā)培訓(xùn)6匯編_第2頁
火龍果軟件Linux驅(qū)動(dòng)開發(fā)培訓(xùn)6匯編_第3頁
火龍果軟件Linux驅(qū)動(dòng)開發(fā)培訓(xùn)6匯編_第4頁
火龍果軟件Linux驅(qū)動(dòng)開發(fā)培訓(xùn)6匯編_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Thesuccess'sroadLinux設(shè)備驅(qū)動(dòng)高級(jí)開發(fā)今天的內(nèi)容嵌入式顯示設(shè)備簡介幀緩沖(framebuffer)設(shè)備特點(diǎn)幀緩沖驅(qū)動(dòng)程序顯示原理幀緩沖驅(qū)動(dòng)程序與DMA配合硬件圖形加速簡介使用高級(jí)圖形庫嵌入式顯示設(shè)備TTL接口液晶模塊CRT接口顯示器FRAMEBUFFER驅(qū)動(dòng)程序簡介Framebuffer驅(qū)動(dòng)程序提供圖形硬件的抽象訪問機(jī)制它提供給圖形應(yīng)用程序一個(gè)定義良好的接口,隱藏了底層硬件的細(xì)節(jié)。圖形應(yīng)用程序無需了解硬件寄存器,時(shí)序等信息FRAMEBUFFER驅(qū)動(dòng)程序特點(diǎn)FRAMEBUFFER為應(yīng)用程序提供了訪問顯卡的接口FRAMEBUFFER驅(qū)動(dòng)程序可以作為普通memory類型的設(shè)備,用戶可以直接讀寫設(shè)備的內(nèi)容。比如cp/dev/fb0screenshot,即是把fb0的內(nèi)容拷貝到截圖文件中FRAMEBUFFER驅(qū)動(dòng)程序特點(diǎn)(2)FRAMEBUFFER驅(qū)動(dòng)程序?qū)崿F(xiàn)上,類似于/dev/mem設(shè)備。他支持read,write,seek和mmap。mmap()是使用framebuffer的主要方式framebuffer使用顯示設(shè)備中的幀內(nèi)存,區(qū)別于/dev/mem設(shè)備使用這個(gè)主內(nèi)存另外framebuffer支持一些特定的ioctl,主要用來獲得設(shè)備信息和設(shè)置設(shè)備參數(shù)。比如我們訪問調(diào)色板就是通過ioctl操作fb設(shè)備的工具fbsetfb設(shè)備的幾何信息通過fbset工具來查詢和修改fb設(shè)備支持一系列視頻模式,每個(gè)模式包含屏幕的長寬尺寸、顏色深度、像素格式(pixelpacket)、時(shí)序信息fb驅(qū)動(dòng)重要數(shù)據(jù)結(jié)構(gòu)structfb_fix_screeninfo{…};用來描述設(shè)備有關(guān),不可變更的信息。用戶可以使用FBIOGET_FSCREENINFO命令來獲得這些信息結(jié)構(gòu)包含主要的項(xiàng)unsignedlongsmem_start;描述緩沖區(qū)起始地址__u32smem_len;描述緩沖區(qū)長度__u32type;描述fb類型,比如是否是交錯(cuò)模式__u32visual;描述顯示顏色是真彩色,偽彩色還是單色顯示顏色的種類介紹Framebuffer支持幾種顏色顯示方式單色每個(gè)像素的顏色只有兩種,非亮即暗,可以用一個(gè)bit來表示偽彩色每個(gè)像素顯示的顏色通過可編程的顏色查找表(即調(diào)色板)來獲得。每個(gè)顏色通過查找表的檢索號(hào)來表示,查找表中顏色真正的RGB值被顯示到屏幕上真彩色每一個(gè)顏色是由分別獨(dú)立的red,green,blue三種顏色值來表示直接彩色每個(gè)顏色由三個(gè)獨(dú)立的顏色檢索來表示,每種顏色都有自己的查找表灰度灰度模式可以認(rèn)為是偽彩色的一個(gè)變種,他的每種顏色的RGB分量值都是相同的重要數(shù)據(jù)結(jié)構(gòu)(2)structfb_var_screeninfo該結(jié)構(gòu)描述設(shè)備無關(guān)的,可更改的配置信息。應(yīng)用程序可以使用FBIOGET_VSCREENINFO命令獲得這些信息,使用FBIOPUT_VSCREENINFO命令寫入這些信息主要的數(shù)據(jù)項(xiàng)包含__u32xres;__u32yres;__u32xres_virtual;__u32yres_virtual;__u32xoffset;__u32yoffset;以及屏幕四周的margin,像素時(shí)鐘,同步等時(shí)序信息重要數(shù)據(jù)結(jié)構(gòu)(3)structfb_cmap設(shè)備無關(guān)的調(diào)色板結(jié)構(gòu)。用來描述調(diào)色板中的顏色主要數(shù)據(jù)項(xiàng)包括__u32start;描述調(diào)色板起始位置__u32len;描述總共顏色數(shù)__u16*red;紅色的值__u16*green;綠色__u16*blue;藍(lán)色__u16*transp;透明度重要數(shù)據(jù)結(jié)構(gòu)(4)驅(qū)動(dòng)程序s3c2410fb.c實(shí)現(xiàn)了和硬件相關(guān)的方法,并負(fù)責(zé)填充必要的fb結(jié)構(gòu)staticstructfb_opss3c2410fb_ops={ owner: THIS_MODULE, fb_get_fix: s3c2410fb_get_fix, fb_get_var: s3c2410fb_get_var, fb_set_var: s3c2410fb_set_var, fb_get_cmap: s3c2410fb_get_cmap, fb_set_cmap: s3c2410fb_set_cmap,然后調(diào)用intregister_framebuffer(structfb_info*fb_info);將fb驅(qū)動(dòng)注冊到系統(tǒng)中fbmem.cstaticstructfile_operationsfb_fops={ owner: THIS_MODULE, read: fb_read, write: fb_write, ioctl: fb_ioctl, mmap: fb_mmap, open: fb_open, release: fb_release,};registered_fb[]重要數(shù)據(jù)結(jié)構(gòu)(4)fb_ioctl(structinode*inode,structfile*file,unsignedintcmd, unsignedlongarg){ intfbidx=GET_FB_IDX(inode->i_rdev); structfb_info*info=registered_fb[fbidx]; structfb_ops*fb=info->fbops;FBIOGET_VSCREENINFO fb->fb_get_varFBIOPUT_VSCREENINFO fb->fb_set_varFBIOGET_FSCREENINFO fb->fb_get_fix重要數(shù)據(jù)結(jié)構(gòu)(5)structfb_info該結(jié)構(gòu)描述了fb設(shè)備的各種信息和API調(diào)用。它的項(xiàng)包括了前述的幾個(gè)關(guān)鍵結(jié)構(gòu),事件隊(duì)列,設(shè)備映射的虛擬地址,標(biāo)志和狀態(tài)以及fb設(shè)備實(shí)現(xiàn)的fbopsstructfb_info{charname[];intopen;structfb_var_screeninfovar;structfb_fix_screeninfofix;structfb_cmapcmap;structfb_ops*fops;char*screen_base;}Fb驅(qū)動(dòng)各核心部分介紹FRAMEBUFFER驅(qū)動(dòng)程序核心部分包含fbmem.c,fbmon.c,fbcmap.c,fbsys.c,modedb.c幾個(gè)文件fbmem.c文件實(shí)現(xiàn)了fb驅(qū)動(dòng)公共的調(diào)用intregister_framebuffer(structfb_info*fb_info);intunregister_framebuffer(structfb_info*fb_info);調(diào)色板實(shí)現(xiàn)fbcmap.c文件實(shí)現(xiàn)了和調(diào)色板相關(guān)的調(diào)用intfb_alloc_cmap(structfb_cmap*cmap,intlen,inttransp);分配一個(gè)fb_cmap結(jié)構(gòu)的顏色值存儲(chǔ)空間voidfb_dealloc_cmap(structfb_cmap*cmap);intfb_copy_cmap(structfb_cmap*from,structfb_cmap*to);完全復(fù)制一個(gè)fb_cmap結(jié)構(gòu)intfb_set_cmap(structfb_cmap*cmap,structfb_info*info);將一個(gè)fb_cmap結(jié)構(gòu)設(shè)置為fb設(shè)備的調(diào)色板顯視器參數(shù)fbmon.c文件用來解析顯示器的edid并計(jì)算時(shí)序參數(shù)它實(shí)現(xiàn)了以下函數(shù)intfb_get_mode(intflags,u32val,structfb_var_screeninfo*var,structfb_info*info);使用VESAGTF公式來計(jì)算時(shí)序參數(shù)intfb_validate_mode(conststructfb_var_screeninfo*var,structfb_info*info);將fb_var_screeninfo參數(shù)和顯示器的顯示能力進(jìn)行對比,檢驗(yàn)顯示器是否能夠支持該顯示模式顯示模式modedb.c文件包含了所有的VESA標(biāo)準(zhǔn)顯示模式信息它定義了一個(gè)靜態(tài)數(shù)組,每一項(xiàng)是一個(gè)fb_videomode類型,表示一個(gè)特定的顯示模式staticconststructfb_videomodemodedb[];他提供了下列調(diào)用intfb_add_videomode(structfb_videomode*mode,structlist_head*head);加入一個(gè)新的模式voidfb_delete_videomode(structfb_videomode*mode,structlist_head*head);刪除一個(gè)模式voidfb_videomode_to_var(structfb_var_screeninfo*var,structfb_videomode*mode);將視頻模式fb_videomode類型轉(zhuǎn)換成fb_var_screeninfo類型voidfb_var_to_videomode(structfb_videomode*mode,structfb_var_screeninfo*var);將fb_var_screeninfo類型轉(zhuǎn)換成fb_videomode類型區(qū)域拷貝cfbcopyarea.c文件實(shí)現(xiàn)了緩沖區(qū)中區(qū)域拷貝所需的函數(shù)首先我們初始化一個(gè)結(jié)構(gòu),描述區(qū)域拷貝的參數(shù)structfb_copyarea{ __u32dx; __u32dy; __u32width; __u32height; __u32sx; __u32sy;};然后調(diào)用voidcfb_copyarea(structfb_info*p,conststructfb_copyarea*area);該函數(shù)調(diào)用底層調(diào)用完成二維的拷貝矩形填充cfbfillrect.c文件實(shí)現(xiàn)了向緩沖區(qū)中一個(gè)指定矩形區(qū)域進(jìn)行填充的方法首先我們也要初始化一個(gè)描述填充操作的結(jié)構(gòu)structfb_fillrect{ __u32dx; __u32dy; __u32width; __u32height; __u32color; __u32rop;};然后調(diào)用voidcfb_fillrect(structfb_info*p,conststructfb_fillrect*rect);位圖操作cfbimgblt.c文件實(shí)現(xiàn)了位圖clipping操作首先初始化一個(gè)描述位圖剪輯的結(jié)構(gòu)structfb_image{ __u32dx; __u32dy; __u32width; __u32height; __u32fg_color; __u8depth; constchar*data; structfb_cmapcmap;};然后調(diào)用voidcfb_imageblit(structfb_info*p,conststructfb_image*image);函數(shù)將位圖繪制到緩沖區(qū)中軟件光標(biāo)softcursor.c文件實(shí)現(xiàn)了軟件光標(biāo)首先需要初始化軟件光標(biāo)結(jié)構(gòu)structfb_cursor{ __u16set; /*whattoset*/ __u16enable; /*cursoron/off*/ __u16rop; /*bitopoperation*/ constchar*mask; /*cursormaskbits*/ structfbcurposhot; /*cursorhotspot*/ structfb_image image; /*Curs

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論