技術(shù)類frameb驅(qū)動全篇_第1頁
技術(shù)類frameb驅(qū)動全篇_第2頁
技術(shù)類frameb驅(qū)動全篇_第3頁
技術(shù)類frameb驅(qū)動全篇_第4頁
技術(shù)類frameb驅(qū)動全篇_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、framebuffer 驅(qū)動全篇在后續(xù)的幾篇里面會詳細介紹如何編寫一個顯卡的驅(qū)動程序。framebuffer device 在內(nèi)核里面作為顯卡驅(qū)動模型,許多函數(shù)和數(shù)據(jù)結(jié)構(gòu)都是特定,正是這些特定的東西為我們的編程提供了方便。要開發(fā)frame buffer device 驅(qū)動,你應該閱讀SourceSourceDocumentationfb下面的說明文件,三個重要文件 00-INDEX,framebuffer.txt,internals.txt,其他文件都是具體顯卡的說明了。文件 00-INDEX 譯文文檔/documentation/fb 的索引文件。如果你對 frame buffer 設備有什

2、么想法,mail:Geert Uytterhoeven <> 00-index 這個文件framebuffer.txt- frame buffer 設備介紹internals.txtframe buffer 設備內(nèi)部快速瀏覽modedb.txt關(guān)于模式的資料aty128fb.txt關(guān)于 ATI Rage128 顯卡的 frame buffer 設備clgenfb.txt關(guān)于 Cirrus Logic 的顯卡matroxfb.txt關(guān)于 Matrox 的顯卡pvr2fb.txt關(guān)于 PowerVR 2 的顯卡tgafb.txt關(guān)于 TGA(DEC

3、Chip 21030)顯卡vesafb.txt關(guān)于 VESA 顯卡幀緩沖設備(framebuffer.txt 譯文) 維護: Geert Uytterhoeven最后校正:May 10, 2001翻譯:good02xaut0.介紹幀緩沖設備提供了顯卡的抽象描述。他同表了顯卡上的顯存,應用程序通過定義好的接口可以顯卡,而不需要知道底層的任何操作。該設備使用特殊的設備節(jié)點,通常位于/dev 目錄,如/dev/fb*.1.用戶角度的/dev/fb*從用戶的角度看,幀緩沖設備和其他位于/dev 下面的設備類似。他是一個字符設備,通常主設備號是 29,次設備號定義幀緩沖的個數(shù)。通常,使用如下方式(前面的

4、數(shù)字代碼次設備號)0 = /dev/fb0 First frame buffer1 = /dev/fb1.Second frame buffer31 = /dev/fb31 32nd frame buffer考慮到向下兼容,你可以創(chuàng)建符號/dev/fb0current -> fb0/dev/fb1current -> fb1:and so on.幀緩沖設備也是一種普通的內(nèi)存設備,你可以讀寫其內(nèi)容。例如,對屏幕抓屏:cp /dev/fb0 myfile你也可以同時有多個顯示設備,例如你的主板上出了內(nèi)置的顯卡還有另一的顯卡。對應的幀緩沖設備(/dev/fb0 and /dev/fb1

5、etc.)可以工作。應用程序如 X server 一般使用/dev/fb0 作為默認的顯示幀緩沖區(qū)。你可以自定把某個設備作為默認的幀緩沖設備,設置$FRAMEBUFFER 環(huán)境變量即可。在sh/bash:export FRAMEBUFFER=/dev/fb1在 csh 中:setenv FRAMEBUFFER /dev/fb1設定后,X server 將使用第二個幀緩沖區(qū)設備。2.程序員角度看/dev/fb*正如你所知,一個幀緩沖設備和內(nèi)存設備類似/dev/mem,并且有許多共性。你可以read,write,seek 以及 mmap()。不同僅僅是幀緩沖的內(nèi)存不是所有的內(nèi)存區(qū),而是顯卡的那部分

