1. Configuring the Kernel
By
Buddhika Siddhisena
CoFounder & CTO
THINKCube Systems Pvt. Ltd
<bud at thinkcube.com>
Member of LKLUG & FOSS.LK
<bud at babytux.org>
2. Coverage
• What is the kernel
• Why customize?
• Obtaining the kernel source
• Quick compile HOWTO
• Configuring the kernel
• Loading/Unloading modules
2
3. What is the Kernel
• What is the Kernel?
• Linux is the Kernel
• Developed by Linus Torvalds in1991
• Modular kernel as opposed to a microkernel
• Ported to more than 20 architectures
• Over 6M lines of code
3
4. What is the Kernel
read()
Program GNU C Library
User space syscall(SYS_read)
Kernel space
Virtual File System (vfs)
Linux
Kernel Filesystem drivers
Block device drivers
4
5. Why customize?
• Most of the time you actually
dont!
• Optimize to the hardware
• Optimize for the situation
(desktop/server,low
memory,SMP,64bit, diskless)
• Add an unofficial driver or feature
• Upgrade the kernel to the latest
without waiting for your
distribution.
5
6. Obtaining the Linux Kernel source
• Patched Kernel source can be obtained for your distro
• e.g.: linuxsource2.6.16 on debian
• Vanilla kernels via kernel.org
• Specially patched kernels such Andrew Morton's mm patched
kernel and Alan Cox's ac
6
7. Quick kernel compile
• You need to install the kernel development packages
• e.g.: gcc, make, binutils, ncurses, qt
• Extract the kernel source in /usr/src
linux:# tar jxvf /tmp/linux2.6.16.8.tar.gz
• Optionally create a symlink
linux:# ln
s /usr/src/linux2.6.16.8 /usr/src/linux
• Quick configuration using an old configuration
linux:# cp /boot/config2.6.14 .config
linux:# make oldconfig
• Compiling the kernel
linux:# make && make install && make modules_install
7
9. Configuring the Kernel 101
But WHAT if you make a MESS and want
to CLEAN UP?
Just use Mr. Proper
# make mrproper
This will clear all precompiled
binaries as well as remove the .config
file
# make clean
Just clean all precompiled binaries
9
10. Configuring the Kernel 101
Module or Built-in (Static)?
Building drivers into the kernel makes
the kernel FAT – require more memory
and overall slower execution.
YET certain drivers are better of being
builtin (e.g: motherboard drivers)
Building drivers as modules results in
a thinner kernel that can load external
modules as an when needed.
BUT make sure your kernel has
access to essential drivers required to
boot, through an initrd or making
them builtin.
10
11. Configuring the Kernel 101
Know your Hardware
• To see whats plugged into your motherboard, or USB ports.
linux:# lspci v
linux:# lsusb
• To check your processor and memory
linux:# cat /proc/cpuinfo
linux:# cat /proc/meminfo
• To see your hard drive partitions.
linux:# fdisk l
• To see your kernel log
linux:# dmesg
11
12. Configuring the Kernel 101
Kernel config overview
• Code Maturity Level Options
You will find options to compile alpha quality or experimental drivers.
Generally fine for a desktop system, but use with care for a production
quality server.
• General Setup
Options to enable process accounting, optimize the kernel for size or
have .config support that allows you to see how the kernel was
configured (zcat /proc/config.gz).
• Loadable Module Support
Its generally a good idea to enable this. If you will need thirdparty
kernel modules you will also need to enable Set Version Information
on All Module Symbols.
12
13. Configuring the Kernel 101
Kernel config overview
• Processor Type and Features
Included in this submenu are features such as Processor type,
Preemptible Kernel which can improve desktop responsiveness,
Symmetric Multiprocessing Support for machines with multiple CPUs,
and High Memory Support for machines with more than 1G of RAM.
• Power Management Options
Found here are options for ACPI and CPU Frequency Scaling which can
dramatically improve laptop power usage
• Bus Options ( PCI, PCMCIA, EISA, MCA, ISA)
Here are found options for all system bus devices. On modern
machines the ISA and MCA support can often be disabled.
13
14. Configuring the Kernel 101
Kernel config overview
• Networking
Options to configure network protocols, firewalls, IR, Bluetooth etc.
• Device Drivers
Features such as SCSI support, graphic card optimizations, sound,
USB, network cards and other hardware are configured here.
• File Systems
Found here are options for filesystems which are supported by the
kernel, such as EXT3, ReiserFS, NTFS or VFAT. It is best to build
support for the root filesystems directly into the kernel rather than as a
module.
• Security Options
Interesting options here include support for NSA Security Enhanced
Linux and other, somewhat experimental, features to increase security.
14
15. Configuring the Kernel 101
Optimize for processor architecture
• You can optimize the kernel for your exact processor as shown
by /proc/cpuinfo
Processor family (Pentium4/Celeron(P4based)/Pentium4
M/Xeon) >
• You could also turn off Generic x86 support
< > Generic x86 support
Kernel Preemption
• Normally, “preemption” can happen only at the “user space”
• For a system to be responsive, kernel space preemption needs to be
turned on.
<*> Preemptible kernel
• Do not turn on kernel preemption in server systems
15
16. Configuring the Kernel 101
Enable High memory
• By default the kernel can access only about 890MB. If you have 1GB or
more memory you need to enable high memory.
<*> High Memory Support (4GB)
FS drivers
• You can add file system drivers via the File systems menu.
DOS/FAT/NT Filesystems >
<M> VFAT (Windows95) fs support
<M> NTFS file system support
• Generally you should make the root file system builtin
• If you want to mount network file systems such as NFS or CIFS you
can enable it here.
Network File Systems >
<M> SMB file system support (to mount Windows
shares etc.)
16
17. Configuring the Kernel 101
Magic Sys rq
• On a desktop system Turn on Magic SysRq key in kernel hacking
<*> Kernel debugging
<*> Magic SysRq key
• In the unlikely event of a system ?crash? (not responding), press Alt
+ PrtSc and other keys to reduce the damage:
Alt + PrtSc + S : flush buffers
Alt + PrtSc + U : remount disks read only
Alt + PrtSc + O : power off
Alt + PrtSc + B : reboot
17
18. Manually loading Linux device drivers
• To list modules that are currently loaded you can issue
#lsmod
• To list available modules (compiled) for the current kernel
#modprobe l
• To get a small description about a module ...
#modinfo radeon
• To load a kernel module driver manually
#modprobe radeon
• To load a kernel drive automatically as the machine boots consider
adding it to /etc/modules.conf (2.4) or /etc/modprobe.conf (2.6)
18