这两天拾起以前做过的Framebuffer,不相同的是以前在嵌入式上做的,现在在自己电脑上Debian上进行测试,不过都类似罢了,嵌入式里要初始化很多东西。下面具体列一下步骤。至于Framebuffer的原理,就我的理解是比较简单的,无非往mmap好的fb上填写显示数据罢了,不对这些数据进行处理,FrameBuffer 只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备,它需要真正的显卡驱动的支持。在这次测试中,我用了默认就安装的vesafb,好像又被称为万能Fb驱动。
1、 首先在系统Grub启动时按e进入命令启动行的编辑模式,改为:kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/sda6 ro vga=791(vga=791表示fb用1024 * 768 * 16bpp,其他模式的参数可以上网查查);
2、 进入系统的命令行模式,编译fb测试例子:gcc fb_test.c;
3、 允许测试例子:sudo ./a.out >> fb.txt(必须要用超级用户权限,>>将屏幕打印写到fb.txt中),效果如下:
打印如下:
Fixed screen info: id: VESA VGA smem_start: 0xf0000000 smem_len: 3145728 type: 0 type_aux: 0 visual: 2 xpanstep: 0 ypanstep: 0 ywrapstep: 0 line_length: 2048 mmio_start: 0x0 mmio_len: 0 accel: 0 Variable screen info: xres: 1024 yres: 768 xres_virtual: 1024 yres_virtual: 768 yoffset: 0 xoffset: 0 bits_per_pixel: 16 grayscale: 0 red: offset: 11, length: 5, msb_right: 0 green: offset: 5, length: 6, msb_right: 0 blue: offset: 0, length: 5, msb_right: 0 transp: offset: 0, length: 0, msb_right: 0 nonstd: 0 activate: 0 height: -1 width: -1 accel_flags: 0x0 pixclock: 12714 left_margin: 128 right_margin: 32 upper_margin: 16 lower_margin: 4 hsync_len: 128 vsync_len: 4 sync: 0 vmode: 0 Frame Buffer Performance test... Average: 2508 usecs Bandwidth: 1196.172 MByte/Sec Max. FPS: 398.724 fps |
4、还可以通过fb在命令行模式下看视频,如:sudo mplayer –vo fbdev ./air_nessesity.mpg。