If you are working on a desktop machine, then the following idea works. Usually, the VGA compatible controller memory will be mapped to the physical address space which can be viewed with the help of &quot;lspci -vv&quot; command. Then open the device file &quot;/dev/mem&quot; and mmap with the offset equal to the physical address of the Graphics card. Here is a small snippet which works on my machine<br>
<br># lspci -vv | more /* Look for the section VGA compatible controller which looks like below&quot;<br><br>00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Integrated Graphics Controlle<br>r (rev 0e) (prog-if 00 [VGA controller])<br>
        Subsystem: Hewlett-Packard Company Device 301d<br>        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2<br>B- DisINTx-<br>        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast &gt;TAbort- &lt;TAbort- &lt;MAbort- &gt;SERR- &lt;P<br>
ERR- INTx-<br>        Latency: 0<br>        Interrupt: pin A routed to IRQ 11<br>        Region 0: Memory at fdf00000 (32-bit, non-prefetchable) [size=512K]<br>        Region 1: I/O ports at ff00 [size=8]<br>        <b>Region 2: Memory at d0000000 (32-bit, prefetchable) [size=256M]</b><br>
        Region 3: Memory at fdf80000 (32-bit, non-prefetchable) [size=256K]<br>        Expansion ROM at &lt;unassigned&gt; [disabled]<br>        Capabilities: &lt;access denied&gt;<br><br>&gt;&gt; Here, focus on Region 2, which shows 256MB of Graphics card memory is mapped <br>
    in the physical address space from 0xd0000000 to 0xe0000000.<br><br>Now open the device mem as <br>          fd = open = (&quot;/dev/mem&quot;, O_RDWR)<br>and do an mmap as <br>          <b>vgamem </b>= mmap (NULL, 0x10000000, PROT_READ | PROT_WRITE,  <br>
                                     MAP_SHARED, fd, 0xd0000000)<br>0x10000000 = 256MB of graphics card memory<br>0xd0000000 = base of the physical address of graphics card memory<br><br><b>vgamem </b>will be the user virtual address which is mapped to the physical address of Graphics card memory. <br>
<br>To verify the mapping, write some bit patterns to 256MB of memory starting from vgamem. <br>If you see distortion on your desktop, then you have written on to your graphics card<br>memory. <br><br>Once you see see the distortion, move your mouse around so that graphics memory is refreshed and your original screen contents are seen. <br>
<br>Regards,<br>Prabhu<br><br><br><br><br><div class="gmail_quote">On Sun, Jan 16, 2011 at 12:25 AM, Elvis Y. Tamayo Moyares <span dir="ltr">&lt;<a href="mailto:etmoyares@grm.uci.cu">etmoyares@grm.uci.cu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hello list. How I can access the video memory directly from user<br>
space? I tried to map the framebuffer (/dev/fb0) using mmap() and<br>
ioctl(), but I have not been successful. Really I want to make a copy<br>
of the contents of video memory and save it  as an image. have any<br>
suggestions?<br>
<br>
----------------------------------------------------------------<br>
This message was sent using IMP, the Internet Messaging Program.<br>
<br>
<br>
<br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div><br>