亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? frambuffer.txt

?? 基于LINUX操作系統(tǒng)下的各種詳細(xì)配置(如FTP
?? TXT
?? 第 1 頁 / 共 3 頁
字號(hào):


在struct fb_info結(jié)構(gòu)中有變量:

  struct fb_cmap cmap;                 /* Current cmap */



在fpgen基礎(chǔ)操作下提供:

extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info);

extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info);







在文件/* drivers/video/fbcmap.c */中提供更多的cmap應(yīng)用

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 *, 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,struct fb_info *),

                              struct fb_info *fb_info);

extern struct fb_cmap *fb_default_cmap(int len);

extern void fb_invert_cmaps(void);

2. 通過文件解析

在anakinfb.c文件中,cmap如圖





在stifb.c
 


本文介紹的設(shè)備是位于/video目錄下面的anakinfb.c驅(qū)動(dòng)程序。雖然我不清楚那個(gè)設(shè)備的特性,但是從對(duì)程序的分析中我們?nèi)匀恢廊绾尉帉懸粋€(gè)frame buffer設(shè)備驅(qū)動(dòng)。

    本文是個(gè)標(biāo)準(zhǔn)的fb驅(qū)動(dòng)。共221行,包含函數(shù)如下:



1.         static int  anakinfb_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue, u_int *transp, struct fb_info *info) 31行

2.         static int anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,u_int transp, struct fb_info *info) 45行

3.         static int anakinfb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info) 57行

4.         static int anakinfb_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) 75行

5.         static int anakinfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) 111行

6.         static int anakinfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,     struct fb_info *info) 117行

7.         static int anakinfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,     struct fb_info *info) 130行

8.         static int anakinfb_switch_con(int con, struct fb_info *info) 147行

9.         static int anakinfb_updatevar(int con, struct fb_info *info) 155行

10.     static void anakinfb_blank(int blank, struct fb_info *info) 161行

11.     int __init anakinfb_init(void) 178行


函數(shù)1,2是寄存器操作用。

函數(shù)3,4,5,6,7是fb_ops函數(shù)

函數(shù)8用于切換控制臺(tái)

函數(shù)9用于更新變量

函數(shù)10用于閃爍屏幕

函數(shù)11用于初始化設(shè)備

    很奇怪,對(duì)fb設(shè)備的讀寫函數(shù)怎么沒有!值得說明的是open,release,read,write,ioctl,mmap等函數(shù)的實(shí)現(xiàn)是由fbmem.c文件實(shí)現(xiàn)了。也就是說所有的fb設(shè)備在給定了fb_info后,所有的操作都是一樣的。在明確的fb_info前提下,fbmem.c中的函數(shù)可以工作的很好。這樣大家應(yīng)該感到非常輕松了吧,只要完成上述的幾個(gè)設(shè)備相關(guān)的函數(shù),frame buffer設(shè)備的驅(qū)動(dòng)就寫完了:)



系統(tǒng)的結(jié)構(gòu)如圖:


Stifb驅(qū)動(dòng)模型

linux/drivers/video/stifb.c - Generic frame buffer driver for HP * workstations with STI (standard text interface) video firmware.

這個(gè)驅(qū)動(dòng)程序和前面的anakin設(shè)備完全不同,因?yàn)樗皇遣捎脴?biāo)準(zhǔn)的格式,而是根據(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 *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.         static void sti_get_par(void *par, struct fb_info_gen *info) 94行

5.         static void sti_set_par(const void *par, struct fb_info_gen *info) 99行

6.         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 green, unsigned blue, unsigned transp, struct fb_info *info) 111行

8.         static void sti_set_disp(const void *par, struct display *disp, struct fb_info_gen *info) 118行

9.         static void sti_detect(void) 127行

10.     static int sti_blank(int blank_mode, const struct fb_info *info) 132行

11.     int __init stifb_init(void) 161行

12.     void stifb_cleanup(struct fb_info *info) 201行

13.     int __init stifb_setup(char *options) 208行

