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

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

?? framebuffer_2.txt

?? 基于LINUX操作系統(tǒng)下的各種詳細配置(如FTP
?? TXT
字號:
大家都知道Unix/Linux系統(tǒng)是由命令驅(qū)動的。那么最基本的系統(tǒng)是命令行的(就是想DOS一樣的界面)。X-Window-System是Unix/Linux上的圖形系統(tǒng),它是通過X-Server來控制硬件的。但有一些Linux的發(fā)行版在引導(dǎo)的時候就會在屏幕上出現(xiàn)圖形,這時的圖形是不可能由X來完成的,那是什么機制呢?答案是FrameBuffer。
FrameBuffer不是一個圖形系統(tǒng),更不是窗口系統(tǒng)。它比X要低級,簡單來說FrameBuffer就是一種機制的實現(xiàn)。這種機制是把屏幕上的每個點映射成一段線性內(nèi)存空間,程序可以簡單的改變這段內(nèi)存的值來改變屏幕上某一點的顏色。X的高度可移植性就是來自于這種機制,不管是在那種圖形環(huán)境下,只要有這種機制的實現(xiàn)就可以運行X。所以在幾乎所有的平臺上都有相應(yīng)的X版本的移植。
好了,閑話少說,下面我們來看看可以利用FrameBuffer來干點什么。首先看看你是否有了相應(yīng)的驅(qū)動:找一下在/dev/下是否有fb*這個設(shè)備文件,這是個字符類的特殊文件。

ls -l /dev/fb0 (Enter) 
crw-rw---- 1 root video 29, 0 Jan 27 15:32 /dev/fb0

如果沒有這個文件也可以找找其他的比如:/dev/fb1,/dev/fb2...如果找不到這些文件,那就得重新編譯內(nèi)核了。下面假設(shè)存在這個文件/dev/fb0,這就是FrameBuffer的設(shè)備文件。
有了這個我們可以play with FrameBuffer了。(一下的操作不一定要在X下,可以在啟動了FrameBuffer的虛擬控制臺下)

cat /dev/fb0 > sreensnap 

ls -l sreensnap

-rw-r--r-- 1 wsw wsw 6291456 Jan 27 21:30 sreensnap

我們得到了一個恰好6M的文件,再做下面的操作:

clear /*清楚屏幕的輸出*/
cat sreensnap > /dev/fb0
是不是奇怪的事情發(fā)生了?好像是中了病毒一般?屏幕又恢復(fù)了以前的狀態(tài)?不用著急,

clear

這樣屏幕就正常了。

通過以上的操作,我想你也猜到了。文件/dev/fb0就是控制屏幕上的每一點的顏色的文件。我們可以寫程序來改變這個文件的內(nèi)容,就可以方便的在屏幕上畫圖了:-)

我下面就來寫一個小程序,探測一下屏幕的屬性。


#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>

int main () {
int fp=0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
fp = open ("/dev/fb0",O_RDWR);

if (fp < 0){
printf("Error : Can not open framebuffer device\n");
exit(1);
}

if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
printf("Error reading fixed information\n");
exit(2);
}

if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
printf("Error reading variable information\n");
exit(3);
}

printf("The mem is d\n",finfo.smem_len);
printf("The line_length is d\n",finfo.line_length);
printf("The xres is d\n",vinfo.xres);
printf("The yres is d\n",vinfo.yres);
printf("bits_per_pixel is d\n",vinfo.bits_per_pixel);
close (fp);
}

struct fb_var_screeninfo 和 struct fb_fix_screeninfo 兩個數(shù)據(jù)結(jié)構(gòu)是在/usr/include/linux/fb.h中定義的,里面有些有趣的值:(都是無符號32位的整數(shù))
在fb_fix_screeninfo中有
__u32 smem_len 是這個/dev/fb0的大小,也就是內(nèi)存大小。
__u32 line_length 是屏幕上一行的點在內(nèi)存中占有的空間,不是一行上的點數(shù)。
在fb_var_screeninfo 中有
__u32 xres ,__u32 yres 是x和y方向的分辨率,就是兩個方向上的點數(shù)。
__u32 bits_per_pixel 是每一點占有的內(nèi)存空間。

把上面的程序編譯以后運行,在我的機器上的結(jié)果如下:
The mem is :6291456
The line_length is :4096
The xres is :1024
The yres is :768
bits_per_pixel is :32

