生活随笔
收集整理的這篇文章主要介紹了
linux framebuffer 例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
昨天做的一個極簡單的framebuffer的例子,用來學習怎樣操作fb設備。
這段代碼是在picogl的vesafb backend部分的基礎上簡出來的,所以變量名還保留著。
流程如下:
1 打開framebuffer設備;
2 通過ioctl取得fixed screen information;
3 通過ioctl取得variable screen information;
4 通過mmap映射設備內存到進程空間;
5 寫framebuffer;
6 終止。
#include?<stdio.h> #include?<stdlib.h> #include?<string.h> #include?<fcntl.h> #include?<linux/fb.h> #include?<sys/mman.h> struct?fb_fix_screeninfo?FixedInfo; struct?fb_var_screeninfo?OrigVarInfo; static?int?FrameBufferFD?=?-1; void?*FrameBuffer?=?(void?*)?-1; void?openFBDEV(void)?{ ???? ????FrameBufferFD?=?open("/dev/fb0",?O_RDWR); ????if?(FrameBufferFD?<?0)?{ ????????fprintf(stderr,?"Error?opening?/dev/fb0/n"); ????????exit(1); ????} ???? ????if?(ioctl(FrameBufferFD,?FBIOGET_FSCREENINFO,?&FixedInfo))?{ ????????fprintf(stderr,?"error:?ioctl(FBIOGET_FSCREENINFO)?failed/n"); ????????exit(1); ????} ???? ????if?(ioctl(FrameBufferFD,?FBIOGET_VSCREENINFO,?&OrigVarInfo))?{ ????????fprintf(stderr,?"error:?ioctl(FBIOGET_VSCREENINFO)?failed/n"); ????????exit(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); ????????exit(1); ????} ???? ???? ????FrameBuffer?=?(void?*)?mmap(0,? ????????FixedInfo.smem_len,? ????????PROT_READ?|?PROT_WRITE,? ????????MAP_SHARED,? ????????FrameBufferFD,? ????????0?); ????if?(FrameBuffer?==?(void?*)?-?1)?{ ????????fprintf(stderr,?"error:?unable?to?mmap?framebuffer/n"); ????????exit(1); ????} } void?closeFBDEV(void)?{ ????munmap(FrameBuffer,?FixedInfo.smem_len); ????close(FrameBufferFD); } int?main()?{ ????openFBDEV(); ????fprintf(stderr,?"openFBDEV?finish/n"); ????memset(FrameBuffer,?128,?FixedInfo.smem_len); ????sleep(5); ????closeFBDEV(); ????fprintf(stderr,?"closeFBDEV?finish/n"); ????return?0; } ?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的linux framebuffer 例子的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。