最近项目使用的嵌入式Linux环境没有现成的截屏工具,所有就写了一个可以使用的
![]()
Framebuffer /dev/fb0 | BMP图像生成
在嵌入式Linux环境,很多设备没有X11/Wayland图形桌面,没有scrot、ffmpeg这类截屏工具。可以直接读取内核Framebuffer帧缓冲设备/dev/fb0,把屏幕显存数据读取出来,直接生成BMP图片。本文分析一段极简的fbgrab.c截屏代码,理解帧缓冲编程、mmap显存映射、BMP文件格式。
完整源代码 fbgrab.c
/* fbgrab.c - 抓取 /dev/fb0 可见区域,输出 24 位 BMP */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #include <sys/ioctl.h> #include <linux/fb.h> int main(int argc, char **argv) { const char *dev = (argc > 1) ? argv[1]