<html><head><title>Mesa fbdev/DRI Environment</title>



<link rel="stylesheet" type="text/css" href="mesa.css"></head>

<body>

<center><h1>Mesa fbdev/DRI Drivers</h1></center>
<br>

<h1><center>NOTE: this information is obsolete and will be removed at
a future date</center></h1>

<h1>1. Introduction</h1>

<p>
The fbdev/DRI environment supports hardware-accelerated 3D rendering without
the X window system.  This is typically used for embedded applications.
</p>

<p>
Contributors to this project include Jon Smirl, Keith Whitwell and Dave Airlie.
</p>

<p>
Applications in the fbdev/DRI environment use
the MiniGLX interface to choose pixel
formats, create rendering contexts, etc.  It's a subset of the GLX and
Xlib interfaces allowing some degree of application portability between
the X and X-less environments.
</p>

<p>
Note that this environment is not well-supported and these instructions
may not be completely up to date.
</p>
<br>



<h1>2. Compilation</h1>
<p>

<h2>2.1 glxproto</h2>

Get <a href="http://cvsweb.xfree86.org/cvsweb/*checkout*/xc/include/GL/glxproto.h?rev=1.9">glxproto.h</a>. Copy it to the /mesa/include/GL/ directory.
</p>

<h2>2.2 libpciaccess</h2>
<p>
Check if you have libpciaccess installed:
</p>

<pre>pkg-config --modversion pciaccess
</pre>
<p>
If not you can download the latest code from:
</p>
<pre>   git clone git://anongit.freedesktop.org/git/xorg/lib/libpciaccess
</pre>
<p>
Run autogen.sh to generate a configure file. autogen.sh uses autoconf
utility. This utility may not be installed with your linux distro,
check if it is available. if not you can use your package manager or
type:
</p>
<pre>sudo apt-get install autoconf
</pre>
The next step is to install the libpciaccess library. 
<pre>make
make install
</pre>
<p> Now your libpciaccess.a file is saved into /usr/local/lib
directory. If you have a libpciaccess.a in /usr/lib you may simply copy
and overwrite these files. Don't forget to copy libpciaccess.pc file to
/usr/lib/pkgconfig, which is also located in /usr/local/lib/pkgconfig/.
Or you may use the following system variables:
</p>
<pre>export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
</pre>

<h2>2.3 drm</h2>

<p>The next step is to compile the drm. DRM consists of two seperate parts,
the DRM client library(lindrm.so) and kernel device module(such as
radeon.ko). We need to make a small change in kernel device module. So
you need to download the kernel source. You may choose the nearest
mirror from www.kernel.org, or you are using Fedora Core 5, for
example, you may need to install RPMs such as:
kernel-smp-devel-2.16.15-1.2054_FC5.i686.rpm
kernel-devel-2.6.15-1.2054_FC5.i686.rpm
etc. You can find a detailed information <a href="http://www.howtoforge.com/kernel_compilation_fedora">here.</a>
</p>

<p>You will find drm_drv.c at /usr/src/LINUX-VERSION/drivers/char/drm/. Edit this code and comment out the following part:
</p>

<pre>
   /* ||
   ((ioctl-&gt;flags &amp; DRM_MASTER) &amp;&amp; !priv-&gt;master)*/
</pre>
Now you are ready to compile your kernel. If your kernel version is
identical to the version you have compiled, you can simply over write
your new "ko" files over older ones. If you have compiled a different
kernel, you must configure your grub or lilo to be able to boot your
new kernel. <p>
You'll need fbdev header files.  Check with:
</p>
<pre>
   ls -l /usr/include/linux/fb.
</pre>
<p>This file may be missing if you have not installed linux header files.


<h2>2.4 Mesa</h2>

</p><p>Get latest development Mesa sources from git repository
(currently 7.1-prerelease)
</p>
<pre>
   git clone git://anongit.freedesktop.org/git/mesa/mesa
</pre>

<p>You will need the makedepend utility which is a part of mesa project
to build your linux-solo. You probably wont have this utility. You can
download its source from following git repulsitory:
</p>
<pre>
   git clone git://anongit.freedesktop.org/git/xorg/util/makedepend
</pre>

<p>Get the latest stable mesa version from SourceForge (currently 7.0.3)
<a href="http://sourceforge.net/project/showfiles.php?group_id=3">http://sourceforge.net/project/showfiles.php?group_id=3</a>
</p>

<p>Copy the miniglx folder from 7.1-prerelease to 7.0.3.
You may also extract GLUT to 7.0.3 version at this step. 
</p>

<p>Edit linux-solo.conf at /conf directory, just only compile the
graphics driver you need, delete the unwanted drivers names from the
list(some drivers are causing problems...)
</p>
<pre>
   while(build==0)
   {
     make linux-solo

     There will be some missing header files, copy them from 7.1-prerelease
   }
</pre>

