390 lines
18 KiB
Plaintext
390 lines
18 KiB
Plaintext
i810 with XFree86 4.x HOWTO
|
||
|
||
Toby Russell
|
||
|
||
May 2001
|
||
Revision History
|
||
Revision 1.1 2001-05-09 Revised by: tr
|
||
Revision 1.0 2001-05-01 Revised by: tr
|
||
Initial release.
|
||
|
||
|
||
This HOWTO describes getting XFree86 4.x running on Intel's i810 graphics
|
||
chipset by using special features of the 2.2.18 and 2.4.x kernels.
|
||
|
||
-----------------------------------------------------------------------------
|
||
Table of Contents
|
||
1. Introduction
|
||
2. Down to business
|
||
2.1. Getting and installing X4.x
|
||
2.2. Get and compile kernel 2.2.18 or 2.4.x (including mknod agpgart
|
||
stuff)
|
||
2.3. Nimbly tweak XF86Config
|
||
|
||
|
||
3. Thank you
|
||
|
||
1. Introduction
|
||
|
||
This document has a very specific purpose; to help people who are failing to
|
||
get X working on Intel's i810 graphics chipset (hereafter "the i810"). It is
|
||
written by a beginner (me), and it is imagined that it will be of use
|
||
primarily to other beginners. The author would be flattered to hear that he
|
||
has helped anyone more skilled than he. Furthermore, I know that the i810
|
||
works with XFree86 3.3.6, but I personally have not trod that path. My
|
||
experience comes purely from XFree86 4.0 (hereafter "X4.x") and the i810/
|
||
agpgart support available in the 2.2.18 and 2.4.x kernels, and consequently
|
||
this HOWTO tackles that solution, or procedure, alone. The instructions that
|
||
follow were written to the 2.4.x compile tune, but the procedure is similar
|
||
enough to be translatable to the 2.2.18. Use your head, as Tony Buzan would
|
||
say, and read the READMEs to be sure of any required alterations of method.
|
||
|
||
Even though I know this procedure works I feel obliged to point out that what
|
||
I have recorded here is mostly that which I have worked out in my own
|
||
bumbling way. It may well be that others know a quicker and more efficient
|
||
method than that which follows. If so I will be happy to hear from them. As I
|
||
mentioned previously, the i810 will work with XFree86 3.3.6, if one also uses
|
||
some drivers designed by Intel for the task (namely XFCom_i810-1.2-3 and
|
||
I810Gtt-0.2-4) but, in the interests of Linux purity, and of course knowing
|
||
one does not have to use Intel's software, I recommend the method detailed
|
||
here. It does not need Intel drivers.
|
||
|
||
Finally, no introduction would be complete without the following words of
|
||
caution; this HOWTO should be regarded as a 'bare bones' set of instructions
|
||
and should therefore be followed with all relevant README literature to hand.
|
||
What follows is not exhaustive by any stretch of the imagination, and needs,
|
||
at least for beginners, said README stuff.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2. Down to business
|
||
|
||
Note: Do everything that follows logged on as root.
|
||
|
||
There are three distinct stages that need not be followed in the order listed
|
||
here (please feel free to use your imagination). Said stages are;
|
||
|
||
<EFBFBD><EFBFBD>*<2A>get and install X4.x
|
||
|
||
<EFBFBD><EFBFBD>*<2A>get and compile kernel 2.2.18 or 2.4.x (including mknod agpgart stuff)
|
||
|
||
<EFBFBD><EFBFBD>*<2A>nimbly tweak XF86Config
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
2.1. Getting and installing X4.x
|
||
|
||
The first stage is of course listed only as a guide for those who have
|
||
perhaps tried getting XFree86 3.3.6 working with the i810 and failed, or
|
||
perhaps those who have not even heard that X4.x supports the i810 and have
|
||
been struggling vainly with their XF86Config file. I suppose the majority of
|
||
people who find these instructions useful will have already loaded X4.x. You
|
||
lot can skip this bit. Anyway, if you do need to know, X4.x can be got from;
|
||
[ftp://ftp.xfree86.org/pub/XFree86/4.0/binaries] ftp://ftp.xfree86.org/pub/
|
||
XFree86/4.0/binaries
|
||
|
||
But before you rush ahead and download away you must first be sure which
|
||
version of X4.x suits your system. So download Xinstall.sh on its own and run
|
||
(from within the folder containing Xinstall.sh):
|
||
|
||
sh Xinstall.sh -check
|
||
|
||
The results will direct you to the correct folder within the above mentioned
|
||
URL from where the appropriate files for your system can be downloaded.
|
||
|
||
For a basic installation and to save time downloading one needs only the
|
||
following absolute necessities, without exception (the others are optional
|
||
and when included in the install process, I feel, increase the chances of
|
||
things going wrong for the unwary and inexperienced):
|
||
|
||
extract[.exe] Xdoc.tgz Xvar.tgz
|
||
Xbin.tgz Xfenc.tgz Xxserv.tgz
|
||
Xlib.tgz Xfnts.tgz Xmod.tgz
|
||
Xman.tgz Xetc.tgz <20>
|
||
|
||
Now knowing which set of files are suited to your system you can go ahead and
|
||
download whichever suits. Then install with the following command (from
|
||
within the folder containing freshly downloaded files):
|
||
|
||
sh Xinstall.sh
|
||
|
||
If you have been good everything will proceed smoothly. You will be asked
|
||
some questions which the README file can explain/answer better than I. If
|
||
something doesn't work as expected I refer you to the far more detailed,
|
||
aforementioned README file, which you should definitely peruse. As a newbie I
|
||
always read the readme files before downloading, installing, compiling and
|
||
even getting up from my seat to go to the toilette. You can never be too
|
||
sure.
|
||
|
||
That is the end of this stage.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.2. Get and compile kernel 2.2.18 or 2.4.x (including mknod agpgart stuff)
|
||
|
||
You can get either kernel from [ftp://ftp.kernel.com] ftp://ftp.kernel.com.
|
||
Of course, read everything called README while you are at it. (In the README
|
||
literature that comes with the 2.4.x kernel, there is an important note about
|
||
where to unpack the source. Make sure you read it.) Put the kernel source
|
||
file in /usr/src/kernels, and then run the following compile sequence, which
|
||
I learned from a linuxnewbie article (to which you should refer if my
|
||
directions are not clear enough for you, however it is specific to 2.2.x
|
||
kernels). It can be found at the following address; [http://
|
||
www.linuxnewbie.org/nfh/intel/compiling/kernel_update.html] http://
|
||
www.linuxnewbie.org/nfh/intel/compiling/kernel_update.html. Of course, the
|
||
location of the still-packed kernel is not really relevant, it only matters
|
||
that it is unpacked to an acceptable location. OK, now for the commands:
|
||
|
||
tar -xzvf /usr/src/kernels/linux-2.4.x.tar.gz
|
||
|
||
or if you downloaded the better compressed bz2 version
|
||
|
||
bzcat /usr/src/kernels/linux-2.4.x.tar.bz2 | tar xv
|
||
|
||
and watch the screen spew out pages of information about what's happening.
|
||
When it is finished it will have created a new linux folder.
|
||
|
||
OK, so, change to the new directory:
|
||
|
||
cd linux
|
||
|
||
and begin the compile process proper...
|
||
|
||
make config
|
||
|
||
Or preferably
|
||
|
||
make menuconfig
|
||
|
||
There's also make xconfig, but you haven't got X running, or you wouldn't be
|
||
reading this. So that won't work. And I'm embarrassed to mention it in such
|
||
an imperfect fashion but there is also something like make oldconfig but I
|
||
can't find any reference to it in my books. In any case I am not addressing
|
||
it here, though I am sure the procedure for it is very similar to that which
|
||
follows for make menuconfig, should you be awkward and want to use it.
|
||
|
||
Now, I have gone through three text based kernel compiles (make config) and
|
||
know how long winded they are. I reommend make menuconfig instead, which
|
||
requires only that ncurses be loaded (you don't need X) and you will be taken
|
||
through the pretty face of kernel recompilation. I loaded ncurses during a
|
||
custom install of Red Hat 6.1, but I forget exactly at which stage that
|
||
option is available. Otherwise ncurses is, I'm sure, on your distro's CD in
|
||
rpm format, so if issuing make menuconfig just produces errors, install
|
||
ncurses and try again.
|
||
|
||
The most relevant stages of the make process for solving our particular
|
||
problem are:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>to select EXPERIMENTAL early on (by hitting return while the very first
|
||
option is highlighted and then selecting the only suboption which is
|
||
consequently revealed),
|
||
|
||
<EFBFBD><EFBFBD>*<2A>towards the bottom of the base options, to enter "Character Devices" and
|
||
select (not as "M" but as "*") "/dev/agpgart (AGP) support" (only
|
||
available if the above instruction has been followed), and
|
||
|
||
<EFBFBD><EFBFBD>*<2A>select the appropriate sub-option of "/dev/agpgart (AGP) support" (again
|
||
not as a module "M" but as a static part of the kernel "*"), namely the
|
||
"I810/I810 dc100I810e support" part.
|
||
|
||
|
||
Note: The above explanation assumes you have run make menuconfig and so a
|
||
little thinkology will be required to map it to a situation where make
|
||
has been issued instead. But only a little.
|
||
|
||
(It has been pointed out to me that loading these features as modules would
|
||
be more logical, since they are not required until startx is run. I have not
|
||
tried the 'loadable module way' yet and will ammend this section of the HOWTO
|
||
after I have tested it. I recommend the static mode here because I ran this
|
||
procedure on a test version of the 2.4.x kernel and it was suggested to me
|
||
that loading statically was a safer and stabler way to go. Now that 2.4.x is
|
||
officially out there, perhaps modules will be more sensible. I'll let you
|
||
know how it goes. (Thanks to Heron Ordonez for this.))
|
||
|
||
When all is over and you feel calm enough, do this;
|
||
|
||
make dep
|
||
make clean (not violently necessary but does no harm)
|
||
make bzImage (takes a while, this bit)
|
||
make modules
|
||
make modules_install
|
||
|
||
Now have a look at the /boot directory. You will probably see that System.map
|
||
is a symbolic link to System.map-[your_kernel_version] and vmlinuz is a
|
||
symbolic link to vmlinuz-[your_kernel_version]. This arrangement is true for
|
||
many distros, but not all. I think some store vmlinuz in /, while System.map
|
||
resides in /boot. Whatever the case is, use your brain and apply these
|
||
instructions accordingly. So, basically you need to remove the symbolic links
|
||
like so:
|
||
|
||
rm System.map
|
||
rm vmlinuz
|
||
|
||
Then new symbolic links need to be created to the
|
||
about-to-be-copied-over-while-simultaneously-being-renamed, recently created
|
||
files. It goes like this (assuming you have an i386 computer):
|
||
|
||
cp /usr/src/kernels/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.x
|
||
ln -s /boot/vmlinuz-2.4.x /boot/vmlinuz
|
||
cp /usr/src/kernels/linux/System.map /boot/System.map-2.4.x
|
||
ln -s /boot/System.map-2.4.x /boot/System.map
|
||
|
||
Tip: You don't need to use absolute pathnames if you are in /boot. But if
|
||
you are the excessively cautious type and do use absolute pathnames, you
|
||
just have longer names for your symbolic files. In fact the whole
|
||
symbolic link thing here is only necessary if you want to play it that
|
||
way. Essentially, minimalistically, you can have one kernel called
|
||
vmlinuz and name all the others by their version number (or just trash
|
||
them!), and swap all the names around when you want to boot another
|
||
kernel. Or give each kernel a unique name, and have one entry per kernel
|
||
in /etc/lilo.conf. It's up to you.
|
||
|
||
Now you need to edit /etc/lilo.conf. This is achieved thusly:
|
||
|
||
image=/boot/vmlinuz
|
||
label=[what-ever-you-want-that-is-relevant-easy-to-type-and-remember]
|
||
read-only
|
||
root=/dev/hda[n]
|
||
|
||
After editing lilo.conf you must do this:
|
||
|
||
/sbin/lilo
|
||
|
||
so that the crisp, shiny, new linux kernel be made known to lilo, otherwise
|
||
(I have experienced this) the new kernel will not be available for booting.
|
||
Which would be silly. So after all this take a deep breath and reboot, select
|
||
your new kernel and with fingers crossed, watch. It should work. If it does,
|
||
go and celebrate a little. But don't let it get to your head because you have
|
||
yet to mknod the agpgart module, a simple yet essential procedure done
|
||
thusly:
|
||
|
||
cd /dev
|
||
mknod agpgart c 10 175
|
||
|
||
which basically creates the very essential character device (X won't run
|
||
without it) driver which acts kinda like a 'go-between' for the i810 chipset
|
||
and the X server. (Thanks to Heron Ordonez for saving me some embarrassment
|
||
here.) Pretty scientic stuff. Sorry about that.
|
||
|
||
That was the end of this stage.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.3. Nimbly tweak XF86Config
|
||
|
||
I've done a lot of this and it get's mighty tedious when it fails 23 times in
|
||
a row I CAN TELL YOU, so pay attention and read very closely the man page
|
||
(run man XF86Config at the command prompt). First of all I recommend running
|
||
the in-no-way-user-friendly xf86config (observe case!) to genertate a base
|
||
XF86Config file as the other tools seem to produce XF86Config files which are
|
||
in my experience incompatible with X4.x. When you run through the questions
|
||
xf86config asks and you reach the card section, there will be nothing for you
|
||
to choose, so choose that very nothing. You'll be entering the right stuff
|
||
later, after the base file has been created. Then, after answering all the
|
||
questions as well as you can, save the file as /etc/X11/XF86Config.
|
||
|
||
So, finally, the all important addition is:
|
||
|
||
Section "Device"
|
||
Identifier "i810"
|
||
Driver "i810"
|
||
VideoRam "4096"
|
||
|
||
and it should be inserted in the Graphics Device Section. There should in any
|
||
case be an existing "Device" section which you could edit if you prefer. From
|
||
thereon you should, having defined the i810 for X, enter "i810" wherever you
|
||
see a "Device" field. I am including a couple of sections from my XF86Config
|
||
file as an example, and hopefully to make a little clearer what I mean:
|
||
|
||
Section "Device"
|
||
Identifier "i810"
|
||
Driver "i810"
|
||
VideoRam "4096"
|
||
|
||
Section "Screen"
|
||
Identifier "Screen 1"
|
||
Device "i810"
|
||
Monitor "Highscreen 17inch"
|
||
DefaultColorDepth 24
|
||
SubSection "Display"
|
||
Depth 8
|
||
Modes "1024x768"
|
||
EndSubSection
|
||
SubSection "Display"
|
||
Depth 15
|
||
Modes "1024x768"
|
||
EndSubSection
|
||
SubSection "Display"
|
||
Depth 16
|
||
Modes "1024x768"
|
||
EndSubSection
|
||
SubSection "Display"
|
||
Depth 24
|
||
Modes "1024x768"
|
||
EndSubSection
|
||
SubSection "Display"
|
||
Depth 32
|
||
Modes "1024x768"
|
||
EndSubSection
|
||
EndSection
|
||
|
||
+---------------------------------------------------------------------------+
|
||
| Warning |
|
||
+---------------------------------------------------------------------------+
|
||
|As you can see I have only given X the option of "1024x768", and have a |
|
||
|default colour depth of 24 bits, because I like it that way, and the i810 |
|
||
|can easily cope with that resolution and depth on my 17" monitor. How that |
|
||
|would work on a 21" I do not know. Experimentation will teach you. |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
I am going to be boring and say it again, but a more complete understanding
|
||
than I can give here of the mysteries of the XF86Config file can be achieved
|
||
by closely reading the man page (see above). This is really important if you
|
||
want to have a chance of solving any problems that are bound to come up now
|
||
and again, that have not been covered here.
|
||
|
||
That should do it. Now save XF86Config and run:
|
||
|
||
startx
|
||
|
||
It should work. It did for me. You will be happy. If not contact me at <
|
||
trussl@hotmail.com> and I will endeavour to help you.
|
||
|
||
|
||
Note: This is a kind of a p.s. to this section but may be helpful. I had
|
||
a wee problem when going through the XF86Config part of this HOWTO during
|
||
a test run. It stemmed from having read but not fully understood some
|
||
blurb about the i810 and X4.x not working at all resolutions with a
|
||
buffer extension (or something like that). Anyway, I made no notes about
|
||
this and cannot therefore remember exactly what I read. Because I
|
||
remember this vaguely I can only say the following with certainty; you
|
||
need the following stanza at the beginning of your XF86Config file:
|
||
|
||
# This loads the DBE extension module
|
||
Load "dbe" # Double buffer extension
|
||
# This loads the miscellaneous extensions module, and disables
|
||
# initialisation of the XFree86-DGA extension within that module.
|
||
SubSection "extmod"
|
||
Option "omit xfree86-dga" # don't initialise the DGA extension
|
||
EndSubSection
|
||
|
||
So if X reports errors about a "shape extender" or "shape extension", you
|
||
may well find that your XF86Config file is missing the above listed
|
||
stanza.
|
||
|
||
-----------------------------------------------------------------------------
|
||
3. Thank you
|
||
|
||
I must point out that I would not have known how to fix the i810 and X4.x
|
||
problem if it were not for the pioneering efforts of Val Henson who guided me
|
||
through the process and recommended the 2.4.x kernel in the first place. And
|
||
now that this is an ammended version, I would also like to thank Heron
|
||
Ordonez for pointing out a few problems which I have in part addressed, and
|
||
will fully address in due course. Curtis Stone pointed out to me that the
|
||
features I thought only available in the 2.4.x kernel were present in 2.2.18.
|
||
Thanks to him too. I am now also endebted to Cameron Kerr for pointing out
|
||
that the 2.4.x kernel must not be unpacked in /usr/src/linux. I had had no
|
||
success with the 2.4.x until this was pointed out to me, but would have been
|
||
OK had I read the accompanying README, ie followed my own instructions.
|
||
|
||
If this process carries on in this fashion the 'Thank you' will one day be
|
||
the largest section of this HOWTO. This is an open process and all comments
|
||
(politely phrased of course!) are welcome.
|