Copyright (C) 2000-2012 |
Whole document tree 2. Quick Steps - Kernel CompileThis section is written by Al Dev (alavoor[AT]yahoo.com) The latest version of this section is at http://www.milkywaygalaxy.freeservers.com and click on "Quick Steps to recompile linux kernel". Mirror sites are at - angelfire, geocities, virtualave, Fortunecity, Freewebsites, Tripod, 101xs, Freeservers, 50megs, Terrashare, Escalix, Httpcity. These sites have lots of linux goodies and tips. (The latest version of this document is at http://www.milkywaygalaxy.freeservers.com. You may want to check there for changes). Kernel re-compile is required in order to make the kernel very lean and which will result in FASTER operating system . It is also required to support any new devices. 2.1 Precautionary PreparationsBefore you build kernel, it is a good idea to do a backup of the system. If you had not backed up your system recently then do it now. See Backup-Recovery-HOWTO. Or if you feel that you can take risk of losing data, then skip this section and go to next section. 2.2 Building KernelNote: Below 'bash#' denotes the bash prompt, you should type the commands that appear after the 'bash#' prompt. Below are commands tested on Redhat Linux, but it should work for other distributions with very minor changes.
2.3 Troublshoot Common Mistakes
The System Hangs at LILOSympton: After you build the kernel and reboot, the system hangs just before LILO. Reason: Probably you did not set the BIOS to pick up the proper Primary Master IDE and Secondary Slave IDE hard disk partition. Solution: Power on the machine and press DEL key to do setup of the BIOS (Basic Input Output system). Select the IDE settings and set proper primary hard disk partition and slave drives. When the system boots it looks for the primary IDE hard disk and the Master Boot Record partition. It reads the MBR and starts loading the Linux Kernel from the hard disk partition. No init foundThe following mistake is commited very frequently by new users. If your new kernel does not boot and you get - Warning: unable to open an initial console Kernel panic: no init found. Try passing init= option to kernel The problem is that you did not set the "root=" parameter properly in the /etc/lilo.conf. In my case, I used root=/dev/hda1 which is having the root partition "/". You must properly point the root device in your lilo.conf, it can be like /dev/hdb2 or /dev/hda7. The kernel looks for the init command which is located in /sbin/init. And /sbin directory lives on the root partition. For details see - bash# man init The 'depmod' gives "Unresolved symbol error messages"When you run bash$ su - root bash# man depmod bash# depmod depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/linear.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/multipath.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/raid0.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/raid1.o depmod: *** Unresolved symbols in /lib/modules/version/kernel/drivers/md/raid5.o Reason: You did not make modules and install the modules after building
the new kernel with Solution: After you build the new kernel, you must do: bash$ su - root bash# cd /usr/src/linux bash# make modules bash# make modules_install Kernel Does Not Load Module - "Unresolved symbols" Error MessagesWhen you boot kernel and system tries to load any modules and you get "Unresolved symbol : __some_function_name" then it means that you did not clean compile the modules and kernel. It is mandatory that you should do make clean and make the modules. Do this - bash# cd /usr/src/linux bash# make dep bash# make clean bash# nohup make bzImage & bash# tail -f nohup.out (.... to monitor the progress) bash# make modules bash# make modules_install Kernel fails to load a moduleIf the kernel fails to load a module (say loadable module for network card or other devices), then you may want to try to build the driver for device right into the kernel. Sometimes loadable module will NOT work and the driver needs to be built right inside the kernel. For example - some network cards do not support loadable module feature - you MUST build the driver of the network card right into linux kernel. Hence, in 'make xconfig' you MUST not select loadable module for this device. Loadable modulesYou can install default loadable modules with - The step given below may not be required but is needed ONLY FOR EMERGENCIES where your /lib/modules files are damaged. If you already have the /lib/modules directory and in case you want replace them use the --force to replace the package and select appropriate cpu architecture. For new versions of linux redhat linux 6.0 and later, the kernel modules are included with kernel-2.2*.rpm. Install the loadable modules and the kernel with This will list the already installed package. bash# rpm -qa | grep -i kernel bash# rpm -U --force /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i686.rpm (or) bash# rpm -U --force /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i586.rpm (or) bash# rpm -U --force /mnt/cdrom/Redhat/RPMS/kernel-2.2.14-5.0.i386.rpm This is only for old versions of redhat linux 5.2 and before. Boot new kernel and install the loadable modules from RedHat Linux "contrib" cdrom bash# rpm -i /mnt/cdrom/contrib/kernel-modules*.rpm ....(For old linux systems which do not have insmod pre-installed)
2.4 Post Kernel BuildingAfter successfully building and booting the Linux kernel, you may be required to do these additional steps to make some of the devices to work with Linux. (The steps below were tested on Redhat Linux but should work with other distributions as well.) Video card/Monitor configuration:
bash$ su - root bash# man Xconfigurator bash# /usr/bin/X11/Xconfigurator --help bash# /usr/bin/X11/Xconfigurator bash# /usr/bin/X11/Xconfigurator --expert See also: bash# man xf86config bash# /usr/bin/X11/xf86config If your card is not detected automatically, then you can use the --expert option and select the "Unlisted card". If your monitor is not listed then select the generic monitor type SVGA 1024x768. Sound card configuration:
bash$ su - root bash# man sndconfig bash# /usr/sbin/sndconfig Then start X-window 'KDE desktop' with 'startx' command. Click on 'K Start->ControlCenter->SoundServer->General->Test Sound'. This should play the test sound. Then click on 'K Start->MultiMedia->SoundMixer->SoundVolumeSlider' and adjust the sound volume. Network card configuration:
Configure Firewall and IP Masquerading : For Linux kernel version 2.4 and above, the firewall and IP Masquerading is implemented by NetFilter package. Hence in kernel config you should enable Netfilter and run the Firewall/IPMasq script. Download the scripts from Firewall-IPMasq scripts , main page of Netfilter is at http://netfilter.samba.org. Related materials at firewalling-matures and Netfilter-FAQ. For kernel version below 2.4 you should install the firewall rpms from rpmfind.net or firewall.src.rpm. Configuration of other devices: Refer to HOWTO docs relating to your devices at http://www.linuxdoc.org 2.5 Sample lilo.confGiven below is a sample /etc/lilo.conf file. You should follow the naming conventions like ker2217 (for kernel 2.2.17), ker2214 (for kernel 2.2.14). You can have many kernel images on the same /boot system. On my machine I have something like: boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 default=firewall image=/boot/vmlinuz-2.2.14-5.0 label=ker2214 read-only root=/dev/hda9 image=/boot/vmlinuz-2.2.17-14 label=ker2217 read-only root=/dev/hda9 #image=/usr/src/linux/arch/i386/boot/bzImage # label=myker # root=/dev/hda7 # read-only image=/boot/bzImage.myker.11feb2001 label=myker11feb root=/dev/hda9 read-only image=/boot/bzImage.myker.01jan2001 label=myker01jan root=/dev/hda9 read-only image=/boot/bzImage.myker-firewall.16mar2001 label=firewall root=/dev/hda9 read-only Next Previous Contents |