当前位置: 技术问答>linux和unix
framebuffer 双缓冲问题
来源: 互联网 发布时间:2017-01-18
本文导语: 刚刚接触linux,不太了解,可能会问一些比较低级的问题,请包涵。 我看了网上的一些Framebuffer的资料,有提到通过设置yoffset的值来实现双缓冲的。 百度知道里的一段: 如果你的屏幕为800x600,各...
刚刚接触linux,不太了解,可能会问一些比较低级的问题,请包涵。
我看了网上的一些Framebuffer的资料,有提到通过设置yoffset的值来实现双缓冲的。
百度知道里的一段:
如果你的屏幕为800x600,各参数设定为:
xres = 800
yres = 600
xres_virtual = 800
xres_virtual = 600x2 = 1200
缺省的yoffset = 0;
显示的是(0,0)到(800,600)到可视区
当你设定yoffset = 600时
(0,600)到(800,1200)将显示到可视区,就这样实现双缓冲
但实际使用中遇到问题。使用
fb_vmeminfo.xoffset=0;
fb_vmeminfo.yoffset=600;
if(-1==(ioctl(fdtem,FBIOPAN_DISPLAY,&fb_vmeminfo)))//此处会执行错误
……
返回值总是-1。
FBIOPAN_DISPLAY,FBIOPUT_VSCREENINFO两个宏好像不起作用。
先FBIOGET_VSCREENINFO得到struct fb_var_screeninfo fb_vinfo
修改fb_vinfo的一些成员值后用FBIOPUT_VSCREENINFO设置,但不起作用。
网上看到有人也提了这样的问题,可是没有答复。
望达人指点一下。谢谢
说的不清楚的地方请指出 我补充
我看了网上的一些Framebuffer的资料,有提到通过设置yoffset的值来实现双缓冲的。
百度知道里的一段:
如果你的屏幕为800x600,各参数设定为:
xres = 800
yres = 600
xres_virtual = 800
xres_virtual = 600x2 = 1200
缺省的yoffset = 0;
显示的是(0,0)到(800,600)到可视区
当你设定yoffset = 600时
(0,600)到(800,1200)将显示到可视区,就这样实现双缓冲
但实际使用中遇到问题。使用
fb_vmeminfo.xoffset=0;
fb_vmeminfo.yoffset=600;
if(-1==(ioctl(fdtem,FBIOPAN_DISPLAY,&fb_vmeminfo)))//此处会执行错误
……
返回值总是-1。
FBIOPAN_DISPLAY,FBIOPUT_VSCREENINFO两个宏好像不起作用。
先FBIOGET_VSCREENINFO得到struct fb_var_screeninfo fb_vinfo
修改fb_vinfo的一些成员值后用FBIOPUT_VSCREENINFO设置,但不起作用。
网上看到有人也提了这样的问题,可是没有答复。
望达人指点一下。谢谢
说的不清楚的地方请指出 我补充
|
那你要好好看看你的fb驱动了,我估计你的驱动不支持这两个选项。
报-1也不应该,毕竟抽象层都是实现的。
你说的具体点,把驱动和测试代码联系起来看
报-1也不应该,毕竟抽象层都是实现的。
你说的具体点,把驱动和测试代码联系起来看
|
gdb 跟不到kernel mode。
内核模式要用kgdb。
你这种情况还是printk吧。
估计就是不支持pan_display
内核模式要用kgdb。
你这种情况还是printk吧。
估计就是不支持pan_display
|
fb_vmeminfo没什么大问题。
光知道-1的返回值没法判断错误情况,
把Linux内核的errno打印出来吧。
----------------------------------
#include
光知道-1的返回值没法判断错误情况,
把Linux内核的errno打印出来吧。
----------------------------------
#include
|
参数无效啊,好像很有可能不支持FBIOPAN_DISPLAY。
能否公开你的硬件平台的一些信息?
能否公开你的硬件平台的一些信息?
|
一点想法:
你的是什么硬件平台,是否支持双缓冲?
你的是什么硬件平台,是否支持双缓冲?
|
显示模式是否设定(vga=0xxxx)
比如640*480*256色 vga=0x301
比如640*480*256色 vga=0x301