<p>
When complete you should have the following:
</p>
<ul>
<li>lib/libGL.so - the GL library which applications link with
</li><li>lib/*_dri_so - DRI drivers
</li><li>lib/miniglx.conf - sample MiniGLX config file
</li><li>progs/miniglx/* - several MiniGLX sample programs
</li></ul>

To install these files into appropriate locations in system:
<pre>
   make install
</pre>

Now your openGL libraries are copied to /usr/local/lib and
miniglx.conf is copied to /etc. You may copy them to /usr/lib and
overwrite your old GL libraries. Or you may export following variable:

<pre>
   export LIBGL_DRIVERS_PATH=/usr/local/lib
</pre>
<br>


<h1>3. Using fbdev/DRI</h1>

<p>
If an X server currently running, exit/stop it so you're working from
the console. Following command shuts down the x window and also the multi user support.
</p>
<pre>
   init 1
</pre>

<p>Also you may define the runlevel as 1 in "/etc/inittab". Your system
will always start in single user mode and without x-window with this
option set.
</p><h2>3.1 Load Kernel Modules</h2>

<p>
You'll need to load the kernel modules specific to your graphics hardware.
Typically, this consists of the agpgart module, an fbdev driver module
and the DRM kernel module.
</p>
<p>
As root, the kernel modules can be loaded as follows:
</p>

<p>
If you have Intel i915/i945 hardware:
</p>
<pre>   modprobe agpgart            # the AGP GART module
   modprobe intelfb            # the Intel fbdev driver
   modprobe i915               # the i915/945 DRI kernel module
</pre>

<p>
If you have ATI Radeon/R200 hardware:
</p>
<pre>   modprobe agpgart            # the AGP GART module
   modprobe radeonfb           # the Radeon fbdev driver
   modprobe radeon             # the Radeon DRI kernel module
</pre>

<p>
If you have ATI Rage 128 hardware:
</p>
<pre>   modprobe agpgart            # the AGP GART module
   modprobe aty128fb           # the Rage 128 fbdev driver
   modprobe r128               # the Rage 128 DRI kernel module
</pre>

<p>
If you have Matrox G200/G400 hardware:
</p>
<pre>   modprobe agpgart            # the AGP GART module
   modprobe mgafb              # the Matrox fbdev driver
   modprobe mga                # the Matrox DRI kernel module
</pre>

<p>
To verify that the agpgart, fbdev and drm modules are loaded:
</p>
<pre>   ls -l /dev/agpgart /dev/fb* /dev/dri
</pre>
<p>
Alternately, use lsmod to inspect the currently installed modules.
If you have problems, look at the output of dmesg.
</p>


<h2>3.2 Configuration File</h2>

<p>
review/edit /etc/miniglx.conf.
Alternately, the MINIGLX_CONF environment variable can be used to
indicate the location of miniglx.conf
</p>

To determine the pciBusID value, run lspci and examine the output.
For example:
<p></p>
<pre>   /sbin/lspci:
   00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Express Chipset Family Graphics Controller (rev 04)
</pre>
<p>
00:02.0 indicates that pciBusID should be PCI:0:2:0
</p>




<h2>3.3 Running fbdev/DRI Programs</h2>

<p>
Make sure your LD_LIBRARY_PATH environment variable is set to the
location of the libGL.so library.  You may need to append other paths
to LD_LIBRARY_PATH if libpciaccess.so is in a non-standard location,
for example.
</p>

<p>
Change to the <code>Mesa/progs/miniglx/</code> directory and
start the sample_server program in the background:
</p>
<pre>   ./sample_server &amp;
</pre>

<p>
Then try running the <code>miniglxtest</code> program:
</p>
<pre>   ./miniglxtest
</pre>
<p>
You should see a rotating quadrilateral which changes color as it rotates.
It will exit automatically after a bit.
</p>

<p>
If you run other tests in the miniglx/ directory, you may want to run
them from a remote shell so that you can stop them with ctrl-C.
</p>
<br>


<h1>4.0 Troubleshooting</h1>

<ol>
<li>
If you try to run miniglxtest and get the following:
<br>
<pre>   [miniglx] failed to probe chipset
   connect: Connection refused
   server connection lost
</pre>
It means that the sample_server process is not running.
<br>
<br>
</li>
</ol>


<h1>5.0 Programming Information</h1>

<p>
OpenGL/Mesa is interfaced to fbdev via the MiniGLX interface.
MiniGLX is a subset of Xlib and GLX API functions which provides just
enough functionality to setup OpenGL rendering and respond to simple
input events.
</p>

<p>
Since MiniGLX is a subset of the usual Xlib and GLX APIs, programs written
to the MiniGLX API can also be run on full Xlib/GLX implementations.
This allows some degree of flexibility for software development and testing.
</p>

<p>
However, the MiniGLX API is not binary-compatible with full Xlib/GLX.
Some of the structures are different and some macros/functions work
differently.
See the GL/miniglx.h header file for details.
</p>



</body>
</html>
