以前在linux做图形界面的时候用的是SDL,我对于SDL的理解是一些算法在操作一些设备(fb,event等);如果在做嵌入式产品的时候,我们肯定得考虑内存和效率的问题;SDL毕竟是通用的,所以在特定的时候直接操作一定会比SDL效率高。原因是少了中间的拷贝过程
下边介绍这样使用/dev/fb,其实linux的所以设备都是文件的形式,所以操作起来很方便:
打开设备:fb=open("/dev/fb0", O_RDWR);
得到设备参数:ioctl(fb, FBIOGET_FSCREENINFO, &finfo) ioctl(fb, FBIOGET_VSCREENINFO, &vinfo)
内存映射:void *fbuffer =mmap(NULL, finfo.smem_len, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fb, 0); 内存映射返回一个映射后的首地址,这个地址不占用物理内存而是虚拟的地址是操作系统来分配的;我们可以再返回的地址上直接写屏了
画一个点:void pix

本文介绍了在Linux环境下,为了提高效率和节省内存,如何直接操作Framebuffer设备文件来实现图形界面的方法。通过打开/dev/fb0设备,获取设备参数,进行内存映射,然后实现画点、画直线和八分法画圆等基本图形操作。这种方式避开了通用库如SDL,减少了中间拷贝,提高了性能。
最低0.47元/天 解锁文章
384

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



