
1. 什么是 framebuffer帧缓冲 (framebuffer) 是 Linux 给显示设备提供的抽象接口把显卡显存抽象成设备文件/dev/fb0。 应用程序直接读写这个设备文件就可以操作屏幕像素点完成画面绘制不需要关心显卡硬件细节。核心思想把显存当成普通文件来操作一般配合内存映射mmap使用。2. framebuffer 像素格式显存中保存每一个像素的颜色常见两种格式RGB88884 字节R 红‑8bitG 绿‑8bitB 蓝‑8bitA 透明度‑8bit一共 4 字节。RGB5652 字节R‑5bitG‑6bitB‑5bit一共 2 字节嵌入式小屏常用。向映射后的内存地址写入对应颜色数值屏幕对应位置像素就会变色。3. framebuffer 标准操作步骤打开显示设备文件/dev/fb0使用open()系统调用。获取显示设备参数拿到屏幕分辨率、色深每个像素多少 bit。建立内存映射 mmap把内核里的显存空间映射到用户程序内存空间用户空间直接读写内存就等价于操作显存避免频繁 read/write 系统调用效率高。写入 RGB 颜色值操作映射得到的内存指针修改像素颜色。解除内存映射 munmap关闭设备文件 close4. mmap 函数详解void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);功能建立文件这里是 fb0 显存和用户空间的内存映射。参数addr期望映射到的用户空间起始地址填NULL由内核自动选择地址返回映射后的首地址。length需要映射的内存空间总字节大小。prot映射内存权限PROT_READ | PROT_WRITE可读可写。flags映射标志MAP_SHARED共享映射用户空间修改会同步到硬件显存必须选这个。fd已经 open 成功的 framebuffer 设备文件描述符。offset文件内偏移framebuffer 一般填 0。返回值成功返回映射到用户空间的内存首地址失败返回MAP_FAILED即(void *)-1。示例逻辑unsigned int *pmem mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); // 在(x,y)坐标写入颜色 *(pmem y*宽 x) 0x00FF0000; // 红色像素5. 配套解除映射int munmap(void *addr, size_t length);使用结束必须调用munmap释放映射参数为 mmap 返回的地址、映射长度之后再close(fd)关闭设备。6. 补充知识点不使用 mmap 也可以用write()往/dev/fb0写颜色数据但每一次写都会陷入内核频繁画点性能很差嵌入式几乎都用 mmap 内存映射方式。一个系统可以有多个帧缓冲设备/dev/fb0、/dev/fb1代表不同显示屏。应用层只操作映射后的虚拟地址硬件寄存器由显卡驱动处理上层完全不用管硬件寄存器。