⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux宝库 - linux下framebuffer直接写屏.htm

📁 本人收集的framebuffer资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
            title="Linux 环境下 Makefile 文件制作浅谈(一)" 
            href="http://www.linuxmine.com/3690.html">Linux 环境下 Makefile 
            文件制作浅谈(一)</A><BR>·<A title=Linux下FrameBuffer直接写屏 
            href="http://www.linuxmine.com/3787.html">Linux下FrameBuffer直接写屏</A><BR>·<A 
            title="GCC 安装手册[中文版]" href="http://www.linuxmine.com/3707.html">GCC 
            安装手册[中文版]</A><BR>·<A title="如何在 linux 下检测内存泄漏" 
            href="http://www.linuxmine.com/3694.html">如何在 linux 
            下检测内存泄漏</A><BR>·<A title=生成静态连接库 
            href="http://www.linuxmine.com/1024.html">生成静态连接库</A><BR>·<A 
            title=请高手讲讲C语言函数strtok()和memcpy() 
            href="http://www.linuxmine.com/978.html">请高手讲讲C语言函数strtok()和memcpy()</A><BR>·<A 
            title="C 编程最佳实践" href="http://www.linuxmine.com/3679.html">C 
            编程最佳实践</A><BR>·<A title="./configure make make install分别是什么意思呀" 
            href="http://www.linuxmine.com/1000.html">./configure make make 
            install分别是什么意思呀</A><BR>·<A title=网络字节序的问题 
            href="http://www.linuxmine.com/1047.html">网络字节序的问题</A><BR>·<A 
            title=gdb使用 
            href="http://www.linuxmine.com/1028.html">gdb使用</A><BR>·<A 
            title="Linux 环境下 Makefile 文件制作浅谈(二)" 
            href="http://www.linuxmine.com/3691.html">Linux 环境下 Makefile 
            文件制作浅谈(二)</A><BR>·<A title="GCC 使用指南及gcc最佳编译参数" 
            href="http://www.linuxmine.com/3771.html">GCC 
            使用指南及gcc最佳编译参数</A><BR>·<A title=linux的c编程技巧 
            href="http://www.linuxmine.com/5630.html">linux的c编程技巧</A><BR>·<A 
            title=C语言中的位运算 
            href="http://www.linuxmine.com/4458.html">C语言中的位运算</A><BR>·<A 
            title=linux2.6内核epoll用法举例说明 
            href="http://www.linuxmine.com/741.html">linux2.6内核epoll用法举例说明</A><BR></FONT></TD>
          <TD></TD></TR></TBODY></TABLE></TD>
    <TD width=1 bgColor=#ff8a00 height=5></TD>
    <TD bgColor=#ff8a00 colSpan=6 height=25 rowSpan=2><IMG height=3 
      src="Linux宝库 - Linux下FrameBuffer直接写屏.files/spacer.gif" width=1><BR><SPAN 
      class=text_white>&nbsp;&nbsp;&nbsp;&nbsp;您现在的位置: <A class=white_text 
      href="http://www.linuxmine.com/">Linux宝库</A> &gt;&gt; <A class=white_text 
      href="http://www.linuxmine.com/channel52.html">Linux</A> &gt;&gt; <A 
      class=white_text href="http://www.linuxmine.com/type1063.html">编程技术</A> 
      &gt;&gt; 文章正文</SPAN></TD></TR>
  <TR>
    <TD bgColor=#333333 height=15></TD>
    <TD bgColor=#333333></TD></TR>
  <TR>
    <TD style="BACKGROUND-REPEAT: repeat-x" 
    background="Linux宝库 - Linux下FrameBuffer直接写屏.files/top_bg2.gif"></TD>
    <TD width=1 bgColor=#333333></TD>
    <TD width=1 bgColor=#333333></TD>
    <TD style="BACKGROUND-REPEAT: repeat-x" vAlign=top width=15 
    background="Linux宝库 - Linux下FrameBuffer直接写屏.files/top_bg2.gif"><IMG 
      height=174 src="Linux宝库 - Linux下FrameBuffer直接写屏.files/yinying.gif" 
      width=12></TD>
    <TD style="BACKGROUND-REPEAT: repeat-x" vAlign=top width=559 
    background="Linux宝库 - Linux下FrameBuffer直接写屏.files/top_bg2.gif">
      <TABLE cellSpacing=0 cellPadding=0 width=559 border=0>
        <TBODY>
        <TR>
          <TD vAlign=center align=middle colSpan=2 height=70><FONT 
            style="FONT-SIZE: 16px"><B>Linux下FrameBuffer直接写屏</B></FONT></TD></TR>
        <TR>
          <TD align=middle colSpan=2 height=20>Linux宝库 收集整理  作者:linux宝库  
            时间:2007-02-09  <A 
            onclick="myAddPanel('Linux宝库 - 全球中文Linux门户','http://www.linuxmine.com/','Linux宝库-全球中文Linux门户');" 
            href="http://www.linuxmine.com/3787.html#" 
        target=_self>收藏本站</A></TD></TR>
        <TR>
          <TD width=556 bgColor=#969594 height=1></TD>
          <TD width=3 rowSpan=3></TD></TR>
        <TR>
          <TD height=1></TD></TR>
        <TR>
          <TD bgColor=#ededec height=5></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=559 border=0>
        <TBODY>
        <TR>
          <TD colSpan=5 height=15></TD></TR>
        <TR>
          <TD width=5 rowSpan=3></TD>
          <TD vAlign=top colSpan=3><FONT style="LINE-HEIGHT: 18px" 
            color=#333333>
            <TABLE cellSpacing=0 cellPadding=1 border=0>
              <TBODY>
              <TR>
                <TD>来自:linux宝库</TD></TR>
              <TR>
                <TD>联系:linuxmine#gmail.com</FONT></TD></TR>
              <TR>
                <TD>分类:<A 
                  href="http://www.linuxmine.com/type1063.html">[编程技术]</A></FONT></TD></TR></TBODY></TABLE><BR><SPAN 
            class=title_js_lan>·上一篇:</SPAN><A class=link_js_lan 
            title=Linux下的音频采集与回放 
            href="http://www.linuxmine.com/3786.html">Linux下的音频采集与回放</A><BR><SPAN 
            class=title_js_lan>·下一篇:</SPAN><A class=link_js_lan 
            title="MVC 设计模式带来更好的软件结构和代码重用" 
            href="http://www.linuxmine.com/3788.html">MVC 
            设计模式带来更好的软件结构和代码重用</A><BR><BR>
            <SCRIPT type=text/javascript>
