Chapter 9. Setting Up the Bootloader

Though the bootloader runs for a very short
time during the system's startup and is mainly
responsible for loading the kernel, it is a very important system
component. Setting up a bootloader is, to some extent, a task common
to all Linux systems. It is a special task, nevertheless, for
embedded Linux systems, because the bootloaders used in such systems
are either completely different from those used in common systems or,
even when they are the same, are configured and operated in very
different ways.

Chapter 7 discussed the manipulation of embedded
storage devices, and Chapter 8 explained how to
set up a root filesystem for use in an embedded target. We are now
ready to set up the bootloader along with the other components
created earlier so we may obtain a bootable and functional embedded
system. Because hardware architectures differ greatly among each
other and because boards based on the same architecture differ
greatly among themselves, the selection, set up, and configuration of
a bootloader depend largely on the hardware you are using.

There is a slew of bootloaders available for Linux, thousands upon
thousands of embedded boards, and many possible boot configurations
for a same board. It is, therefore, inconceivable to cover all the
possible combinations within a single chapter. Nor is it possible to
give an in-depth discussion of the use of each of the bootloaders
covered. Many existing bootloaders for Linux either already have an
entire book describing their use or need one to be written for them.

Also, the number and quality of
bootloaders vary greatly between architectures. Some architectures,
such as the PPC and the x86, have well known, established bootloaders
providing support for a range of hardware. Other architectures have
few or no standard bootloaders and mainly rely on the use of
bootloaders provided by the hardware manufacturer. If you are using a
bootloader provided by the manufacturer, make sure you have all the
binaries and documentation. If possible, obtain the source code too
so you can reprogram your target freely.

This chapter will concentrate on the bootloader/boot setup
combinations most commonly used in embedded systems to load Linux.
Although GRUB can be installed and used on hard disks, for example,
its most common use in embedded Linux systems is to load Linux from
DOC devices. Hence, the GRUB section will cover only
GRUB's use to load Linux from DOC devices.

First, we start by looking at the plethora of embedded bootloaders
available for use with Linux. We then discuss how to set up and
configure a server to provide BOOTP/DHCP and NFS services for targets
that use these services to obtain a kernel image and mount their root
filesystem, respectively. This is followed by in-depth discussions of
the use of LILO with disk devices, the use of GRUB with DOC devices,
and the use of U-Boot.

At the end of this chapter, you will either have installed all the
components we created earlier, configured your target with the
appropriate bootloader, and be ready to boot your system, or you will
know where to get the rest of the information you need to achieve
this.