6、內(nèi)存。/dev/fb*也盡心ioctl 操作,通過ioctl 可以或設定設備參數(shù)。顏色表也是通過 Ioctl 設定。查看 就知道有多少 ioctl 應用以及相關(guān)數(shù)據(jù)結(jié)構(gòu)。這里給出摘要:- 你可以獲取設備一些不變的信息,如設備名,屏幕的組織(平面,象素,.) 對應內(nèi)存區(qū)的長度和起始地址。- 也可以獲取能夠發(fā)生變化的信息,例如位深,顏色格式,時序等。如果你改變這些值,驅(qū)動程序?qū)χ颠M行優(yōu)化,以滿足設備特性(返回 EINVAL,如果你的設定,設備不支持)- 你也可以獲取或設定部分顏色表。所有這些特性讓應用程序十分容易的使用設備。X server 可以使用/dev/fb*而不需知道硬件的寄存器是如何組

7、織的。 XF68_FBDev 是一個用于位唯一要做的就是在應用程序在相應的位置設定是否顯示。(單色)X server,在新內(nèi)核中,幀緩沖設備可以工作于模塊中, 用動態(tài)加載。這類驅(qū)動必須調(diào)register_framebuffer()在系統(tǒng)中。使用模塊更方便!3.幀緩沖分辨率設定幀緩沖的分辨率可以用工具 fbset 設定。他可以改變設備的顯示模式。主要就是改變當前模式,如在啟動過程中,在/etc/rc.* 或 /etc/init.d/* 文件中調(diào)用, 可以把模式從單色顯示變成真彩.fbset 使用在配置文件中的的顯示模式。模式數(shù)據(jù)表,你可以在文件中增加需要4.X ServerX server (X

8、F68_FBDev)是對幀緩沖設備的最主要應用。從 XFree863.2 后,X server 就是XFree86 的一部分了,有 2 個工作模式:- 在/etc/XF86Config 文件中,如果Display'段關(guān)于 fbdev'的配置:Modes "default"X server 將使用前面討論的,從環(huán)境變量$FRAMEBUFFER 獲取當前幀緩沖設備.你也可以設定顏色位深,使用 Depth 關(guān)鍵字,使用 Virtual 設定虛擬分辨率。這也是默認設置。- 然而你也可以通過設定/etc/XF86Config,改變分辨率。這樣有很多靈活性, 唯一的不足

9、就是你必須設定刷新頻率??梢杂?fbset -x通過 fbset 或 xvidtune 切換顯示模式。5.模式頻率CRT 顯示器是用 3 個電子槍轟擊磷粉完成顏色的顯示的。電子槍從左到右的水平掃描,并從上至下的垂直掃描。通過改變槍的電壓,所顯示的顏色可以不同。當電子槍完成一行掃描重新回到下一行的開始,被稱作“水平折回”。當一屏幕全部掃描完畢,電子槍將回到最左上腳,被成為“垂直折回”。在折回的途中電子槍是關(guān)閉的。電子槍打點的移動速度取決于點時鐘。如果點時鐘是28.37516 MHz,打一個點需要35242 ps。1/(28.37516E6 Hz) = 35.242E-9 s如果屏幕分辨率是 64

10、0x480,那么一行的時間是: 640*35.242E-9 s = 22.555E-6 s然而水平折回也是需要時間的,通常 272 個打點時間,因此一行總共需要:(640+272)*35.242E-9 s = 32.141E-6 s我們就認為水平掃描的頻率是 31KHz: 1/(32.141E-6 s) = 31.113E3 Hz一屏幕含有 480 行,加上垂直折回時間 49,一屏所需的時間: (480+49)*32.141E-6 s = 17.002E-3 s我們就認為垂直掃描的頻率是 59Hz: 1/(17.002E-3 s) = 58.815 Hz這也意味著屏幕數(shù)據(jù)每秒鐘刷新 59 次。

11、為了得到穩(wěn)定的圖像顯示效果,VESA 垂直掃描頻率不低于 72Hz。但是也因人而異,有些人 50Hz 感覺不到任何問題,有些至少在80Hz 以上才可以。由于顯示器不知道什么時候新行開始掃描,顯卡為每一行掃描提供水平同步信號。類似的,他也為每一幀顯示提供垂直同步信號。圖像在屏幕上點的位置取決于這些同步信號的發(fā)生時刻。下圖給出了所有時序的概要。水平折回的時間就是左邊空白右邊空白水平同步長度。垂直折回的時間就是上空白下空白垂直同步長。+|+|upper_margin|?|+-#-+-+|#|#|#|#|#|#|#| left|#|#right| hsync |margin#|xres#margin|

12、len|<|>#<+>#<>|<>|#|#|#|#|#|#|#|yres#|#|#|#|#|#|#|#|#|#|#|#|#|#|#|#|#|#?#|+-#-+-+|lower_margin|?|+|+|vsync_len|?|+6.把 XFree86 時序變成 frame buffer device 時序典型的顯示模式:"800x600"< name > VFL50DCF800856976 1040600HFL637VR643SV1666SV2HRSH1SH2而幀緩沖設備使用下面的參數(shù):- pixclock: 點時

13、鐘 in ps (pico seconds)- left_margin: time from sync to picture- right_margin: time from picture to sync- upper_margin: time from sync to picture- lower_margin: time from picture to sync- hsync_len: length of horizontal sync- vsync_len: length of vertical sync1) Pixelclock: xfree: in MHzfb: in picose

14、conds (ps)pixclock = 1000000 / DCF2) horizontal timings: left_margin = HFL - SH2 right_margin = SH1 - HR hsync_len = SH2 - SH13) vertical timings: upper_margin = VFL - SV2 lower_margin = SV1 - VR vsync_len = SV2 - SV1更好的 VESA 的例子可以在 XFree86 的源碼中找到,"xc/programs/Xserver/hw/xfree86/doc/modeDB.txt&

15、quot;.7.獲取關(guān)于幀緩沖設備以及應用的參考,請:http:/linux-或者查閱下面的文檔:- The manual pages for fbset: fbset(8), fb.modes(5)- The manual pages for XFree86: XF68_FBDev(1), XF86Config(4/5)- The mighty kernel sources:o linux/drivers/o linux/include/linux/fb.ho linux/include/幀緩沖設備的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(internals.txt)Geert Uytterhoeven , 21 J

16、uly 1998翻譯:good02xaut××××幀緩沖設備中用到的結(jié)構(gòu)體××××以下數(shù)據(jù)結(jié)構(gòu)在幀緩沖設備使用,定義 。1. Outside the kernel (user space)- struct fb_fix_screeninfo幀緩沖設備中設備無關(guān)的常值數(shù)據(jù)信息??梢酝ㄟ^ FBIOGET_FSCREENINFO 獲取。Ioctl的- struct fb_var_screeninfo幀緩沖設備中設備無關(guān)的變量數(shù)據(jù)信息和特定的顯示模式??梢酝ㄟ^ iotcl的 FBIOGET_VSCREENINFO獲 取 ,

17、 并 通 過 ioctl的 FBIOPUT_VSCREENINFO設 定 。 還 有FBIOPAN_DISPLAY 可以用。- struct fb_cmap設備無關(guān)的顏色表信息。 你可以通過 ioctl 的 FBIOGETCMAP和FBIOPUTCMAP或設定。2. Inside the kernel- struct fb_info常規(guī)信息,API 以及幀緩沖設備的底層信息(主板地址.).- struct par'唯一指定該設備的顯示模式的設備相關(guān)信息。- struct display幀緩沖設備和臺驅(qū)動之間的接口。*常用的幀緩沖 API*Monochrome (FB_VISUAL_MO

18、NO01 and FB_VISUAL_MONO10)每個象素是黑或白。Pseudocolor(FB_VISUAL_PSEUDOCOLORandFB_VISUAL_STATIC_PSEUDOCOLOR)索引顏色顯示True color (FB_VISUAL_TRUECOLOR)真彩顯示,分成紅綠蘭三基色Direct color (FB_VISUAL_DIRECTCOLOR)每個象素顏色也是有紅綠藍組成,不過每個顏色值是個索引,需要查表。Grayscale displays灰度顯示,紅綠藍的值都一樣準備開始寫我們的驅(qū)動之前,請詳細閱讀如下文件:Documentationfb 目錄 vesafb.t

19、xt,matroxfb.txt,sa1100fb.txtdriversfbmem.c,fbgen.c,fbmon.c,fbcmap.c skeletonfb.c vesafb.c,sa1100fb.c,sa1100fb.hfb.h目錄includelinux 目錄最值得關(guān)注的是 skeletonfb.c,該文件給出了一個 fb device 驅(qū)動的框架準備好了,就開始寫的 fram buffer device driver。framebuffer 驅(qū)動全篇(二)還是要補充點,下面是/linux/fb.h 的部分注釋,加粗的是常用的,紅色是關(guān)鍵的,一般不可少。旁邊沒有漢字,要么很簡單沒必要加注,

20、要么就用不到!注釋:good02xaut#ifndef _LINUX_FB_H #define _LINUX_FB_H#include #include/* Definitions of frame buffers*/#define FB_MAJOR #define FB_MAX2932/*主設備號*/* sufficient for now */* ioctls0x46 is 'F'#define FBIOGET_VSCREENINFO0x4600 #define FBIOPUT_VSCREENINFO0x4601 #define FBIOGET_FSCREENINFO0x4

