original in nl Philip de Groot
nl to en Nino R. Pereira
I expect to receive my PhD from the Universiteit van Nijmegen during this year. My thesis is on what we call chemometrics. I'm presently working on computer technology applied to biology, at the Academic Medical Center in Amsterdam, the Netherlands. In addition I maintain my own page for Linux newbies (in Dutch): it is one of the many initiatives by and for the linux community. I love working with Linux and I frequently report on my experiences.
You will presently find out that you too can get, configure, compile, and install your very own kernel.
The article is structured as follows. First it discusses where you can find the source code on the Internet, and how to install the source code, followed by the kernel's graphical configuration using the screen dumps. Once the kernel is configured it must be compiled, but even a newly compiled kernel is not yet ready for use. First, the new kernel must be installed with the boot manager 'lilo', and before using 'lilo' you must make the file '/etc/lilo.conf'. You can also copy the compiled kernel to a partition from where you can start Linux with a DOS/Windows program called 'loadlin'. In addition there are a slew of specific points that need to be addressed, such as PCMCIA-support as needed by laptops. PCMCIAs, small inserts that often handle networking tasks and look like fat credit cards, are supported by the kernel itself only since the 2.4.x series kernels. Older kernels can support PCMCIA through a separate compilation and installation. SuSE linux has another problem, namely support for sound through the ALSA drivers. These drivers are not part of the kernel and must be separately compiled and installed, because the original drivers usually no longer work. To make matters worse, going from one series kernel to another, say from the 2.2 series to the 2.4 series, may be accompanied by problems with certain kernel utilities, the so-called 'modutils'. These contain the code needed to load a kernel module: Figure 3 explains what a module is. Sometimes the new kernel does not know what to do with the old 'modutils', so that you must compile and install a more recent modutils version. Problems like these are rare but they do occur, and it is only fair to point them out in advance.
But, if you faithfully follow the procedures in this article there is almost nothing that can go wrong. The new kernel is added to 'lilo', or copied to the 'loadlin' partition. Therefore, in emergencies you can still restart the original kernel. Then, working under your original kernel you can try to solve the problem with the new kernel. Even when you might have difficulties with a new kernel's 'modutils' it is still possible to restart the old kernel and then fix the problem by e.g., compiling and installing them separately: all new versions of 'modutils' are downwards compatible with the older kernels, so that the new 'modutils' work fine with the old kernels.
The source code for the kernel that is on your machine right now is in the directory '/usr/src/linux/'.It is wise to keep this particular source code safe, for example by renaming the linux directory as follows:
cd /usr/src mv linux linux-2.2.19 (if the original source code is for 2.2.19).
cd /usr/src cp ~/linux-2.4.6.tar.bz2 ( assuming that the tarball was downloaded ) ( to your home-directory ('~') ) bzip2 -d linux-2.4.6.tar.bz2 (this may take a while ) tar -xvf linux-2.4.6.tar mv linux linux-2.4.6 ln -s /usr/src/linux-2.4.6 /usr/src/linux
cd /usr/src/linux make xconfig (see Figure 1)
Figure 1: | The graphical interface for defining your Linux kernel after the command 'make xconfig'. |
This is the main menu used to define the kernel. To do so you must click on the different options. Clicking 'Save and Exit' stores your choices on disk, and once this is done you can finally compile and install the kernel (as in Figure 40). But we are not there yet.
The examples can of course not discuss all the hardware that you might have. However, they should clarify how you handle your specific hardware, and how you can look in the kernel itself to find out if your hardware is supported.
Figure 2: | Selection of the 'code maturity level options'. |
Figure 3: Support for loadable modules.
(from now on the screen-dumps will be linked, you can open them
in a new window yourself to take a look)
Modules are snippets of kernel code, e.g., drivers, that are
compiled separately but ideally at the same time as the kernel
itself is compiled. Therefore, this code is not part of the
kernel, but it can be loaded and hence become available when
you need it. The general recommendation is to compile the
kernel code as a module whenever possible, because this results
in a small and stable kernel. One warning: never compile the
file system as a module, see Figure 32. If you make this
mistake and compiled the file system as a module, the resulting
kernel can not read its own file system. Then, the kernel can
not even load its own configuration files, something that is
obviously a prerequisite for correctly starting linux. You will
see that I use modules sparingly: I like my kernel to be able
to talk directly the all the hardware without having to load
modules, but this is only my own preference.
Figure 4: Selecting processor type and features.
Here you pick the type of processor that you have, and you
indicate whether the various options apply. In general the
'/dev/cpu' options are rather advanced and should not be
selected by most users. 'High Memory Support' becomes necessary
only if your computer has more than 1 gigabyte of RAM (not disk
space). Most computers have 64 to 512 megabytes of ram (and
from 8 to 60 Gb on the hard disk), so 'High Memory Support' is
usually deselected. You must turn on the option 'Math
Emulation' if you use linux on a 386 of 486SX system. These
older systems lack the math coprocessor that linux counts on,
so in this case you must select 'Math Emulation'. Virtually all
modern processors have a coprocessor built in, so you can
usually keep this option turned off. The option 'MTRR' allows
faster communication through a PCI or AGP bus. Since all modern
systems have their videocard on a PCI or AGP bus you should
usually select 'MTRR': in any case, it is always safe to turn
on this option even if your system does not use the PCI or AGP
bus for the video card. Symmetric multi-processing support
(SMP) applies only to motherboards with more than one main
processor, e.g., a motherboard with two Pentium II processors.
SMP ensures that the kernel loads both processors optimally.
The last option (APIC) usually applies to multiprocessor
systems too, and is normally turned off.
Figure 5:
General Kernel Options.
Here you specify certain general options to the kernel.
Everyone always selects 'Networking support' because you always
need it, e.g., for the Internet. Linux is heavily
Internet-oriented and it can not run properly without
networking. In addition, network support is also needed for all
kinds of other actions that do not seem to have much to do with
networking. It is even possible that the kernel does not
compile without network support. In short: include network
support. All modern systems use the PCI bus, so you select
these options too. The grayed-out text 'PCMCIA/CardBus support'
shows that this option is not available, because you have
earlier indicated that you do not want to use experimental code
(see Figure 2.). If you use a laptop you need PCMCIA/CardBus
support in the kernel to allow the use of a network or a modem
(see also under the heading 'pcmcia support (laptops)' later
on). 'System V IPC' allows programs to communicate and to
synchronize, 'BSD process accounting' keeps e. g., the error
code when processes end, and 'Sysctl support' allows programs
to modify certain kernel options without recompiling the kernel
or restarting the system. These options are usually left on.
Modern linux distributions have their 'kernel core
(/proc/kcore/) format' selected as 'ELF': this is the standard
format of various system libraries, i.e., code snippets that
are available to the system and used by programs. 'ELF' is the
successor to the obsolete 'a.out' format, and similar to
windows .dll files. All modern linux programs use the ELF
libraries, but unfortunately some older programs also demand
support of the 'a.out' format. One example is 'Word Perfect 8
for X Windows: this native X Window System/Linux application is only
available in the the 'a.out' format, so that 'xwp' simply does
not run without support of the 'a.out' format. Include 'a.out'
as a module if you might want to use 'xwp'. I also carry 'MISC'
as a module. In principle I do not use it, but it comes in
handy to have the code available if you are a frequent user of
java, python, or the DOS emulator DOSEMU. I have selected
'Power Management support' and 'Advanced Power Management BIOS
support' (not shown in Figure 5). These two options are the
minimum needed with modern ATX motherboards to allow the kernel
to turn off the computer automatically when closing linux. The
other power management functions are turned off because they do
not normally work under XFree 86 (which is my standard when
using linux). KDE and Gnome have their own standard power
management functions that you can select.
Figure 6: Configuring Memory Technology Devices.
You need this option to make linux read for example flash
cards. Flash cards are frequently used in digital cameras. With
this option linux can read flash cards (from the necessary
hardware) and copy the photos as .jpg files to disk. Unless you
know you need it I would deselect this option: if you find you
need it you can always add it later on
Figure
7: Configuring the parallel port.
Before USB technology existed the parallel port was commonly
used to connect the computer to printers and scanners. My
printer hangs off a parallel port, so I want the port to be
available under linux. Note that configuring the parallel port
is not the same as configuring printing: this is done later on,
at Figure 28.
Figure 8: Configuring Plug & Play.
Almost everyone has a 'Plug & Play' system and therefore
wants this option supported. Turning this on allows the kernel
to configure the 'Plug & Play' devices and to make them
available to the system. Sometimes it is necessary to turn on
the option 'Plug & Play OS' in the BIOS, because otherwise
linux (and also Windows) can not configure the 'Plug &
Play' devices. The option 'ISA Plug & Play support' refers
to ISA cards that are 'Plug & Play' but use the ISA bus.
One example is the AWE64 sound blaster. The ISA bus never had a
'Plug & Play' standard, which makes it difficult to
configure these cards. Earlier, before kernel 2.4.x, linux
users had to call the program 'isapnp' (package isapnptools, rpm -qil isapnptools to see all files) during the boot process.
'isapnp' read the file '/etc/isapnp.conf'. This file contained
all the ports, addresses and interrupts used by the various
cards. If the information in '/etc/isapnp.conf was not correct,
or if 'isapnp' was not called, the card was not accessible to
linux and the modem, network card or sound card did not work.
Selecting the option 'ISA Plug & Play support' supersedes
the old procedure: the file '/etc/isapnp.conf' is no longer
used. Instead, the configurations are detected automatically.
Under SuSE 7.1 I had to rename the file '/etc/isapnp.conf' to
e.g., '/etc/isapnp.conf.old' after compiling 2.4.x, because
both the kernel as 'isapnp' claimed the same resources, with
disastrous consequences. The problem is that SuSE 7.1 (and
older versions) automatically activates 'isapnp' during boot,
even though the kernel already contains the necessary support.
This is however only relevant for older Linux systems, newer ones
don't use isapnp by default.
Figure 9:
Configuring block devices.
Virtually everyone will want to use a floppy disk, so the top
option is turned on (or, in my case, selected as a module). On
a request to access the floppy the kernel automatically loads
the necessary module, provided that the file
'/etc/modules.conf' or '/etc/conf.modules' is properly
configured in your distribution as is normally the case. As
user you should have no problems with this if you have selected
the correct options in Figure 3. To access the floppy the
kernel must of course be able to read the floppy's file system.
Therefore you must also copy Figure 32 correctly. The other
options can be important if you use IDE storage media through
your parallel port, but they are normally turned off. One
possible exception is 'loopback device support'. Before burning
CDs under linux you usually make an image of the CD, and the
'loopback device' is needed to look at the image's content.
I've selected this option (5'th line from below) as a module
(not shown in Figure 9).
Figure
10: Configuring multiple devices.
Small users of linux normally do not need raid or LVM support.
'Raid' implies that the system uses two or more hard disks to
store the information in parallel. If one disk crashes the
other keeps on going, and the system continues to work. LVM
makes it possible to add a hard disk in such a way that an
existing partition seems to get larger. In practice this means
that you do not have to repartition or to copy a smaller
partition to a larger one. Path names remain the same too. This
possibility is really handy, but it is not usually needed for
most small users.
Figure
11: Configuring networking options.
You need the 'Packet Socket' option to communicate with network
elements without implementing a network protocol in the kernel.
Here I can be brief: always select this one. Most of the other
options are off, unless you need their specific support. For
example, I have selected 'Network packet filtering (replaces
ipchains)' because I use SuSE's standard firewall. A firewall
protects your computer against attacks from the outside, e.g.,
through the Internet, at least when you have configured the
firewall properly. Firewall protection at kernel level is
obviously very advantageous. Further choices in configuring
'network packet filtering' are explained in Figure 12. You need
'Unix domain sockets' to make network connections, but also
elsewhere: The X Window System automatically uses Unix sockets, so that
you can not use X without this option. Always turn this
one on. 'TCP/IP networking' contains the protocols needed for
the Internet, and also for internal networks. Normally you want
to activate TCP/IP support. In case of doubt about selecting a
particular option, try the help texts. If you still don't know
it is always possible to include the support, and then remove
it later on during testing. Compiling certain options as
modules is also a good possibility.
Figure 12: Configuring the IP netfilter
(firewall).
For proper operation of its firewall SuSE Linux demands
backwards support for ipchains. Hence, for SuSE I select this
option. If you use a firewall in other distributions or
installations, consult their manual.
Figure
13: Configuring telephony support.
This is only needed if you have a telephone card in your
computer, e.g., to make phone calls over the Internet. Most
small users do not have this card, and do not need the
option.
Figure 14: Configuring ATA, IDE, MFM en RLL support
(communication protocols for hard disks).
Almost everyone needs these protocols, with as sole exception
those few with systems that have only SCSI disks but no other
disk types. Therefore, most users select this option. Clicking
on the line right under it gives a sub-menu with another set of
options. These are discussed below. Because of their importance
there are not one but three screen shots. Fill these out very
carefully: they are extremely important.
Figure 15: Configuring ATA, IDE, MFM en RLL support:
screenshot 1.
The top option is needed by everyone who addresses a piece of
hardware through an IDE/ATAPI interface. These include hard
disks, but also tape drives, ZIP disks, and CD readers and
burners. Basically, all modern computers use an IDE/ATAPI
interface, hence this option is on. The option 'include
IDE/ATA-2 DISK support' is needed to support the system's hard
disks. Hence, this option must be turned on too, except if you
have only a SCSI system.
Figure 16: Configuring ATA, IDE, MFM en RLL support:
screenshot 2.
The option 'include IDE/ATAPI CDROM support' is usually
selected if you have an ATAPI CDROM drive. However, ATAPI CD
burners must be accessed through SCSI emulation. The
SCSI-emulation can be used to access both the CD player and
CD burner. However, you can run into problems if you mount your
CDs througt the SCSI-emulation, such as error messages when
mounting the CD, or when starting the CD player to listen to
audio CDs. The best solution is to turn on both 'include
IDE/ATAPI CDROM support' and 'SCSI emulation support' as shown
in Figure 16. The device that needs SCSI emulation, usually the
CD burner, can be defined in '/etc/lilo.conf' by adding the
line 'append="hdd=ide-scsi":' this is discussed further below
under the heading 'Lilo configuration.' Since I have an
internal ZIP drive that communicates with the motherboard
through an ATAPI interface, I have selected the option 'include
IDE/ATAPI FLOPPY support.' You need the same option to access
other floppy-like drives, such as an LS120 drive. Most
motherboards use 'PCI IDE' to access hard disks, CDROMs and
floppies, hence this option is usually turned on. Likewise the
two possibilities to enable DMA. DMA gives your hardware direct
access to the computer's internal memory, without the
intervention of the processor. As a result the IDE disks
can be accessed faster. This you want. The option 'sharing PCI
IDE interrupts support' is off because usually you should not
need it. True, some IDE controllers allow sharing of interrupts
with another computer device, for example an exotic network
card. Unfortunately, sharing IDE interrupts decreases the
performance of the shared disks, so normally you want to share
interrupts only when this is the only way to solve certain
serious hardware problems.
Figure 17: Configuring ATA, IDE, MFM en RLL support:
screenshot 3.
My motherboard has a Pentium II and an Intel chipset, so of
course I want to use the specific support for this particular
chipset. When you fill in your own kernel options you will see
other chipsets that are not shown in Figure 17.
Figure 18:
Configuring SCSI support.
If you have a SCSI card you must of course select the options
that you need. The screenshot only shows the options needed for
your ATAPI CD burner if you have selected 'SCSI emulation
support' (Figure 16).
Figure
19: Configuring I2O device support.
You must select this option if you have an I2O interface in
your computer. Most people have not, and in this case you
simply switch it off.
Figure
20: Configuring network device support.
I have never been able to compile a kernel without network
device support. You should therefore always select this option.
You should also select the dummy driver, either as part of the
kernel or as a module. Linux demands such a dummy driver even
when the actual, physical network is absent, as is the case
with many home users. Even when there is a network linux uses
the dummy driver frequently. In this menu you can select your
type network and network card, as shown by the example in
Figure 21. Note that you need to do more if you want to access
the Internet through a modem: you must turn on ppp support by
choosing either 'PPP support for async serial ports' (for COM
ports) or 'PPP support for sync tty ports' (for fast
connections through e.g., a SyncLink adapter). If you forget to
do this the kernel will tell you that the ppp module does not
exist, even though you have made it, an error message that does
not help in finding the real problem. You can choose both
compression methods without problems: if the kernel needs them
they are used, otherwise not.
Figure 21: Configuring the ethernet device.
My ethernet card is a 3COM /100 MBit card that uses the
3c509/3c529 chipset. Since I do not have a physical connection
with a network (I have a network card, but I'm connected to the
network through a modem) I compile this driver as a module,
just is case I might need the card in the future. You will of
course select the type network and network card in your
machine. In addition, you must configure the network connection
with a linux configuration program, such as 'yast2' under
SuSE.
Figure
22: Configuring amateur radio support.
You select this option if you want to use amateur radio
support, and you turn on the necessary driver. Most people do
not use this option.
Figure
23: Configuring support for infrared (wireless)
communication.
You turn on the infrared communication option if you have a
wireless device, e.g., a wireless mouse or a wireless keyboard.
Most desktop systems do not have this and do not need the
option.
Figure
24: Configuring ISDN support.
Here you select support for an ISDN-card that you might have
in your system. It is important to know which card you have,
including the chipset: you need this information to pick the
right driver.
Figure
25: Configuring old CDROM drivers.
In older 486 and even 386 systems the CDROM is not connected
through the hard disk IDE (ATAPI) controller, but through a
sound card or a special card. Using these old CDs demands
selecting the corresponding driver. This option is superseded
in modern systems, and hence superfluous.
Figure
26: Configuring input core support.
This refers to one of the most important additions to the 2.4.x
kernels: USB support. Input core support is a layer in between
the kernel and some USB devices. Figure 38 shows the various
USB devices you can select, and the help text for some of these
indicates which ones need 'input core support': see Figure 38.
You must turn on 'input core support' here if one of your USB
devices needs it. All modern motherboards have a USB
connection, so as a rule you should turn it on. But, to be
honest, I know I will not need USB support in my system so I
have turned it off.
Figure
27: Configuring character devices: screenshot 1.
The upper option ('virtual terminal') enables the possibility
of opening an xterm (using X11) or to use the text mode
for login. Normally this option is always turned on. The second
option ('support for console on virtual terminal') tells the
kernel where it should send messages, such as warnings about
lacking or incorrectly working modules, problems with the
kernel itself, and startup messages. Under X Window System you often
set apart a special window for the kernel messages, but in text
mode they typically go to the first virtual terminal
('CTRL+ALT+F1'). Leave this option on. You can also choose to send
these messages to the serial port, e.g., to a printer or to
another terminal (the fourth option). To send the messages to
the printer you must also activate the port through the third
option. Likewise, you must activate this port if you want to
use it for a 'serial mouse'. Again, usually the third option
('standard/generic (8250/16550 and compatible UARTs) serial
support') is on. In my own system I have chosen to compile this
as a module. The reason is that during startup SuSE complains
about the lack of the 'serial support' module, and including
the support as a module is an elegant way to avoid the message
by ensuring that the module does exist. Configuring the
'character devices' is extremely important. If you fail to do
this properly you can end up with a non-working system. Hence
that Figures 28 to 30 discuss a few more options.
Figure
28: Configuring the 'character devices': screenshot
2.
If you want to use an xterm on your own machine from a remote
site, for example through 'telnet' of 'ssh', you must turn on
the option 'unix98 PTY support'. It might seem that a
standalone desktop system would not need this option, but a
number of processes in the background also use this option.
Therefore, it is a good idea to activate this option in any
case, if only to avoid error messages (at least from SuSE)
during startup. Everyone who connects a printer through a
parallel port needs of course 'Parallel printer support'.
Still, not everyone needs the parallel port: modern USB
printers do not.
Kernel messages can go
through the parallel printer by turning on 'Support for console
on line printer': usually, you do not want this. You need the
option 'support for user-space parallel port device drivers' if
you have certain pieces of equipment hanging off the parallel
port, but normally you do not. Likewise, usually you do not
need 'I2C support': it is needed for certain cards that handle
video, but if you find out you need it you can always add it to
the kernel later on, once you know the kernel works fine. You
select support for mouse and joy stick when you use them, but
not all mice use this driver (see further below, at Figure 29).
Present-day CD burners have made the tape drives that need
'QIC-02 Tape support' largely obsolete, hence this option is
usually off.
Figure
29: Configuring the 'character devices': Mice.
You do not need anything from this option if you have a serial
mouse, but for all other mouse types you must configure certain
parameters here. If you use an ORIGINAL bus mouse you must
select the upper option, with below it the corresponding type
or make of the bus mouse. Many computers nowadays have another
type of mouse, usually (and erroneously) called 'busmouse' or
'PS/2 mouse'. These mice are often connected to '/dev/aux' and
plugged in through a small connector similar to those used for
keyboards. Often this type of mouse uses the keyboard to
connect to the computer. To make these mice work properly you
must select the options shown in Figure 29, 'mouse support (not
serial and bus mice)' and 'PS/2 mouse (aka "auxiliary device"
support)'.
Figure
30: Configuring the 'character devices': screenshot
3.
The options for configuring the kernel in between those of
Figure 28 and Figure 30 are not discussed here. They are
normally off. The option 'Ftape, the floppy tape device driver'
refers to support for tape drives c9nnected through the floppy
controller. Even if you have such a tape drive it is not
essential to compile support for it, at least not in the first
go-around. The other options refer to modern 3D video cards. If
you have a video card that is connected through an AGP-bus, you
could turn on AGP support, and also the specific driver for
your video card (under '/dev/agpgart (AGP support)'). Note that
it is possible to have a correctly functioning kernel without
these options, but no necessarily! People who have an integrated
videocard on their motherport, such as in the intel i815 chipset,
MUST use the kernel driver! If not, XFree86 version 4 or higher (used
with most recent distributions) won't work. My system does have
an AGP card, an NVidia TNT2, but
this card is not supported by a specific kernel module (NVidia
refuses to share hardware specifications, necessary to develop
these drivers).
Unfortunately, in my case it makes therefore little sense to
turn on AGP support. Despite this particular problem, I can use
XFree86 version 4 without
the kernel-driver. 'Direct rendering support' is for an
option in XFree86 starting with version 4 to accelerate
graphics performance through the kernel. To make use of this
option your specific video card must be supported, and you
must use XFree86 4.0 or higher. In addition you must also
activate 'AGP support'. Still, you can safely deselect these
options and come out with a correctly functioning linux
kernel.
Figure
31: Configuring the 'multimedia devices.
This option is turned on if you have a card that handles video
or radio. As before, this option is not essential for the
kernel's proper functioning.
Figure
32: Configuring the 'file systems': screenshot 1.
Here you specify the file systems to be read by the linux
kernel. You may want to make a kernel that can read Windows
disks or Windows floppies, but you must make sure that the
kernel can read linux' own ext2 file system, or the newer
ReiserFS file system. Linux can not even start if you fail to
do this, because then the kernel can not read from its own boot
disk (as discussed earlier around Figure 3). To read
DOS/Windows floppies and disks you need to turn on the option
'DOS FAT support': however, to read Windows NT/Windows 2000
disks you need a separate read-only driver that can be selected
in this menu later on. To read and also to write DOS/Windows
disks and
diskettes you need the option 'MSDOS fs support'. Virtually
everyone wants this, so most people turn these options on.
'VFAT' refers to support for the use of long file names under
Windows 95 of 98. My own system is a so-called dual boot
system, in which I can start both Windows 98 and linux (using
the linux boot manager lilo, see under 'Configuring lilo').
Therefore I have activated 'VFAT'. You need to include support
for ISO 9660 to read CDs in the standard format. Below this is
the 'Joliet extensions' option, which allows longer file names
than the MS-DOS 8.3 that is the limit in the ISO 9660 standard.
Almost everyone wants to read present-day CDs, so these options
are normally on. Figure 33 clarifies some additional options,
among which is Linux' ext2 file system.
Figure
33: Configuring the file systems: screenshot 2.
The files in the '/proc' directory contain information about
the status of the system, e.g., which interrupts are in use.
Normally you always turn this option on. The 'Second extended
fs support' refers to linux' (still) standard file system. You
absolutely MUST compile this in (NOT as module)! Figures 32 and
33 do not show the 'ReiserFS' option that can be selected here
too: ext2's anoited successor, ReiserFS is better able to deal
with damage to the file system due to power failures and
similar problems. At this moment ReiserFS is still under
development and therefore marked as experimental code. Even so
most recent distributions support the use of ReiserFS already,
but even though ReiserFS is supposed to replace 'ext2' in the
future I would not recommend it as file system for all partitions
at this time. You need
'UDF file system support' if you use (under Windows) the
program 'packetCD', which allows you to copy CD files on the
fly as from a slow hard disk. It is very handy to exchange data
with other PCs. Reading these packet CDs also under linux is
possible by mounting them with the 'udf' file system, e.g.,
with a command like 'mount -t udf /dev/scd0 /cdrom'. This part
also contains items like 'Network file systems', 'partition
types' and 'Native language support'. You do not have to deal
with 'Network File Systems' unless your computer is part of a
large network, in which case you need to activate 'NFS File
System Support' and perhaps also 'SMB file support', but for a
standalone computer you do not need these options. The option
'Partition Types' is quite advanced but not necessary for
effective use of the linux kernel. It is best to turn this one
off. Figures 34 and 35 further explain 'Native Language
Support'.
Figure 34: Configuring 'native language support': screenshot
1.
In this menu you pick which code table is to be used by linux
to deal with file names under DOS and Windows. Figure 34's code
tables are for the usual DOS file names. The NLS tables in
Figure 35 are needed to use the longer file names. The top
option in Figure 34, 'Default NLS option', determines which
symbols will be standard in linux. Figure 35 depicts and
explains the option 'iso8859-15'.
Figure 35: Configuring 'native language support': screenshot
2.
You need the option 'NLS ISO 8859-15' to reproduce Windows' FAT
and the Joliet extensions to the CD file systems correctly,
something that is always a good idea. The selection 'NLS ISO
8859-15' is appropriate for the Western languages, and it
includes the Euro symbol. Therefore this code table is almost
always compiled in. The table 'NLS ISO 8859-1' is the previous
table for the Western languages but without the Euro
symbol.
Figure
36: Configuring the console drivers.
The 'VGA text console' is to enable text mode with VGA
resolution. Almost everyone wants this, so this option is
almost always on. Only a few of the older 386 computers lack a
VGA-compatible card, while most modern computers have not the
slightest problem with this choice. The second option, 'video
mode selection support', makes it possible to select the
resolution in text mode during the boot process. This is
sometimes handy if you want to have more letters on a line, but
usually you leave this one off. The final two options are
experimental, and I advise you to deselect them.
Figure
37: Sound configuration.
In this section you configure sound. If your distribution uses
the ALSA sound drivers (like SuSE 6.3 and higher), it suffices
to select 'sound card support' as MODULE. The ALSA drivers are
compiled and linked later on (see further under the heading
'SuSE and the ALSA sound drivers'). If your distribution uses
the kernel's standard sound drivers you must now select the
right one for your sound card. Virtually all sound card brands
are named here, so in principle the selection of the right
driver is not a problem. If your sound card works well with
your distribution's standard kernel you can also use
configuration programs (such as SuSE's 'yast2') to find out
which drivers your specific sound card needs. It is reassuring
to know that sound is not critical: you lack sound if something
goes wrong here, but the kernel itself works fine.
Figure 38:
Configuring 'USB support'.
My motherboard has a USB port, but I do not use it. However, if
I were to turn off all USB support SuSE gives me an an error
message during boot. Of course SuSE supports the USB and
therefore tries to load the necessary module(s), hence my
selection of 'Support for USB' as a module. Even though this
error message is not important for me, I solve it in an elegant
way by compiling the driver needed for the USB ports on my
motherboard. To do this the minimum is setting the 'Preliminary
USB device filesystem' to 'y' and to load a specific USB
driver. Since my Pentium II motherboard is rather old I have
picked the 'UHCI (Intel PIIX4, VIA, ...)' driver as a module.
But, you must select the 'UHCI Alternate Driver (JE) support'
module if you have a recent motherboard with the Intel chip
set, while for e.g., Compaq computers you should choose 'OHCI
support' as a module. In principle you need only one of these
three modules, but in case of doubt you can select all three.
Your linux distribution has already found out which of those it
needs, and it automatically loads the correct one.
Simply enabling your motherboard's USB ports in not enough, you need to specify also the drivers (modules) of the USB equipment that is connected to your computer. The list that comes up under 'USB Device Class drivers' has the various choices. All this is rather straightforward and little can go wrong: still, in case of doubt read the help texts.
Figure
39: Configuring 'kernel hacking'.
This one is easy: do NOT select!. It is an option useful to
programmers who want to find the reason for a kernel crash or
to read the hard drive's cache: the option is completely
useless for the typical user.
Figure 40: | Save and Exit. |
make dep make clean (for older kernels) make bzImage make modules make modules_installFigure 40 already indicated the need for the 'make dep' command. Of course you execute these commands in linux' source directory, usually '/usr/src/linux'. Kernels in the 2.0.x series or older also need the command 'make clean', which removes earlier files before the compilation of a new kernel. The 'make clean' command prevented strange error messages that were difficult to track down, but were presumably caused by older object (.o) files that were not overwritten. The command 'make bzImage' compiles the new kernel, but does not yet install it. You can also compile the kernel with other 'make' commands, e.g., 'make bzlilo' or 'make zImage,' but these commands can give unexpected problems. Most kernels are too large to allow a properly executed 'make zImage': you get an error message during the compile, and you end up without a kernel. With the command 'make bzlilo' everything must be configured properly in files such as '/etc/lilo.conf,' but this is not always the case. Hence it is safer to avoid these latter commands. The command 'make modules' compiles the modules: they are installed with the command 'make modules_install'. This command puts the modules in the directory '/lib/modules/2.4.6/' if the present kernel version is 2.4.6: it changes when you compile another kernel version. This way the modules corresponding to a particular kernel end up automatically in a separate directory, thereby avoiding conflicts with obsolete modules and similar problems. During boot the linux kernel now knows in which directory it can find the right modules. But, the files in '/lib/modules/2.4.6/' are overwritten and older modules remain if you already compiled kernel 2.4.6 earlier and now recompile it. Then, older modules may hang around even though they are no longer needed in the newer kernel. Normally this is not a problem, but it is always a good idea to take the time to remove the older modules first before installing the new ones.
To avoid problems in installing the kernel you must also ensure that lilo's configuration '/etc/lilo.conf' is correct, and you must copy the kernel and the file 'System.map' into the correct location. After all this you must also execute the command 'lilo' too. An alternative is the use of 'loadlin', which allows booting a linux kernel under Dos/Windows. Both options are discussed below.
boot = /dev/hda vga = normal read-only menu-scheme = Wg:kw:Wg:Wg lba32 prompt timeout = 300 message = /boot/message other = /dev/hda1 label = win98 image = /boot/bzImage label = linux-2.4.6 root = /dev/hda3 append = "parport=0x378,7 hdd=ide-scsi" image = /boot/vmlinuz.suse label = suse root = /dev/hda3 append = "hdd=ide-scsi" initrd = /boot/initrd.suse
The detailed content of the file lilo.conf may well differ from the above on each system and between distributions. Therefore I will now walk you through this file. The top 8 lines are already in good shape and you need not change them, usually. The command 'boot' in the first line indicates the physical hard disk from which booting starts, that is, 'boot' points to the location of the 'master boot record'. In my case booting starts from /dev/hda, the first physical hard disk. The option 'vga' indicates that the boot uses a standard VGA text mode, with 80x25 characters. The option 'read-only' means that the booting process first mounts the linux partition read-only. During linux' boot the partitions are checked for errors: only afterwards are they re-mounted with both read and write permissions. The line 'menu-scheme' sets the colors of the 'lilo' boot menu in text mode. With 'lda32' it is possible to boot the operating system after the 1024'th cylinder, provided that this is supported in the BIOS. All moderns systems support 'lba32'. Problems with this you can solve through a BIOS upgrade, something that is almost a necessity with the large hard disks that are now available. The command 'prompt' forces 'lilo' to give a prompt that allows the user to choose the desired operation system. The option 'timeout' gives the number of milliseconds that 'lilo' waits for input after the prompt before starting the standard operating system. If 'lilo.conf' does not give a standard operating system, as in the example here, the boot process starts the first operating system encountered. In my case this is Windows98, so that people who do not know linux yet will end up in a Windows environment. The 'message' option shows a message while 'lilo' is executing. Under SuSE this is Tux, linux' cute penguin mascot, with (of course) the text 'SuSE Linux 7.1'. You can see this message by typing 'xv /boot/message' or 'gv /boot/message' (sometimes even 'gimp /boot/message') : 'xv' and 'gv' (ghostview) are shareware programs with which you can look at various kinds of picture formats. Please note that the file /boot/message does not exist on systems without a graphical login screen (e.g. older distributions), in this case the 'boot message' is just a text message. It is in principle possible to show your own preferred image during boot, but I have not yet tried out this possibility. All options to 'lilo' are of course documented in the 'man' pages, which you access by the commands 'man lilo' and 'man lilo.conf'.
The other options direct the boot of the various operating systems. At most you can boot up sixteen different operating systems or kernels. Normally this is ample. You pick the operating system with the line 'label='. The default for Windows98 (and also older Windows versions and DOS, but not Windows NT or Windows 2000) is to have them on the first, primary partition. Therefore these operating systems only need a line 'other' and a line 'label'. The second section, starting with 'image=/boot/bzImage', starts the new kernel with the label 'linux-2.4.6'. My linux root directory is '/dev/hda3'. The line 'append = "parport=0x378,7 hdd=ide-scsi"' tells the kernel the address and interrupt for the parallel port (port 0x378, interrupt 7) , and specifies that my CD burner 'hdd' must be addressed through SCSI-emulation. The names for the CDs depend on the system: in mine it is 'hdd', but in yours it can be another name. The use of an interrupt is mostly a question of personal preference. An interrupt speeds up printing, but you can leave out this command if you do not have an interrupt available for the parallel (printer) port. Linux' default is the slower so-called 'polling', which allows the kernel to use the parallel port without an interrupt. The last section, starting with 'image = /boot/vmlinuz.suse', contains lilo's configuration made during SuSE's configuration process: I have added the line append="hdd=ide-scsi" by hand. The file 'boot/vmlinuz.suse' is the standard kernel that comes with the distribution. Preferably, you should ALWAYS save this kernel for emergencies. The line 'initrd = /boot/initrd.suse' applies only to the standard installation kernel: it specifies the loading of a so-called 'ramdisk' image, a virtual disk that is loaded in memory (or random access memory, RAM). The 'ramdisk' contains the modules needed for the correct booting of linux: a distribution kernel must of course be able to access an enormous variety of hardware, something that is only feasible by using many modules.
Hopefully it is now clear where you must store the new linux kernel before executing lilo. In this example, the right commands are:
cp /usr/src/linux/arch/i386/boot/bzImage /boot cp /usr/src/linux/System.map /boot/System.map-2.4.6 liloUnder SuSE 7.3 you can also do the second copy like this:
cp /usr/src/linux/System.map /boot( the original System.map has already been renamed )
rpm -bb /usr/src/packages/SPECS/alsa.spec cd /usr/src/packages/BUILD/alsa/alsa-driver-<version number>/ ./configure make installThe first line installs the source code, including the drivers, in the directory '/usr/src/packages/BUILD/' directory. In addition the ALSA libraries and utilities are directly compiled as rpm-files. Unfortunately, the ALSA drivers are not compiled in by default. You must compile and install them separately by hand using the bottom two commands. De command './configure' finds the necessary configurations and files in your system and puts them in a configuration file. The command 'make install' compiles all ALSA drivers and installs them at the same time for use by the kernel in the directory '/lib/modules/2.4.6/misc/'. Now, when booting SuSE the desired sound driver is installed automatically. I admit that the procedure suggested here is somewhat cumbersome, but you must know exactly what you are doing to find the necessary drivers and to include sound support in a new kernel in a more direct way.
If you do not use SuSE, or if you want to use a more recent version of the ALSA drivers, you can download these drivers and the corresponding libraries and utilities from http://www.alsa-project.org. This site's start page gives the latest news on the ALSA project (e.g., February 2002's integration of the ALSA drivers in the official 2.5 series kernel source tree) and links to the various files to download. Below I will show how to compile the ALSA drivers: you can follow the analogous steps for the libraries and the utilities. Unpack the drivers in a convenient directory, e.g., '/usr/local/.' Move to this directory, in this case '/usr/local/alsa-driver-<version-number>/' and execute the above commands starting with './configure'. It is possible that you must perform some additional steps to get the drivers to work if your distribution does not use the ALSA drivers as a standard. Unfortunately, these problems are outside the scope of this already quite extensive paper, but you can get further help from the ALSA FAQ (Frequently Asked Questions) that you can download too.
cp /etc/rc.d/pcmcia /etc/rc.d/pcmcia.SuSE cp ~/pcmcia-cs-3.1.?.tar.gz /usr/src cd /usr/src tar -zxf ./pcmcia-cs-3.1.?.tar.gz make config make all make install cp /etc/rc.d/pcmcia.SuSE /etc/rc.d/pcmciaThe first and last lines solve a SuSE-specific problem. SuSE's pcmcia-initialization script '/etc/rc.d/pcmcia' is overwritten by the command 'make install', which cause the script to fail under SuSE. The problem is solved by copying the original script back after 'make install'. If you have mistakenly overwritten the original SuSE script you must re-install the pcmcia packet anew beginning with the part 'a1', copy the original script to another file, execute 'make install' again, and finally copy the original script back.
The new rpm file for pcmcia support you get under SuSE as
follows:
rpm -i /cdrom/suse/zq1/pcmcia-3.1.?.spm cd /usr/src/packages rpm -bb ./SPECS/pcmcia-3.1.?.spec cd /RPMS/i386/ rpm -i --force ./pcmcia-3.1.?.rpm SuSEconfigIn the first line I assume that you will install the pcmcia drivers by themselves from the sixth or seventh CD and that the CD-ROM reader is already mounted on /cdrom. The command 'rpm -i' installs the source code and the command 'rpm -bb' compiles the pcmcia rpm file. Then you install this particular rpm file as you do all rpm files. Note that you must use the option '--force' because otherwise the rpm program will tell you (correctly) that 'pcmcia' is already installed, and will therefore ignore the new file. As always you must execute the program SuSEconfig (note the CAPITALS and lower case letters) when you have installed rpm files by hand under SuSE, to activate the configuration changes. The latter is done automatically by SuSE's setup programs YaST or YaST2 after they have installed or modified new packets. Then, it is no longer necessary to do the activation by hand.
To be able to use pcmcia support properly you must leave on 'network support' during compilation, but you must turn off all other drivers for network cards. And, as has already been discussed with Figure 11, you must of course turn on 'TCP/IP support' too if you want to use the Internet.
insmod (which installs a module), rmmod (to remove a module, and) lsmod (showing all modules in use),among many others. With commands like 'man lsmod' you can find out how to work the various commands, something I will not get into here.
Compiling and installing 'modutils' is straightforward. Simply do:
cd /usr/src cp ~/modutils-2.4.6.tar.bz2 . ( assuming that the file sits in your ) ( home directory, '~' ) bzip2 -d modutils-2.4.6.tar.bz2 ( unzip: this may take a while ) tar -xvf modutils-2.4.6.tar cd modutils-2.4.6 ( go to the directory in which 'modutils' have ) ( just been unpacked ) ./configure (find system-specific configurations ) make ( compile 'modutils': since it is small the compilation can be ) ( surprisingly fast ) make install (install 'modutils' in the directory '/sbin/' )This is all you have to do to make 'modutils' ready for use. Note again that in this example 'modutils' happen to have the same version number as the kernel, but this is not always the case.
Another way to inspect the kernel's boot messages is with the command 'dmesg'. Simply executing this command calls up the messages that scrolled off the screen earlier. Piping them to a file, with 'dmesg > temp', allows you to read the error messages at your own pace (with 'more temp', or your favorite editor).
If you still get into trouble and know no way out, you could make use of the various linux-related mailing lists and web sites where you can ask questions. These exist in all different languages, not only English. A reasonably short time later you usually get a helpful answer that enables you to solve your problem. The best way to find these lists and web sites is with a search engine.