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

📄 关于framebuffer的一些文章_ - 我的文章 - t_t.htm

📁 S3C44B0X下的LCD (framebuffer)驱动资料与相关代码
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            style="FONT-FAMILY: 宋体">的应用</SPAN></P>
            <P class=MsoNormal><SPAN 
            style="FONT-FAMILY: 宋体">(一)、一个使用</SPAN><SPAN 
            lang=EN-US>FrameBuffer</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">的例子</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>1</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">、</SPAN><SPAN 
            lang=EN-US>FrameBuffer</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">主要是根据</SPAN><SPAN 
            lang=EN-US>VESA</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">标准的实现的,所以只能实现最简单的功能。</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>2</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">、由于涉及内核的问题,</SPAN><SPAN 
            lang=EN-US>FrameBuffer</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">是不允许在系统起来后修改显示模式等一系列操作。(好象很多人都想要这样干,这是不被允许的,当然如果你自己写驱动的话,是可以实现的)</SPAN><SPAN 
            lang=EN-US>.</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>3</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">、对</SPAN><SPAN 
            lang=EN-US>FrameBuffer</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">的操作,会直接影响到本机的所有控制台的输出,包括</SPAN><SPAN 
            lang=EN-US>XWIN</SPAN><SPAN 
style="FONT-FAMILY: 宋体">的图形界面。</SPAN></P>
            <P class=MsoNormal><SPAN 
            style="FONT-FAMILY: 宋体">好,现在可以让我们开始实现直接写屏:</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>1</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">、打开一个</SPAN><SPAN 
            lang=EN-US>FrameBuffer</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">设备</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>2</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">、通过</SPAN><SPAN lang=EN-US>mmap</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">调用把显卡的物理内存空间映射到用户空间</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>3</SPAN><SPAN 
            style="FONT-FAMILY: 宋体">、直接写内存。</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US>/********************************</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>File name : fbtools.h</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>*/</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#ifndef _FBTOOLS_H_</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#define _FBTOOLS_H_</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;linux/fb.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//a framebuffer device 
            structure;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>typedef struct fbdev{</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int 
            fb;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>unsigned long fb_mem_offset;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>unsigned long fb_mem;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>struct 
            fb_fix_screeninfo fb_fix;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>struct 
            fb_var_screeninfo fb_var;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>char 
            dev[20];</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>} FBDEV, *PFBDEV;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//open &amp; init a frame 
            buffer</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//to use this 
            function,</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//you must set 
            FBDEV.dev="/dev/fb0"</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//or "/dev/fbX"</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//it's your frame 
            buffer.</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>int fb_open(PFBDEV 
            pFbdev);</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//close a frame 
buffer</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>int fb_close(PFBDEV 
            pFbdev);</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//get display depth</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>int get_display_depth(PFBDEV 
            pFbdev);</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//full screen clear</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>void fb_memset(void *addr, int 
            c, size_t len);</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#endif</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>&lt;!--[if 
            !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>/******************</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>File name : fbtools.c</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>*/</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;stdio.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;stdlib.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;fcntl.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;unistd.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;string.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;sys/ioctl.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;sys/mman.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude 
            &lt;asm/page.h&gt;</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#i nclude "fbtools.h"</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#define TRUE 
            <SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#define 
            FALSE<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>0</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#define 
            MAX(x,y)<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>((x)&gt;(y)?(x)y))</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#define 
            MIN(x,y)<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>((x)&lt;(y)?(x)y))</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>//open &amp; init a frame 
            buffer</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>int fb_open(PFBDEV 
            pFbdev)</SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>{</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>pFbdev-&gt;fb = open(pFbdev-&gt;dev, O_RDWR);</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>if(pFbdev-&gt;fb &lt; 0)</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>{</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>printf("Error opening %s: %m. Check kernel config\n", 
            pFbdev-&gt;dev);</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>return FALSE;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>}</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>if (-1 
            == 
            ioctl(pFbdev-&gt;fb,FBIOGET_VSCREENINFO,&amp;(pFbdev-&gt;fb_var)))</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>{</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>printf("ioctl FBIOGET_VSCREENINFO\n");</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>return FALSE;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>}</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>if (-1 
            == 
            ioctl(pFbdev-&gt;fb,FBIOGET_FSCREENINFO,&amp;(pFbdev-&gt;fb_fix)))</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>{</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>printf("ioctl FBIOGET_FSCREENINFO\n");</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>return FALSE;</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>}</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//map 
            physics address to virtual address</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>pFbdev-&gt;fb_mem_offset = (unsigned 
            long)(pFbdev-&gt;fb_fix.smem_start) &amp; (~PAGE_MASK);</SPAN></P>
            <P class=MsoNormal><SPAN 
            lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>pFbdev-&gt;fb_mem = (unsigned long int)mmap(NULL, 

⌨️ 快捷键说明

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