21、602*/#define FBIOGETCMAP #define FBIOPUTCMAP #define FBIOPAN_DISPLAY0x46040x46050x4606/* 0x4607-0x460B are defined below */* #define FBIOGET_MONITORSPEC 0x460C */* #define FBIOPUT_MONITORSPEC 0x460D */* #define FBIOSWITCH_MONIBIT 0x460E */#define FBIOGET_CON2FBMAP #define FBIOPUT_CON2FBMAP0x460F0x46

22、10/* arg: 0 or vesa level + 1 */_IOR('F', 0x12, struct fb_vblank) 0x46130x46140x46150x4616#define FBIOBLANK0x4611#define FBIOGET_VBLANK #define FBIO_ALLOC #define FBIO_FREE #define FBIOGET_GLYPH#define FBIOGET_HWCINFO#define FBIOPUT_MODEINFO #define FBIOGET_DISPINFO0x46170x4618#define FB_TYP

23、E_PACKED_PIXELS #define FB_TYPE_PLANES0/* Packed Pixels*/1/* Non interleaved planes */#define FB_TYPE_INTERLEAVED_PLANES2/* Interleaved planes*/#define FB_TYPE_TEXT#define FB_TYPE_VGA_PLANES3/* Text/attributes*/4/* EGA/VGA planes */#define FB_AUX_TEXT_MDA #define FB_AUX_TEXT_CGA01/* Monochrome text

