Installing LILO
Contents
Introduction
LILO needs to be installed or reinstalled any time any of the lilo.conf configuration options are changed or when a new kernel is to be used. See the Configuring LILO page for setting the options in lilo.conf. See below for installing a new kernel. Reference the sections below if lilo is to be installed on a running machine or from a Compact Flash card.
Installing a new Kernel
To install a new kernel onto an already running machine, use scopy to copy the new kernel to /boot. Then update the symbolic link, bzImage.
developer@ldc:~$ scp /path/to/bzImage-VERSION_NEW.bin root@TARGET_IP:/boot
developer@ldc:~$ ssh root@TARGET_IP
root@oe:/# cd /boot
root@oe:/# rm bzImage
root@oe:/# ln -s bzImage-VERSION_NEW.bin bzImage
Then review the lilo.conf and continue below with Installing Onto the Local Machine
To install a new kernel into an image on a mounted Compact Flash card, copy the kernel to the /boot directory of the mounted root filesystem. Then chroot and update the symbolic link. Follow the steps below Installing LILO Onto a Removable Drive
Installing Onto the Local Machine
Before LILO can be used to boot a system, it must be installed onto the boot device. It must also be reinstalled any time the kernel is changed.
The easiest way to install LILO onto the system's Master Boot Record, using the default configuration file (/etc/lilo.conf
), is run lilo on the target device:
root@oe:/# lilo
This method works well when the default configuration can be used. Many times, an alternate configuration will be used so that a breaking change to a known-good configuration file will not leave the system without a usable configuration file. If a configuration file in an alternate location needs to be used, it will have to be specified to lilo with the -C option:
root@oe:/# lilo -C /etc/alternate_lilo_configuration_file.conf
The -C
(capital C) switch tells lilo
to use the configuration file specified after the switch when installing itself.
Installing LILO Onto a Removable Drive
The method shown above is used on a running embedded system. Additional steps are required when the root filesystem is on a Compact Flash card inserted into a Linux PC. This method is usually necessary when there isn't already a bootable disk for the embedded machine.
-
Determine the device node of the Compact Flash card by using
dmesg
.developer@ldc:~/# dmesg | tail -n 15 ... [126468.154762] sd 6:0:0:0: [sdb] 7831152 512-byte logical blocks: (4.00 GB/3.73 GiB) [126468.182196] sdb: sdb1 [126468.688061] kjournald starting. Commit interval 5 seconds [126468.691223] EXT3-fs (sdb1): using internal journal [126468.691225] EXT3-fs (sdb1): recovery complete [126468.694526] EXT3-fs (sdb1): mounted filesystem with ordered data mode [173828.541718] sdb: detected capacity change from 4009549824 to 0 [179577.977554] sd 6:0:0:0: [sdb] 7831152 512-byte logical blocks: (4.00 GB/3.73 GiB) [179577.994839] sdb: sdb1 [179578.376157] kjournald starting. Commit interval 5 seconds [179578.381428] EXT3-fs (sdb1): using internal journal [179578.381433] EXT3-fs (sdb1): recovery complete [179578.384661] EXT3-fs (sdb1): mounted filesystem with ordered data mode
-
The device node
sdb
was created for the flash card with one partitionsdb1
(in this example). Also note thatsdb
reports a size of 4.00 GB which corresponds to the size of the card inserted.
-
-
Determine if the card was automatically mounted to the desktop's filesystem. Problems have been identified when running lilo on an automounted device. The best way to avoid problems later in the process is to unmount and manually remount the device.
developer@ldc:~$ mount | grep sdb1 /dev/sdb1 on /media/EMAC-OE type ext3 (rw,nosuid,nodev,uhelper=udisks)
-
If there is no output from this command, continue with step 3. Otherwise follow the next step to unmount the device.
developer@ldc:~/# umount /dev/sdb1
-
-
Now mount the card so that it's contents can be accessible to the desktop. First create a mount point (directory) if one does not exist, then issue the
mount
command.developer@ldc:~/# sudo su [sudo] password for user: root@ldc:~/# mkdir -p /mnt/cfcard root@ldc:~/# mount /dev/sdb1 /mnt/cfcard root@ldc:~/#
-
Bind mount the device nodes into the filesystem so that LILO will be able to communicate with the flash card:
root@ldc:~/# cd /mnt/cfcard root@ldc:/mnt/cfcard# mount --bind /dev dev/ root@ldc:/mnt/cfcard#
-
If a new kernel is to be installed, copy it not to the /boot directory on the CF card.
root@ldc:/mnt/cfcard# cp /path/to/bzImage-VERSION_NEW.bin /mnt/cfcard/boot/
-
chroot
into the filesystem on the Compact Flash card:root@ldc:/mnt/cfcard# chroot . bash-3.2#
-
Update the symbolic link to point to the new kernel if a new kernel is to be used.
bash-3.2# cd /boot bash-3.2# rm bzImage bash-3.2# ln -s bzImage-VERSION_NEW.bin bzImage
-
Inspect the configuration file that will be used when running lilo e.g. lilo.conf.boot. Make sure that the
root=/dev/xxx
anddisk=/dev/xxx
lines point to the correct device node that the Compact Flash card is mounted on (in this example,/dev/sdb
). If these lines point to the desktop hard drive, the system bootloader will be overwritten and cause the desktop to be unbootable See Configuring LILO for more information. -
Run
lilo
with the appropriate LILO configuration file.bash-3.2# lilo -C /etc/lilo.conf.boot Warning: '/proc/partitions' does not exist, disk scan bypassed Added emac-oe * One warning was issued. bash-3.2#
-
Note that the warning here is normal, because LILO is being installed inside a chroot which doesn't have a mounted
/proc
virtual filesystem.
-
-
Exit the chroot and unmount the device:
bash-3.2# exit root@ldc:/mnt/cfcard# cd .. root@ldc:/mnt# umount cfcard/dev/ root@ldc:/mnt# umount cfcard/
-
It is now safe to remove the flash card and put it into the embedded machine.