2、操作LCD的逻辑流程分析帧缓冲设备对应的设备文件为/dev/fb*,linux最多支持32个帧缓冲设备,分别为/dev/fb0到/dev/fb31,而/dev/fb是当前默认的帧缓冲设备,通常指向/dev/fb0;
3、应用操作LCD设备的源码(1)使用open函数打开LCD设备的设备节点文件;
(2)调用ioctl函数获取LCD设备的信息;
(3)调用mmap函数,映射帧缓冲区到用户空间;
(4)将要显示的内容写入到帧缓冲区;
#include#include #include #include #include #include #include // 设备节点 #define FBDEVICE "/dev/fb0" //屏幕的实际分辨率 #define WIDTH 1024 #define HEIGHT 600 #define WHITE 0xffffffff // test ok // 设置屏幕背景色 void draw_back(unsigned int width, unsigned int height, unsigned int color); // 全局变量 unsigned int *pfb = NULL; int main(void) { int fd = -1, ret = -1; struct fb_fix_screeninfo finfo = {0}; struct fb_var_screeninfo vinfo = {0}; // 第1步:打开设备 fd = open(FBDEVICE, O_RDWR); // 第2步:获取设备的硬件信息 ret = ioctl(fd, FBIOGET_FSCREENINFO, &finfo); printf("smem_start = 0x%x, smem_len = %u.n", finfo.smem_start, finfo.smem_len); ret = ioctl(fd, FBIOGET_VSCREENINFO, &vinfo); printf("xres = %u, yres = %u.n", vinfo.xres, vinfo.yres); printf("xres_virtual = %u, yres_virtual = %u.n", vinfo.xres_virtual, vinfo.yres_virtual); printf("bpp = %u.n", vinfo.bits_per_pixel); // 第3步:进行mmap unsigned long len = vinfo.xres_virtual * vinfo.yres_virtual * vinfo.bits_per_pixel / 8; printf("len = %ldn", len); pfb = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (NULL == pfb) { perror("mmap"); return -1; } printf("pfb = %p.n", pfb); //往帧缓冲区写数据 draw_back(WIDTH, HEIGHT, WHITE); close(fd); return 0; } void draw_back(unsigned int width, unsigned int height, unsigned int color) { unsigned int x, y; for (y=0; y for (x=0; x *(pfb + y * WIDTH + x) = color; } }}
ioctl函数中的命令在linux/fb.h文件中定义,支持多个命令,想了解更多命令的去查询这个文件;