24、*/* CGA/EGA/VGA Color text */* S3 MMIO fasttext */#define FB_AUX_TEXT_S3_MMIO 2#define FB_AUX_TEXT_MGA_STEP163/* MGA Millenium I: text, attr,14bytes */#define FB_AUX_TEXT_MGA_STEP8 4 bytes */*other MGAs:text, attr,6#define FB_AUX_VGA_PLANES_VGA4 (EGA/VGA) */#define FB_AUX_VGA_PLANES_CFB4 #define FB_

25、AUX_VGA_PLANES_CFB80/*16colorplanes12/* CFB4 in planes (VGA) */* CFB8 in planes (VGA) */#define FB_VISUAL_MONO01 #define FB_VISUAL_MONO1001/* Monochr. 1=Black 0=White */* Monochr. 1=White 0=Black */#define FB_VISUAL_TRUECOLOR #define FB_VISUAL_PSEUDOCOLOR #define FB_VISUAL_DIRECTCOLOR234/* True colo

26、r*/* Pseudo color (like atari) */* Direct color */#define FB_VISUAL_STATIC_PSEUDOCOLORreadonly */5/*Pseudocolor#define FB_ACCEL_NONE0/* no hardware accelerator */#define FB_ACCEL_ATARIBLITT #define FB_ACCEL_AMIGABLITT #define FB_ACCEL_S3_TRIO64123/* Atari Blitter/* Amiga Blitter*/*/*/* Cybervision64

