日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux framebuffer 例子

發布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)?{
  • ????/*?open?the?framebuffer?device?*/
  • ????FrameBufferFD?=?open("/dev/fb0",?O_RDWR);
  • ????if?(FrameBufferFD?<?0)?{
  • ????????fprintf(stderr,?"Error?opening?/dev/fb0/n");
  • ????????exit(1);
  • ????}
  • ????/*?Get?the?fixed?screen?info?*/
  • ????if?(ioctl(FrameBufferFD,?FBIOGET_FSCREENINFO,?&FixedInfo))?{
  • ????????fprintf(stderr,?"error:?ioctl(FBIOGET_FSCREENINFO)?failed/n");
  • ????????exit(1);
  • ????}
  • ????/*?get?the?variable?screen?info?*/
  • ????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);
  • ????}
  • ????/*
  • ?????*?fbdev?says?the?frame?buffer?is?at?offset?zero,?and?the?mmio?region
  • ?????*?is?immediately?after.
  • ?????*/
  • ????/*?mmap?the?framebuffer?into?our?address?space?*/
  • ????FrameBuffer?=?(void?*)?mmap(0,?/*?start?*/
  • ????????FixedInfo.smem_len,?/*?bytes?*/
  • ????????PROT_READ?|?PROT_WRITE,?/*?prot?*/
  • ????????MAP_SHARED,?/*?flags?*/
  • ????????FrameBufferFD,?/*?fd?*/
  • ????????0?/*?offset?*/);
  • ????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 例子的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。