var arrBaiduCproConfig=new Array();
arrBaiduCproConfig['uid'] =353007;
arrBaiduCproConfig['n'] ='linuxmine_cpr';
arrBaiduCproConfig['tm'] =20;
arrBaiduCproConfig['cm'] =76;
arrBaiduCproConfig['um'] =26;
arrBaiduCproConfig['w'] =559;
arrBaiduCproConfig['h'] =120;
arrBaiduCproConfig['wn'] =1;
arrBaiduCproConfig['hn'] =4;
arrBaiduCproConfig['ta'] ='right';
arrBaiduCproConfig['tl'] ='bottom';
arrBaiduCproConfig['bu'] =0;
arrBaiduCproConfig['bd'] ='#ffffff';
arrBaiduCproConfig['bg'] ='#ffffff';
arrBaiduCproConfig['tt'] ='#0000cc';
arrBaiduCproConfig['ct'] ='#000000';
arrBaiduCproConfig['url'] ='#0000cc';
arrBaiduCproConfig['bdl'] ='#ffffff';
arrBaiduCproConfig['rad'] =1;
</SCRIPT>

            <SCRIPT src="Linux宝库 - Linux下FrameBuffer直接写屏.files/ui.js" 
            type=text/javascript>
</SCRIPT>

            <SCRIPT type=text/javascript>