27、 (S3 Trio64)#define FB_ACCEL_NCR_77C32BLT*/4/*RetinaZ3(NCR77C32BLT)#define FB_ACCEL_S3_VIRGE5/* Cybervision64/3D (S3 ViRGE)*/*/#define FB_ACCEL_ATI_MACH64GX6/* ATI Mach 64GX family#define FB_ACCEL_DEC_TGA7/* DEC 21030 TGA*/#define FB_ACCEL_ATI_MACH64CT #define FB_ACCEL_ATI_MACH64VT*/#define FB_ACCEL

28、_ATI_MACH64GT*/89/* ATI Mach 64CT family*/* ATI Mach 64CT family VT class10/* ATI Mach 64CT family GT class#define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D*/#define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 #define FB_ACCEL_SUN_LEO13 /* Sun leo/zx*/*/#define FB_ACCEL_IMS_TWINTURBO14 /* IMS Twin Turbo

29、*/#define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2*/#define FB_ACCEL_MATROX_MGA2064W 16 /* (Millenium) */#define FB_ACCEL_MATROX_MGA1064SG 17(Mystique) */#define FB_ACCEL_MATROX_MGA2164W 18 /* (Millenium II) */MatroxMGA2064W/*MatroxMGA1064SGMatroxMGA2164W#define FB_ACCEL_MATROX_MGA2164W_AGP

30、 19/* Matrox MGA2164W (Millenium II) */#define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */#define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, .)*/#define FB_ACCEL_SUN_CG1422/* Sun cgfourteen23 /* Sun bwtwo24 /* Sun cgthree*/#define FB_ACCEL_SUN_BWTWO #define FB_ACCEL_SU

31、N_CGTHREE*/*/#define FB_ACCEL_SUN_TCX25 /* Sun tcx*/#define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400*/*/#define FB_ACCEL_NV3 #define FB_ACCEL_NV4 #define FB_ACCEL_NV5272829/* nVidia RIVA 128/* nVidia RIVA/* nVidia RIVA/* C&T 6555x*/2*/#define FB_ACCEL_CT_6555x 30*/#define FB_ACCEL_3DFX_BANSHEE

32、31/* 3Dfx Banshee/* ATI Rage128 family/* CyberPro 2000/* CyberPro 2010/* CyberPro 5000*/*/#define FB_ACCEL_ATI_RAGE12832#define FB_ACCEL_IGS_CYBER2000 33#define FB_ACCEL_IGS_CYBER2010 34#define FB_ACCEL_IGS_CYBER5000 35*/*/*/ 300/630/540#define FB_ACCEL_SIS_GLAMOUR*/36/*SiS#define FB_ACCEL_3DLABS_PE

33、RMEDIA3 37 /* 3Dlabs Permedia 3/*上面的宏定義不用關(guān)心*/*/*不可修改的屏幕信息,用戶空間可見*/ struct fb_fix_screeninfo char id16; unsigned lon/* identification string eg "TT Builtin" */em_start; /* Start of frame buffer mem 顯存的起始地址*/* (physical address) */ u32 smem_len; u32 type; u32 type_aux;/* Length of frame buff

34、er mem 顯存的大小 */* see FB_TYPE_*/* Interleave for interleaved Planes */ u32 visual; u16 xpanstep; u16 ypanstep; u16 ywrapstep; u32 line_length;/* see FB_VISUAL_*/* zero if no hardware panning*/* zero if no hardware panning*/* zero if no hardware ywrap*/* length of a line in bytes每行的字節(jié)數(shù)*/unsigned long

35、mmio_start; /* Start of Memory Mapped I/O*/* (physical address) */ u32 mmio_len; u32 accel;/* Length of Memory Mapped I/O*/* Type of acceleration available */ for future compatibility */ u163;/*;/* Interpretation of offset for color fields: All offsets are from the right,* inside a "pixel"

36、 value, which is exactly 'bits_per_pixel' wide (means: you* can use the offset as right argument to <<). A pixel afterwards is a bit* stream and is written tomemory as that unmodified. This implies* big-endian byte order if bits_per_pixel is greater than 8.*/*像素所占字節(jié)內(nèi),各個顏色的位分配比如 RGB=888

