操作筆記:Linux Framebuffer編程
在應(yīng)用電腦時,你知道你應(yīng)用的是操作系統(tǒng)么?一定會有人說微軟的Windows,不過你了解Linux么?有人說Linux不如Windows,其實不然,這是因為你不懂Linux,本文介紹一些Linux知識,比如Linux Framebuffer編程問題,希望本文對你Linux Framebuffer編程有所幫助。Linux framebuffer設(shè)備文件名通常是/dev/fb0,1,2等。
控制framebuffer設(shè)備的一般步驟如下:
1) 打開設(shè)備,映射framebuffer
2)依照硬件要求,準(zhǔn)備好數(shù)據(jù)
3)把數(shù)據(jù)復(fù)制到framebuffer
例子程序如下:
1)打開設(shè)備,映射framebuffer
- static void *fbbuf;
- int openfb(char *devname)
- {
- int fd;
- fd = open(devname, O_RDWR);
- if (ioctl(fd, FBIOGET_VSCREENINFO, &fbvar) < 0)
- return -1;
- bpp = fbvar.bits_per_pixel;
- screen_size = fbvar.xres * fbvar.yres * bpp / 8;
- fbbuf = mmap(0, screen_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- return fd;
- }
2)數(shù)據(jù)準(zhǔn)備,假設(shè)lcd控制器被初始化為565,16bit格式的
- static inline int make_pixel(unsigned int a, unsigned int r, unsigned int g, unsigned int b)
- {
- return (unsigned int)(((r>>3)<<11)|((g>>2)<<5|(b>>3)));
- }
3) 把想要顯示的數(shù)據(jù)復(fù)制到framebuffer,假設(shè)把framebuffer填充成一種顏色
- static void fill_pixel(unsigned int pixel, int x0, int y0, int w, int h)
- {
- int i, j;
- unsigned short *pbuf = (unsigned short *)fbbuf;
- for (i = y0; i < h; i ++) {
- for (j = x0; j < w; j ++) {
- pbuf[i * screen_width + j] = pixel;
- }
- }
- }
下面程序把lcd屏幕填充成藍(lán)色
- fill_pixel(make_pixel(0, 0, 0,0xff), 0, 0, screen_width, screen_height);
以上就是Linux Framebuffer編程的過程。
【編輯推薦】