內(nèi)存長度恰好是6M,每行占有4M的空間,分辨率是1024x768,色彩深度是32位。細心的你可能已經(jīng)發(fā)現(xiàn)有些不對。屏幕上的點有1024x768=786432個,每個點占有32比特。屏幕一共的占有內(nèi)存數(shù)為32x786432=25165824 就是3145728字節(jié),恰好是3M但是上面的程序告訴我們有6M的存儲空間。這是因為在現(xiàn)代的圖形系統(tǒng)中大多有緩沖技術(shù),顯存中存有兩頁屏幕數(shù)據(jù),這是方便快速的改變屏幕內(nèi)容實現(xiàn)動畫之類比較高的要求。關(guān)于這種緩沖技術(shù)有點復(fù)雜,我們目前先不討論。對于我們來說只有這3M內(nèi)存來存放這一個屏幕的顏色數(shù)據(jù)。
好了,現(xiàn)在你應(yīng)該對FrameBuffer有一個大概的了解了吧。那么接下來你一定會想在屏幕上畫一些東西,讓我們先從畫一個點開始吧。先說說我的想法:在類Unix系統(tǒng)中,一切東西都是文件。我們對屏幕的讀寫就可以轉(zhuǎn)換成對/dev/fb0的讀寫。那么就把/dev/fb0用open打開,再用lseek定位要讀寫的位置,最后調(diào)用read或者write來操作。通過這么一大段的操作我們才完成了對一個點的讀或者寫。這種方法開銷太大了。還有一種方法,我們把/dev/fb0映射到程序進程的內(nèi)存空間中來,然后得到一個指向這段存儲空間的指針,這樣就可以方便的讀寫了。但是我們要知道能映射多少和該映射多少,這能很方便的從上面一個程序得出的參數(shù)來決定。
下面是程序代碼:

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>

int main () {
int fp=0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long screensize=0;
char *fbp = 0;
int x = 0, y = 0;
long location = 0;
fp = open ("/dev/fb0",O_RDWR);

if (fp < 0){
printf("Error : Can not open framebuffer device\n");
exit(1);
}

if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
printf("Error reading fixed information\n");
exit(2);
}

if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
printf("Error reading variable information\n");
exit(3);
}

screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
/*這就是把fp所指的文件中從開始到screensize大小的內(nèi)容給映射出來,得到一個指向這塊空間的指針*/
fbp =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fp,0);
if ((int) fbp == -1)
{
printf ("Error: failed to map framebuffer device to memory.\n");
exit (4);
}
/*這是你想畫的點的位置坐標,(0,0)點在屏幕左上角*/
x = 100;
y = 100;
location = x * (vinfo.bits_per_pixel / 8) + y * finfo.line_length;

*(fbp + location) = 100; /* 藍色的色深 */ /*直接賦值來改變屏幕上某點的顏色*/
*(fbp + location + 1) = 15; /* 綠色的色深*/ 
*(fbp + location + 2) = 200; /* 紅色的色深*/ 
*(fbp + location + 3) = 0; /* 是否透明*/ 
munmap (fbp, screensize); /*解除映射*/
close (fp); /*關(guān)閉文件*/
return 0;

}

因為這是對線性存儲空間的讀寫,所以代碼有點不清晰,不易理解。但是有了這個基本的代碼實現(xiàn),我們可以很容易寫一些DrawPoint之類的函數(shù)去包裝一下低層的對線性存儲空間的讀寫。但是有了畫點的程序,再寫出畫線畫圓的函數(shù)就不是非常困難了。