37、,565,555 等等,*/ struct fb_bitfield u32 offset; u32 length; u32 msb_right;/* beginning of bitfield*/* length of bitfield*/* != 0 : Most significant bit is */* right */;/*下面的宏也不常用*/ #define FB_NONSTD_HAM1/* Hold-And-Modify (HAM)*/#define FB_ACTIVATE_NOW0/* set values immediately (or vbl)*/* activate on

38、 next open*/#define FB_ACTIVATE_NXTOPEN 1#define FB_ACTIVATE_TEST #define FB_ACTIVATE_MASK/* values #define FB_ACTIVATE_VBL2/* don't set, round up impossible */ 15*/16 /* activate values on next vbl 32 /* change colormap on vbl */64 /* change all VCs on this fb */*/#define FB_CHANGE_CMAP_VBL #de

39、fine FB_ACTIVATE_ALL#define FB_ACCELF_TEXT1/* text mode acceleration */#define FB_SYNC_HOR_HIGH_ACT #define FB_SYNC_VERT_HIGH_ACT12/* horizontal sync high active/* vertical sync high active*/*/#define FB_SYNC_EXT4/* external sync*/#define FB_SYNC_COMP_HIGH_ACT 8/* composite sync high active*/#define

40、 FB_SYNC_BROADCAST 16 /* broadcasttimingsFramebuffer 驅(qū)動程序模型下圖會向你展示目前的 framebuffer 設備驅(qū)動的結(jié)構(gòu),最常用的是非標準驅(qū)動。很明顯他所處的層次最高,程序編寫是最容易的。理解了這個圖的,你已經(jīng)很輕松的去完成一個 fb 驅(qū) 動 , 比 如 給sa1100,s2410,s2440 系列的 ARM 的 LCD器寫驅(qū)動。framebuffer 驅(qū)動全篇(三)Color Map 剖析在 framebuffer 驅(qū)動程序設計中,cmap 這個東東太暈了?,F(xiàn)在我要把他的剖析給大家:)1 struct fb_cmap/*顏色表*/st

41、ruct fb_cmap u32 start; u32 len; u16 *red; u16 *green; u16 *blue; u16 *transp;/* First entry*/* Number of entries */*紅色 */*綠色*/*/*/,NULL */該結(jié)構(gòu)在 fb.h 文件中定義,在 struct fb_ops 結(jié)構(gòu)中有兩個成員函數(shù)與其相關(guān):/*獲取顏色表*/int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con, struct fb_info*info);/*設定顏色表*/int (*fb_set_cm

42、ap)(struct fb_cmap *cmap, int kspc, int con, struct fb_info*info);在 struct fb_info 結(jié)構(gòu)中有變量:struct fb_cmap cmap;/* Current cmap */在 fpgen 基礎操作下提供: extern int fbgen_get_cmap(struct fb_info *info);extern int fbgen_set_cmap(struct fb_info *info);fb_cmap *cmap, int kspc, int con, structfb_cmap *cmap, int

43、kspc, int con, struct在文件/* drivers/fbcmap.c */中提供的 cmap 應用extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to, int fsfromto);extern int fb_get_cmap(struct fb_cmap *cmap, int kspc,int (*getcolreg)(u_int, u_int *, u_int

44、*, u_int *,u_int *, struct fb_info *),struct fb_info *fb_info);extern int fb_set_cmap(struct fb_cmap *cmap, int kspc,int (*setcolreg)(u_int, u_int, u_int, u_int, u_int,structfb_info *),struct fb_info *fb_info); extern struct fb_cmap *fb_default_cmap(int len); extern void fb_invert_cmaps(void);2 通過文件

