Fedora下 DirectFB 开发手记(一)FrameBuffer环境搭建

 

系统环境:

 

虚拟机 Fedora live 13

 

1、ls /dev/fb* 查看 默认启动方式 没有创建 /dev/fb0 设备文件

2、查找资料后,添加fb0 设备:

修改 /boot/grub/menu.lst

在 kernel 启动参数 最后增加 vga=788

 

说明:

fedora 13 中没有 lilo ,所以内核启动参数 需要修改 grub 中的配置

vga 小写

788 的含义(网上搜 linux vga 参数)为 800*600 16位真彩色

 

# Normal VGA console
# vga = normal
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769

 

3、控制台和图形界面的切换方法:

ctrl+alt+f1 进入图形界面

ctrl_alt+f2 进入tty2 控制台

 

4、切换进入图形界面

打开控制台

cat /dev/fb0 > /root/screensnap

ls -l /root/screensnap

发现 发现文件大小为 1920000 (???为什么?)

如果按照 800*600*16位真彩色算 应该是 800*600*2 = 96000

不管了,反正在图形模式下也有了 fb0 这个设备文件了

想办法打开这个位图文件看看结果吧

 

经过验证 ctrl+alt+f2 进入到控制台界面 cat /dev/fb0 > /root/aaa 同样生成的是 1920000

这个跟vga参数设置为 788 不相符??

 

5、编写基础测试程序
参考 http://www.linuxsir.org/bbs/showthread.php?t=241071

 

#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); }

 

执行结果如下:

 

[root@fedora-xbmc share]# cd fb
[root@fedora-xbmc fb]# ls
test1.c
[root@fedora-xbmc fb]# gcc test1.c -o test1
test1.c: 在函数‘main’中:
test1.c:15: 警告:隐式声明与内建函数‘exit’不兼容
test1.c:20: 警告:隐式声明与内建函数‘exit’不兼容
test1.c:25: 警告:隐式声明与内建函数‘exit’不兼容
[root@fedora-xbmc fb]# ./test1
The mem is :1920000
The line_length is :1600
The xres is :800
The yres is :600
bits_per_pixel is :16
[root@fedora-xbmc fb]#

 

基本完成fb0 的配置,为后续开发及验证做好准备,可惜的是 对 cat 的结果还没搞太懂

 

最后:

参考上面那篇文章,基本可以得出 之所以 cat 的结果是整屏的2倍 是因为:

这是因为在现代的图形系统中大多有缓冲技术,显存中存有两页屏幕数据,这是方便快速的改变屏幕内容实现动画之类比较高的要求

 

哪位兄台知道 vga 参数 是否可以被设置为 32 位真彩色?(偶需必须用到透明位) 参数值应该是怎样的?

你可能感兴趣的:(Fedora下 DirectFB 开发手记(一)FrameBuffer环境搭建)