其中1到10是必須的,參考下面的圖。

11是初始化代碼

12.13沒有完成具體功能





再給出fb_fix_screeninfo系統(tǒng)調(diào)用結(jié)構(gòu)圖:


Frame buffer與console

Framebuffer作為顯卡在內(nèi)核中的注冊(cè)設(shè)備,為了滿足應(yīng)用需要,通常還要為console操作提供專用操作函數(shù)。

Console是系統(tǒng)提供的一種特殊的文本輸出終端,如圖所示。常用的console已經(jīng)不再是從前的單色顯示,而是16色或者更多顏色顯示。根據(jù)文本的代表的不同屬性,顯示不同的顏色。

把對(duì)console的支持內(nèi)嵌到fb的驅(qū)動(dòng)中,或許有其自己的道理,我沒有看出來。不過既然要提供這種支持,我們的驅(qū)動(dòng)程序就要添枝加葉了。




在準(zhǔn)fb設(shè)備設(shè)備驅(qū)動(dòng)中是沒有對(duì)console支持的。

只有在非標(biāo)準(zhǔn)的fb驅(qū)動(dòng),也就是基于skeletonfb.c架構(gòu)的程序,需要提供這部分代碼。

下面從各個(gè)方面介紹framebuffer對(duì)console的支持。

1.       各個(gè)文件中的支持

fb.h文件中

struct fb_info結(jié)構(gòu)中:

struct display *disp;              /* initial display variable */

    struct vc_data *display_fg;           /* Console visible on this display */

int (*changevar)(int);            /* tell console var has changed */

    int (*switch_con)(int, struct fb_info*); /* tell fb to switch consoles */



fbgen.c文件中:

void fbgen_set_disp(int con, struct fb_info_gen *info)

int fbgen_update_var(int con, struct fb_info *info)

int fbgen_switch(int con, struct fb_info *info)



新增加文件fbcon.c

struct display fb_display[MAX_NR_CONSOLES];

char con2fb_map[MAX_NR_CONSOLES];

…..



新增加文件fbcon.h:

struct display_switch

struct display



新增文件console_struct.h:

struct vc_data

……



2.       console中的顏色設(shè)定
該部分內(nèi)容準(zhǔn)備略掉,可以自行參考fbcon-cfb*.c文件。



3.       console和fb的高層理解

當(dāng)我們?cè)趂b中引入console后,就相當(dāng)于把一張白紙變成了一個(gè)日記本。本來對(duì)于fb來說只有顏色和位置的關(guān)系,引入console后,首先就是console的描述。
   每個(gè)console相當(dāng)于日記本的一頁,不同的console可以切換。Console因?yàn)槭且@示文本,又和字體聯(lián)系到一起。Console的管理是十分復(fù)雜的,遠(yuǎn)遠(yuǎn)超過了framebuffer本身。在RH9中,我們可以自己體驗(yàn)一下console和fb的協(xié)調(diào)問題。

使用Init3多用戶模式登陸,這里是沒有X server支持的。所有的輸入輸出都是基于console的。Framebuffer就相當(dāng)于你的顯示器。通過ALT+CTRL+F*,我們可以切換到不同的console,而每個(gè)console的設(shè)置都可以很獨(dú)立的完成。每隔console會(huì)在自己的數(shù)據(jù)區(qū)記錄歷史命令,在不同的console可以登陸不同的用戶到系統(tǒng)。但是,因?yàn)橹挥幸粋€(gè)屏幕,所以當(dāng)前可視的console只有一個(gè)。Frame buffer驅(qū)動(dòng)程序要能夠根據(jù)ALT+CTRL+F*切換命令去完成console的切換顯示。

   這樣大家應(yīng)該明白frame buffer和console的關(guān)系了吧。后續(xù)我們會(huì)具體講述fb對(duì)console的支持。但是對(duì)console本身不會(huì)設(shè)計(jì)太多,具體參考tty或console的設(shè)計(jì)。當(dāng)完成了fb對(duì)console的支持,frame buffer device driver設(shè)計(jì)就完了:)


Fb console中的字體

/driver/video目錄下:
font_6x11.c,font_8x8.c,font_8x16.c

font_acorn_8x8.c,font_pearl_8x8.c,

font_sun8x16.c,font_sun12x22.c

fonts.c

這些文件都是用來處理在fbcon中的字體顯示問題。其中除最后一個(gè)文件fonts.c外,其他都是字模文件由cpi2fnt產(chǎn)生。

/include/video/目錄下:

font.h

1.          首先介紹font.h文件

font.h文件中,定義了字體的描述結(jié)構(gòu)

struct fbcon_font_desc {

    int idx;     //字體的索引號(hào)

    char *name;//字體的描述

    int width, height;//字模的寬和高

    void *data;//字模的起始指針

    int pref;    //額外信息,平臺(tái)用

};

width的值不一定是8的整數(shù)倍,考慮到計(jì)算機(jī)存儲(chǔ)的問題,即使width小于8的整數(shù)倍,存儲(chǔ)時(shí)仍以字節(jié)為單位,不足的右補(bǔ)齊0。

Linux內(nèi)核自帶了7種字體,name依次為:

font_vga_8x8,

                            font_vga_8x16,

                            font_pearl_8x8,

                            font_vga_6x11,

                            font_sun_8x16,

                            font_sun_12x22,

                            font_acorn_8x8;

根據(jù)定義name長度不大于32字節(jié)。

2.          Font.c文件

/* 根據(jù)字體名返回該字體的描述結(jié)構(gòu) */

struct fbcon_font_desc *fbcon_find_font(char *name);



/*根據(jù)屏幕大小,獲取默認(rèn)字體描述 */

struct fbcon_font_desc *fbcon_get_default_font(int xres, int yres);



由此看來,linux中基于fbcon的字體比較單一,描述和使用也相對(duì)簡單。主要是由于采用字模描述,只描述256個(gè)ascii字符,故存儲(chǔ)空間不大,從2048到11264不等。


Fbcon中的顏色查找表

Fbcon-cfbx表示該console使用的是xbpp顏色描述。顏色數(shù)為2^x。

在此,我們僅以x=8,x=24舉例,使用顏色分別是256色和真彩16M。

/driver/video/fbcon-cfb8.c

/driver/video/fbcon-cfb24.c

/include/video/fbcon-cfb8.h

/include/video/fbcon-cfb24.h

這4個(gè)文件實(shí)現(xiàn)的具體的操作,而fbcon的底層操作,參考前面的fbcon的介紹,不重復(fù)了:)

實(shí)現(xiàn)fbcon的顏色映射只需完成下面的功能,以fb8為例:

struct display_switch fbcon_cfb8;   

void fbcon_cfb8_setup(struct display *p);

void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx, int height, int width);

void fbcon_cfb8_clear(struct vc_data *conp, struct display *p, int sy, int sx, int height, int width);

void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx);

void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p, const unsigned short *s, int count, int yy, int xx);

void fbcon_cfb8_revc(struct display *p, int xx, int yy);

void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p,int bottom_only);

fbcon_cfb8是系統(tǒng)的實(shí)現(xiàn)關(guān)鍵,具體解釋參考fbcon介紹。

fbcon_cfb8_setup函數(shù)完成設(shè)定display結(jié)構(gòu)中next_line和next_palne的值。

fbcon_cfb8_bmove函數(shù)完成當(dāng)前坐標(biāo)的移動(dòng)。

fbcon_cfb8_clear函數(shù)通過調(diào)用rectfill函數(shù)清屏幕緩沖區(qū)。

fbcon_cfb8_putc函數(shù)向屏幕輸出單字符,字體寬度必須小于等于16。

fbcon_cfb8_putcs函數(shù)向屏幕輸出字符串。

fbcon_cfb8_revc函數(shù)從屏幕輸入單個(gè)字符,并回顯到fb上。

fbcon_cfb8_clear_margins函數(shù)和fbcon_cfb8_clear類似,調(diào)用rectfill清除區(qū)域。

其中,fb_writel函數(shù)和fb_readl函數(shù)實(shí)現(xiàn)輸入輸出的底層操作。這兩個(gè)函數(shù)實(shí)際上實(shí)在fbcon_h中定義的宏操作,IOMEM操作而已。

關(guān)注一下“(nibbletab_cfb8[*cdat++ >> 4] & eorx) ^ bgx,”

這是所謂8bpp的具體實(shí)現(xiàn),不同的位深就在寫fb緩沖時(shí)體現(xiàn)了。讓我們從后向前分析,

1.()^bgx,顏色和背景色異或,只有這樣才能保證背景色改變時(shí),文字一直顯示。

2.~&eorx,eorx是前景色和背景色異或后的值,只有在前景色和背景色一致的時(shí)候,eorx才是0。

3. nibbletab_cfb8[~],根據(jù)字體的~值,調(diào)用查找表,取顏色值

4.~從字體文件中去讀字模的值。



還有點(diǎn)疑問,就是這兩句的作用,attr_fgcol在fbcon_h中定義:

fgx=attr_fgcol(p,c);

    bgx=attr_bgcol(p,c);

從前面的看,c應(yīng)該是個(gè)字符的ascii碼,ascii與顏色有什么關(guān)系呢?研究中….


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合色婷婷| 久久99国内精品| 久久久久免费观看| 欧美在线你懂得| 成人妖精视频yjsp地址| 日本不卡在线视频| 亚洲综合丝袜美腿| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美精品一级二级| 99re这里只有精品视频首页| 久久精品国产77777蜜臀| 一个色在线综合| 国产精品卡一卡二| xvideos.蜜桃一区二区| 这里只有精品免费| 欧美日韩免费观看一区三区| www.亚洲色图.com| 国产成人精品亚洲777人妖| 蜜臀av在线播放一区二区三区 | 欧美日本国产视频| 不卡电影免费在线播放一区| 黄网站免费久久| 老鸭窝一区二区久久精品| 午夜影视日本亚洲欧洲精品| 亚洲免费电影在线| 国产精品丝袜久久久久久app| 精品盗摄一区二区三区| 欧美一区二区三区视频| 欧美日韩午夜在线| 欧美性色aⅴ视频一区日韩精品| 99精品1区2区| 成人在线视频首页| 成人一级黄色片| 不卡大黄网站免费看| av一本久道久久综合久久鬼色| 成人免费视频视频在线观看免费| 九一九一国产精品| 加勒比av一区二区| 国产伦精品一区二区三区在线观看| 久久99精品久久久| 国产一二三精品| 国产精品99久久久久久似苏梦涵| 国产一区二区三区在线观看精品 | 国产成人av网站| 国产精品一区免费在线观看| 国产一区二区看久久| 久久66热偷产精品| 国产精品996| 成人黄色一级视频| 日本福利一区二区| 911国产精品| 26uuu亚洲| 国产精品你懂的在线欣赏| 国产精品每日更新| 亚洲人成7777| 午夜精品久久久久久久久久| 日韩成人dvd| 韩国理伦片一区二区三区在线播放 | 成人午夜在线视频| 91视频免费播放| 欧美日韩国产精选| 久久综合九色综合欧美亚洲| 国产精品女同互慰在线看| 亚洲一本大道在线| 国产一区在线观看麻豆| av爱爱亚洲一区| 欧美日韩卡一卡二| 久久精品亚洲精品国产欧美| 自拍偷拍国产亚洲| 青青青伊人色综合久久| 国产91清纯白嫩初高中在线观看| 色94色欧美sute亚洲线路一久| 337p亚洲精品色噜噜噜| 国产女人18毛片水真多成人如厕| 亚洲乱码中文字幕| 日本不卡123| jiyouzz国产精品久久| 欧美福利视频一区| 中文在线免费一区三区高中清不卡| 尤物av一区二区| 精品一区二区国语对白| 色妹子一区二区| 精品国产乱码久久久久久闺蜜| 亚洲欧美影音先锋| 久久99国产精品久久| 色欧美片视频在线观看在线视频| 精品久久一区二区三区| 国产精品久久久久一区二区三区共| 亚洲最快最全在线视频| 国内欧美视频一区二区| 欧美三级资源在线| 久久精品人人爽人人爽| 亚洲福利一区二区三区| 成人性生交大片免费看在线播放 | 欧美成人精品福利| 亚洲综合av网| 丁香网亚洲国际| 欧美一级xxx| 怡红院av一区二区三区| 丁香六月综合激情| 91精品国产色综合久久久蜜香臀| 中文字幕日本乱码精品影院| 久草精品在线观看| 欧美精品第一页| 亚洲欧美精品午睡沙发| 国产成人一区二区精品非洲| 日韩欧美在线观看一区二区三区| 亚洲精品亚洲人成人网| 成人自拍视频在线| 欧美精品一区二区三区一线天视频 | 性久久久久久久| 色综合久久综合网| 国产精品第一页第二页第三页| 激情综合色综合久久| 欧美一级理论性理论a| 亚洲高清视频中文字幕| 99re视频精品| 国产精品三级在线观看| 国产成人精品免费| 久久精品亚洲麻豆av一区二区| 激情六月婷婷综合| 欧美va天堂va视频va在线| 石原莉奈一区二区三区在线观看| 91高清视频免费看| 亚洲精品免费在线| 色噜噜久久综合| 亚洲激情自拍视频| 91黄视频在线观看| 一区二区免费视频| 欧美色大人视频| 香蕉久久夜色精品国产使用方法| 91福利视频网站| 亚洲综合在线电影| 欧美三级视频在线播放| 亚洲国产日韩一级| 欧美麻豆精品久久久久久| 亚洲一区在线观看网站| 欧美日韩在线综合| 天堂成人免费av电影一区| 欧美一区二区三区系列电影| 蜜乳av一区二区| 久久亚洲综合av| 国产精品一区二区三区乱码 | 日韩国产精品大片| 欧美一二三四在线| 极品少妇一区二区三区精品视频| 欧美videos中文字幕| 国产精品一区二区91| 国产视频911| 91啪九色porn原创视频在线观看| 亚洲乱码国产乱码精品精可以看 | 亚洲欧美日韩电影| 欧美亚洲尤物久久| 免费成人av资源网| 久久久99久久| 波多野结衣中文一区| 亚洲欧美另类在线| 欧美日韩精品久久久| 美女免费视频一区二区| 久久麻豆一区二区| 成人av电影在线观看| 一区二区在线免费观看| 欧美高清hd18日本| 国产高清精品在线| 亚洲综合在线第一页| 精品人在线二区三区| 成人免费视频app| 亚洲一区影音先锋| 精品国产sm最大网站免费看| 99久久久久免费精品国产| 午夜精品免费在线| 中文字幕av资源一区| 精品视频一区 二区 三区| 国产综合久久久久久久久久久久| 国产精品高潮久久久久无| 欧美撒尿777hd撒尿| 久久国产麻豆精品| 国产精品久久久久久久岛一牛影视| 欧美性做爰猛烈叫床潮| 国产美女娇喘av呻吟久久| 亚洲欧美另类久久久精品| 欧美成人r级一区二区三区| 色综合久久久久综合体桃花网| 亚洲成人自拍一区| 国产精品麻豆欧美日韩ww| 91精品国产入口| 成人午夜激情影院| 日韩成人午夜精品| 亚洲三级小视频| 久久精品日产第一区二区三区高清版 | 亚洲精品中文字幕乱码三区| 欧美精品一区二区在线播放 | 久久亚洲一级片| 欧美日韩高清影院| www.激情成人| 黄色精品一二区| 日韩电影免费一区| 亚洲精品日日夜夜| 亚洲国产精品99久久久久久久久| 欧美一区二区三区在线观看视频 |