45、在 anakinfb.c 文件中,cmap 如圖在 stifb.cframebuffer 驅(qū)動全篇(四)目錄下面的anakinfb.c 驅(qū)動程序。雖然我不清楚那本文介紹的設備是位于/個設備的特性,但是從對程序的分析中我們?nèi)匀恢廊绾尉帉懸粋€ frame buffer設備驅(qū)動。本文是個標準的 fb 驅(qū)動。共 221 行,包含函數(shù)如下:1.static intanakinfb_getcolreg(u_int regno, u_int *red, u_int *green,u_int *blue, u_int *transp, struct fb_info *info) 31 行2.static i

46、nt anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_intblue,u_int transp, struct fb_info *info) 45 行3.static int anakinfb_get_fix(struct fb_fix_screeninfo *fix, int con, structfb_info *info) 57 行4.static int anakinfb_get_var(struct fb_var_screeninfo *var, int con, structfb_info *info) 75 行5

47、.static int anakinfb_set_var(struct fb_var_screeninfo *var, int con, structfb_info *info) 111 行6.static int anakinfb_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info) 117 行static int anakinfb_set_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info) 130 行static in

48、t anakinfb_switch_con(int con, struct fb_info *info) 147 行static int anakinfb_updatevar(int con, struct fb_info *info) 155 行static void anakinfb_blank(int blank, struct fb_info *info) 161 行int init anakinfb_init(void) 178 行0.11.函數(shù) 1,2 是寄存器操作用。函數(shù) 3,4,5,6,7 是 fb_ops 函數(shù)函數(shù) 8 用于切換臺函數(shù) 9 用于更新變量函數(shù) 10

49、 用于閃爍屏幕函數(shù) 11 用于初始化設備很 奇 怪 , 對 fb 設 備 的 讀 寫 函 數(shù) 怎 么 沒 有 ! 值 得 說 明 的 是open,release,read,write,ioctl,mmap 等函數(shù)的實現(xiàn)是由 fbmem.c 文件實現(xiàn)了。也就是說所有的fb 設備在給定了 fb_info 后,所有的操作都是一樣的。在明確的fb_info 前提下,fbmem.c 中的函數(shù)可以工作的很好。這樣大家應該感到非常輕松了吧,只要完成上述的幾個設備相關(guān)的函數(shù),frame buffer 設備的驅(qū)動就寫完了:)系統(tǒng)的結(jié)構(gòu)如圖:Stifb 驅(qū)動模型linux/drivers/stifb.c - Ge

50、neric frame buffer driver for HP * workstationswith STI (standard text interface)firmware.這個驅(qū)動程序和前面的 anakin 設備完全不同,因為他不是采用標準的格式,而是根據(jù) based on skeletonfb, which wasCreated 28 Dec 1997 by Geert Uytterhoeven 也就是 skeletonfb.c 提供的框架完成的。共 230 行,包含函數(shù)如下:1.static int sti_encode_fix(struct fb_fix_screeninfo *

51、fix, const void *par,struct fb_info_gen *info) 60 行2.static int sti_decode_var(const struct fb_var_screeninfo *var,void *par,struct fb_info_gen *info) 71 行3.static int sti_encode_var(struct fb_var_screeninfo *var, const void *par,struct fb_info_gen *info) 78 行4.5.6.static void sti_get_par(void *par,

52、 struct fb_info_gen *info) 94 行static void sti_set_par(const void *par, struct fb_info_gen *info) 99 行static int sti_getcolreg(unsigned regno, unsigned *red, unsigned*green, unsigned *blue, unsigned *transp, struct fb_info *info) 104 行7.static int sti_setcolreg(unsigned regno, unsigned red, unsigned

53、 green,unsigned blue, unsigned transp, struct fb_info *info) 111 行8.static void sti_set_disp(const void *par, struct display *disp, structfb_info_gen *info) 118 行2.13.static void sti_detect(void) 127 行static int sti_blank(int blank_mode, const struct fb_info *info) 132 行int init stifb_init(void) 161 行void stifb_cleanup(struct fb_info *info) 201 行int init sti

溫馨提示

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

評論

0/150

提交評論