<!--
document.write(baiduCproIFrame());
-->
</SCRIPT>
            <BR>作者:hotfire [文章出自: 
            www.phpx.com]<BR><BR>因为Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里<BR>提供的中断调用来实现直接写屏,故Linux抽象出FrameBuffer这个设备来供用户态<BR>进程实现直接写屏。<BR><BR>在继续下面的之前,先说明几个背景知识:<BR>1、FrameBuffer主要是根据VESA标准的实现的,所以只能实现最简单的功能。<BR>2、由于涉及内核的问题,FrameBuffer是不允许在系统起来后修改显示模式等一系<BR>列操作。(好象很多人都想要这样干,这是不被允许的,当然如果你自己与驱动<BR>的话,是可以实现的)<BR>3、对FrameBuffer的操作,会直接影响到本机的所有控制台的输出,包括XWIN的图<BR>形界面。<BR><BR>好,现在可以让我们开始实现直接写屏:<BR>1、打开一个FrameBuffer设备<BR>2、通过mmap调用把显卡的物理内存空间映射到用户空间<BR>3、直接写内存。<BR><BR>好象很简单哦~<BR>fbtools.h<BR><BR>代码:<BR>#ifndef 
            _FBTOOLS_H_<BR>#define _FBTOOLS_H_<BR><BR>#include 
            &lt;linux/fb.h&gt;<BR><BR>//a framebuffer device 
            structure;<BR>typedef struct fbdev{<BR>int fb;<BR>unsigned long 
            fb_mem_offset;<BR>unsigned long fb_mem;<BR>struct fb_fix_screeninfo 
            fb_fix;<BR>struct fb_var_screeninfo fb_var;<BR>char dev[20];<BR>} 
            FBDEV, *PFBDEV;<BR><BR>//open &amp; init a frame buffer<BR>//to use 
            this function,<BR>//you must set FBDEV.dev="/dev/fb0"<BR>//or 
            "/dev/fbX"<BR>//it's your frame buffer.<BR>int fb_open(PFBDEV 
            pFbdev);<BR><BR>//close a frame buffer<BR>int fb_close(PFBDEV 
            pFbdev);<BR><BR>//get display depth<BR>int get_display_depth(PFBDEV 
            pFbdev);<BR><BR><BR>//full screen clear<BR>void fb_memset(void 
            *addr, int c, size_t 
            len);<BR><BR>#endif<BR><BR><BR><BR>fbtools.c<BR><BR>代码:<BR>#include 
            &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include 
            &lt;fcntl.h&gt;<BR>#include &lt;unistd.h&gt;<BR>#include 
            &lt;string.h&gt;<BR>#include &lt;sys/ioctl.h&gt;<BR>#include 
            &lt;sys/mman.h&gt;<BR>#include &lt;asm/page.h&gt;<BR><BR>#include 
            "fbtools.h"<BR><BR>#define TRUE 1<BR>#define FALSE 0<BR>#define 
            MAX(x,y) ((x)&gt;(y)?(x):(y))<BR>#define MIN(x,y) 
            ((x)&lt;(y)?(x):(y))<BR><BR>//open &amp; init a frame buffer<BR>int 
            fb_open(PFBDEV pFbdev)<BR>{<BR>pFbdev-&gt;fb = open(pFbdev-&gt;dev, 
            O_RDWR);<BR>if(pFbdev-&gt;fb &lt; 0)<BR>{<BR>printf("Error opening 
            %s: %m. Check kernel config\\n", pFbdev-&gt;dev);<BR>return 
            FALSE;<BR>}<BR>if (-1 == 
            ioctl(pFbdev-&gt;fb,FBIOGET_VSCREENINFO,&amp;(pFbdev-&gt;fb_var)))<BR>{<BR>printf("ioctl 
            FBIOGET_VSCREENINFO\\n");<BR>return FALSE;<BR>}<BR>if (-1 == 
            ioctl(pFbdev-&gt;fb,FBIOGET_FSCREENINFO,&amp;(pFbdev-&gt;fb_fix)))<BR>{<BR>printf("ioctl 
            FBIOGET_FSCREENINFO\\n");<BR>return FALSE;<BR>}<BR><BR>//map physics 
            address to virtual address<BR>pFbdev-&gt;fb_mem_offset = (unsigned 
            long)(pFbdev-&gt;fb_fix.smem_start) &amp; 
            (~PAGE_MASK);<BR>pFbdev-&gt;fb_mem = (unsigned long int)mmap(NULL, 
            pFbdev-&gt;fb_fix.smem_len + 
            <BR>pFbdev-&gt;fb_mem_offset,<BR>PROT_READ | PROT_WRITE, MAP_SHARED, 
            pFbdev-&gt;fb, 0);<BR>if (-1L == (long) pFbdev-&gt;fb_mem) 
            <BR>{<BR>printf("mmap error! mem:%d offset:%d\\n", 
            pFbdev-&gt;fb_mem, <BR>pFbdev-&gt;fb_mem_offset);<BR>return 
            FALSE;<BR>}<BR><BR>return TRUE;<BR>}<BR><BR>//close frame 
            buffer<BR>int fb_close(PFBDEV 
            pFbdev)<BR>{<BR>close(pFbdev-&gt;fb);<BR>pFbdev-&gt;fb=-1;<BR>}<BR><BR>//get 
            display depth<BR>int get_display_depth(PFBDEV 
            pFbdev);<BR>{<BR>if(pFbdev-&gt;fb&lt;=0)<BR>{<BR>printf("fb device 
            not open, open it first\\n");<BR>return FALSE;<BR>}<BR>return 
            pFbdev-&gt;fb_var.bits_per_pixel;<BR>}<BR><BR>//full screen 
            clear<BR>void fb_memset (void *addr, int c, size_t 
            len)<BR>{<BR>memset(addr, c, len);<BR>}<BR><BR>//use by 
            test<BR>#define DEBUG<BR>#ifdef DEBUG<BR>main()<BR>{<BR>FBDEV 
            fbdev;<BR>memset(&amp;fbdev, 0, sizeof(FBDEV));<BR>strcpy(fbdev.dev, 
            "/dev/fb0");<BR>if(fb_open(&amp;fbdev)==FALSE)<BR>{<BR>printf("open 
            frame buffer 
            error\\n");<BR>return;<BR>}<BR><BR>fb_memset(fbdev.fb_mem + 
            fbdev.fb_mem_offset, 0, 
            fbdev.fb_fix.smem_len);<BR><BR>fb_close(&amp;fbdev);<BR>}<BR><BR><BR><BR><BR><A 
            href="http://bbs.linuxmine.com/" target=_blank><FONT 
            style="FONT-SIZE: 24px; COLOR: red">--&gt;进入linux电子图书免费下载基地</A></FONT><BR><BR><BR><SPAN 
            class=title_js_lan>·上一篇:</SPAN><A class=link_js_lan 
            title=Linux下的音频采集与回放 
            href="http://www.linuxmine.com/3786.html">Linux下的音频采集与回放</A><BR><SPAN 
            class=title_js_lan>·下一篇:</SPAN><A class=link_js_lan 
            title="MVC 设计模式带来更好的软件结构和代码重用" 
            href="http://www.linuxmine.com/3788.html">MVC 
            设计模式带来更好的软件结构和代码重用</A><BR><BR></FONT></TD>
          <TD width=5 rowSpan=3></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=559 border=0>
        <TBODY>
        <TR>
          <TD width=5 rowSpan=5></TD>
          <TD colSpan=10 height=15>&nbsp;</TD>
          <TD width=5 rowSpan=5></TD></TR></TBODY></TABLE></TD>
    <TD width=1 bgColor=#9e9e9e></TD>
    <TD style="BACKGROUND-REPEAT: repeat-x" vAlign=top width=190 
    background="Linux宝库 - Linux下FrameBuffer直接写屏.files/top_bg2.gif">
      <TABLE cellSpacing=0 cellPadding=0 width=190 border=0>
        <TBODY>
        <TR>
          <TD vAlign=bottom 
          background="Linux宝库 - Linux下FrameBuffer直接写屏.files/right.gif" colSpan=3 
          height=22>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT 
            color=#ffffff><B>最新更新</B></FONT></TD></TR>
        <TR>
          <TD width=5 rowSpan=3></TD>
          <TD height=8></TD>
          <TD width=5 rowSpan=3></TD></TR>
        <TR>
          <TD><FONT style="LINE-HEIGHT: 18px">·<A title=autoconf手册(四) 
            href="http://www.linuxmine.com/3736.html">autoconf手册(四)</A><FONT 
            color=#c0c0c0><I>(2007-2-9)</I></FONT><BR>·<A 
            title="Linux 环境下 Makefile 文件制作浅谈(二)" 
            href="http://www.linuxmine.com/3691.html">Linux 环境下 Makefile 
            文件制作浅谈(二)</A><FONT color=#c0c0c0><I>(2007-2-9)</I></FONT><BR>·<A 
            title=字节对齐 href="http://www.linuxmine.com/6047.html">字节对齐</A><FONT 
            color=#c0c0c0><I>(2007-2-9)</I></FONT><BR>·<A 
            title=TCP/IP通信程序设计的丰富多样性 
            href="http://www.linuxmine.com/3681.html">TCP/IP通信程序设计的丰富多样性</A><FONT 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -