Installing LILO

From wiki.emacinc.com
Revision as of 02:19, 16 December 2013 by Mdean (talk | contribs) (Migrated content here from previous page.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
TODO: {{#todo:Review(12.16.13-02:20->MD+)|Mike Dean|oe 4,oe 5,md,Review,mw}}

Installing LILO

LILO can be installed onto a disk for use by the local machine, or it can be installed onto a removable storage device for use in booting on a different machine. Both installation methods are discussed here. Usually, the former method will be used to update the existing bootloader for new kernels, new kernel configurations, or new boot time options. The latter method is generally used to initially set up a bootable storage device which will later be inserted into the embedded system for which it is being created.

Installing Onto the Local Machine

Before LILO can be used to boot a system, it must be installed on the boot device. It must also be reinstalled any time the configuration is changed, or the new configuration will not take effect. Fortunately, installing LILO is easy.

The easiest way to install LILO on the local system's Master Boot Record with the default configuration file (/etc/lilo.conf), is to type:

root@oe:/# lilo

Unfortunately, you may not want to install LILO this way. This method works well for systems where only a small change is required to the default configuration, but is often not what you want on an embedded system. Many times, you will want to use an alternate file to store your new configuration so that you don't make a breaking change to your known-good configuration file. If you prefer to use a configuration file in an alternate location, you will need to type:

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

Unfortunately, the last method shown above is still not what you need to do when your embedded machine's root drive is not in the running embedded system. If you have a Compact Flash disk, for instance, containing your Linux filesystem, and it is mounted on your desktop Linux development machine, you will need to jump through a few hoops to install the bootloader onto the Compact Flash card. This method is usually necessary when you don't yet have a bootable disk for your embedded machine.

Two sets of directions for doing this are given here. The first set of directions is generic, and will work for desktop Linux distributions which do not include an automounter or have an automounter which doesn't interfere with the process. The second set of details a known workaround. The following steps will need to be performed to install LILO onto a removable drive:

Installing from a System with No Automounter or a Non-Interfering Automounter

For simpler systems without an automounter, or with an automounter that doesn't try to protect the user from possible malicious code, follow these directions.

  1. Mount the drive.

    1. Insert the flash card into your card reader.

    2. Find out where the device node for the card was created (assuming you have udev on your system) by using dmesg.
      user@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
      
    3. Since the device node sdb1 was created for the flash card (in this example), we need to mount that device somewhere where we can access it. In this example, we'll use /mnt/cfcard:
      user@ldc:~/# sudo su
      [sudo] password for user:
      root@ldc:~/# mkdir -p /mnt/cfcard
      root@ldc:~/# mount /dev/sdb1 /mnt/cfcard
      root@ldc:~/#
      
  2. Bind mount the device nodes into the filesystem:
    root@ldc:~/# cd /mnt/cfcard
    root@ldc:/mnt/cfcard# mount --bind /dev dev/
    root@ldc:/mnt/cfcard#
    
  3. chroot into the filesystem:
    root@ldc:/mnt/cfcard# chroot .
    root@ldc:/#
    
  4. Run lilo with the appropriate LILO configuration file. Be sure to double check to ensure that the configuration file is correct, because a mistake here could render your desktop system unbootable.
    root@ldc:/# lilo -C /etc/lilo.conf.boot
    Warning: '/proc/partitions' does not exist, disk scan bypassed
    Added emac-oe *
    One warning was issued.
    root@ldc:/#
    
    Note that the warning here is normal, because you're installing LILO inside a chroot which doesn't have a mount /proc virtual filesystem.
  5. Exit the chroot and unmount the device:
    root@ldc:/# exit
    root@ldc:/mnt/cfcard# cd ..
    root@ldc:/mnt# umount cfcard
    
  6. It is now safe to remove the flash card and put it into your embedded machine.

Workaround for the Ubuntu Automounter (and Possibly Others)

On many Linux desktops, a memory card will be automounted when it is inserted. While this is a nice convenience feature for most users, it comes at the expense of developers. This automount feature can be a source of frustration for those who haven't already found a way around the issues it causes.

Fortunately, we at EMAC have already found a method which works reliably on our recommended Linux distribution, Ubuntu 12.04 LTS, and have documented it here. On other systems, such as Debian, a workaround may not be needed. If your system does not automount, see below.


  1. Insert the flash card into your card reader, and wait for the file browser window to appear. If a messagebox appears asking you to choose what to do, tell it to open a file browser for browsing the files on the card.

  2. Keep the file browser window open, and stash it away for later use.

  3. Open a terminal and create a /mnt/cfcard directory, if it does not exist:

    user@ubuntu:/# mkdir /mnt/cfcard
    
  4. Find out the device name of the card by looking for where the card was mounted. The file browser window will list the name of the card under Devices in the left pane. Often times, the name will be EMAC_OE. Look for this name in the output of the df command:
    user@ubuntu:/# df -hT | grep EMAC
    /dev/sdb1                       ext3      3.7G  223M  3.3G   7% /media/EMAC_OE
    
  5. From the output of this command, we can see that the /media/EMAC_OE mountpoint was mounted onto the /dev/sdb1 device. Therefore, this is the device in which we're interested.

  6. Mount the device on the directory from step i, without unmounting it first:
    user@ubuntu:/# mount /dev/sdb1 /mnt/cfcard
    user@ubuntu:/#
    
  7. Now, switch to the root user account (if you aren't already root) and bind mount the host system's /dev directory to the cfcard's /dev directory. This will provide the device node file that will be needed for LILO to be able to talk to the flash card. NOTE: If you use the method shown here to switch to the root user, use your user's password at the password prompt.
    user@ubuntu:/# sudo su
    [sudo] password for user: 
    root@ubuntu:/# cd /mnt/cfcard
    root@ubuntu:/mnt/cfcard#
    root@ubuntu:/mnt/cfcard# mount --bind /dev dev/
    root@ubuntu:/mnt/cfcard#
    
  8. Now, use the chroot command to make the directory where you mounted the card the effective root directory for your terminal session:
    root@ubuntu:/mnt/cfcard# chroot .
    root@ubuntu:/#
    
  9. Now that you're effectively running inside the filesystem on the flash card, you are able to run LILO to install the bootloader. First, be sure to double check to ensure that the configuration file you're using points to the correct device node (in this example, /dev/sdb1) so that you don't overwrite the bootloader on your desktop. If you overwrite the bootloader on your desktop, it will render your desktop system unbootable! So, make sure to double check first.

  10. When you are sure you're using the right device node, run LILO to install the bootloader:
    root@ubuntu:/# lilo -C /etc/lilo.conf.boot
    Warning: '/proc/partitions' does not exist, disk scan bypassed
    Added emac-oe *
    One warning was issued.
    root@ubuntu:/#
    
    The warning, in this case, is normal. It appears because you're in a fake "running system," which means the virtual files in the /proc/ filesystem aren't mounted and able to provide information; hence, the non-existence of the /proc/partitions file.
  11. Now, you need to umount the device:
    root@ubuntu:/# exit
    root@ubuntu:/mnt/cfcard# cd ..
    root@ubuntu:/mnt# umount cfcard
    root@ubuntu:/mnt# exit
    user@ubuntu:/#
    
  12. Retrieve the file browser you stashed away earlier, and unmount the automounted directory for the card by clicking on the eject symbol next to the name of the device in the left pane.

  13. It is now safe to eject the card and put it into your embedded machine.