這些就是我對FrameBuffer的初步研究,匆忙之間寫些東西不成文章,以后要寫些更高級一點的函數(shù)的實現(xiàn)。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美又粗又大又爽| 欧美日韩亚洲不卡| 色婷婷激情一区二区三区| 国产精品久久久久aaaa樱花| 成人精品一区二区三区四区 | 成人激情黄色小说| 国产精品久久久久久久裸模| 色乱码一区二区三区88| 亚洲激情中文1区| 欧美在线一二三| 日本欧美一区二区在线观看| 久久丝袜美腿综合| 本田岬高潮一区二区三区| 亚洲综合激情网| 日韩一区和二区| 国产白丝网站精品污在线入口| 中文子幕无线码一区tr| 91麻豆成人久久精品二区三区| 午夜久久电影网| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 激情五月激情综合网| 欧美国产精品专区| 精品视频在线免费看| 国产毛片精品视频| 一区二区三区.www| 欧美大尺度电影在线| 99视频一区二区| 日本不卡一二三| 国产精品三级视频| 3d成人动漫网站| 丁香桃色午夜亚洲一区二区三区| 亚洲一区二区三区四区不卡| 精品第一国产综合精品aⅴ| 成人av电影免费在线播放| 日韩一区欧美二区| 国产精品久久久久桃色tv| 欧美一区二区三区性视频| 成人app下载| 精品一区免费av| 亚洲国产精品久久久久秋霞影院| 日本一区二区三区国色天香 | 日韩精品一区二区三区蜜臀| 91麻豆国产精品久久| 国产在线精品免费| 亚州成人在线电影| 国产精品国产三级国产aⅴ中文 | 国产98色在线|日韩| 丝袜亚洲另类欧美综合| 国产精品人成在线观看免费| 欧美大片拔萝卜| 欧美精品在线一区二区| 91黄色小视频| 不卡av电影在线播放| 国产在线不卡一区| 欧洲精品一区二区三区在线观看| 亚洲天堂网中文字| xvideos.蜜桃一区二区| 欧美老肥妇做.爰bbww| 久久精工是国产品牌吗| 欧美日韩国产综合一区二区| 欧美一区二区三区视频在线| 欧美成人福利视频| 日韩和欧美一区二区| 色爱区综合激月婷婷| 亚洲成人综合视频| 免费高清不卡av| 蜜桃视频在线一区| 久久成人精品无人区| 国产黄色精品视频| 狠狠色综合日日| 国产欧美一区二区精品性色| 国产日韩综合av| 亚洲欧美日本韩国| 免费成人在线视频观看| 国产精品77777| 色综合久久久久久久久久久| 欧美色图在线观看| 精品久久久久久久久久久院品网| 国产精品理伦片| 午夜久久久久久久久久一区二区| 久久99日本精品| 色激情天天射综合网| 欧美一区在线视频| 国产精品久久久久久户外露出| 亚洲大片一区二区三区| 国产老女人精品毛片久久| 色综合激情五月| 欧美r级电影在线观看| 自拍av一区二区三区| 激情文学综合丁香| 欧美性一级生活| 中文字幕免费不卡在线| 日韩高清国产一区在线| 91女人视频在线观看| 精品国产3级a| 亚洲大片精品永久免费| 国产69精品久久777的优势| 欧美老肥妇做.爰bbww视频| 中文字幕一区二区日韩精品绯色| 日韩av高清在线观看| 91视频免费观看| 精品国产a毛片| 日韩国产欧美在线观看| 色婷婷亚洲精品| 国产欧美一区二区精品性| 蜜桃久久久久久| 在线免费观看日本欧美| 一区精品在线播放| 国产成人在线观看| 日韩你懂的电影在线观看| 亚洲电影在线播放| 91亚洲精华国产精华精华液| 国产欧美一区二区精品性色| 精品一区二区三区日韩| 91精品欧美久久久久久动漫 | 国产精品久久久久久久久久久免费看 | 天堂一区二区在线| 色综合久久中文综合久久牛| 国产亲近乱来精品视频| 久久aⅴ国产欧美74aaa| 91麻豆精品国产91久久久| 亚洲图片自拍偷拍| 91在线免费看| 国产精品免费丝袜| 国产不卡视频在线播放| 久久久久久97三级| 韩国女主播成人在线观看| 欧美日韩和欧美的一区二区| 久久99精品久久久久久| 国产精品无人区| 国产女人水真多18毛片18精品视频| 看国产成人h片视频| 久久美女艺术照精彩视频福利播放| 国产精品亚洲视频| 国产精品久久二区二区| 欧美日韩一本到| 美女www一区二区| 国产午夜精品美女毛片视频| 91麻豆免费在线观看| 国产在线视频精品一区| 精品日本一线二线三线不卡| 日韩成人一区二区| 69堂亚洲精品首页| 青青草视频一区| 日韩视频免费观看高清完整版在线观看 | 成人激情av网| 中文字幕在线一区免费| 成人国产免费视频| 91视频免费看| 日韩精品中文字幕一区二区三区| 奇米影视一区二区三区小说| 日韩午夜激情av| 国产精品伊人色| 中文字幕av在线一区二区三区| av一区二区三区| 一区二区三区高清不卡| 欧美日韩精品免费观看视频| 全国精品久久少妇| 国产欧美日韩麻豆91| 97久久人人超碰| 亚洲成人激情自拍| 精品精品国产高清a毛片牛牛| 国产美女在线观看一区| 亚洲欧美福利一区二区| 欧美精品 国产精品| 国产一区999| 亚洲三级在线看| 这里只有精品99re| 风间由美性色一区二区三区| 亚洲免费毛片网站| 欧美一区二区三区四区高清 | 极品少妇一区二区| 国产精品国产精品国产专区不片 | 日韩一区和二区| 高清视频一区二区| 亚洲综合一区在线| 日韩欧美一区二区视频| 成人免费黄色在线| 午夜精品福利久久久| 国产女主播一区| 6080亚洲精品一区二区| 粉嫩高潮美女一区二区三区| 亚洲综合在线免费观看| 久久综合久久综合九色| 99精品视频中文字幕| 日韩国产欧美三级| 1000部国产精品成人观看| 欧美一区二区观看视频| aaa国产一区| 免费三级欧美电影| 又紧又大又爽精品一区二区| 日韩一级完整毛片| 91在线丨porny丨国产| 麻豆91在线播放| 亚洲久草在线视频| 久久综合九色综合97_久久久| 欧美在线999| 99视频热这里只有精品免费| 捆绑紧缚一区二区三区视频| 一区二区三区中文字幕|