unsigned char *fmem;
int FrameBufferFD;
FrameBufferFD = open("/dev/fb0", O_RDWR);
if (FrameBufferFD < 0)
{
fprintf(stderr, "Error opening /dev/fb0/n");
return (-1);
}
/* Get the fixed screen info */
if (ioctl(*FrameBufferFD, FBIOGET_FSCREENINFO, &FixedInfo))
{
fprintf(stderr, "error: ioctl(FBIOGET_FSCREENINFO) failed/n");
return (-1);
}
/* get the variable screen info */
if (ioctl(*FrameBufferFD, FBIOGET_VSCREENINFO, &OrigVarInfo))
{
fprintf(stderr, "error: ioctl(FBIOGET_VSCREENINFO) failed/n");
return (-1);
}
if (FixedInfo.visual != FB_VISUAL_TRUECOLOR && FixedInfo.visual != FB_VISUAL_DIRECTCOLOR)
{
fprintf(stderr, "non-TRUE/DIRECT-COLOR visuals (0x%x) not supported by this demo./n", FixedInfo.visual);
return (-1);
}
/*
* fbdev says the frame buffer is at offset zero, and the mmio region
* is immediately after.
*/
/* mmap the framebuffer into our address space */
fmem = mmap(0, /* start */
FixedInfo.smem_len, /* bytes */
PROT_READ | PROT_WRITE, /* prot */
MAP_SHARED, /* flags */
FrameBufferFD, /* fd */
0 /* offset */);
if (fmem == NULL)
{
fprintf(stderr, "error: unable to mmap framebuffer/n");
return(-1);
}
printf("fmem in %x/n",fmem);
return fmem;
帧缓冲区接口编程
本文介绍了一种使用帧缓冲区接口进行编程的方法。通过打开设备文件/dev/fb0并使用ioctl进行配置,获取了固定屏幕信息及可变屏幕信息。此外,还检查了视觉模式是否为真彩色或直接色彩,并将帧缓冲区映射到内存。
2858

被折叠的 条评论
为什么被折叠?



