Bering-uClibc 5.x - User Guide - Appendices - Overview of the Startup Sequence

From bering-uClibc
Jump to: navigation, search
Appendices - Overview of the Startup Sequence
Prev Bering-uClibc 5.x - User Guide Next

Step 1: BIOS and Boot Device

The BIOS is typically configured with an ordered list of devices which are checked in turn until a valid boot device is found. These devices can be:

  • A floppy disk drive.
  • A hard disk drive (or a flash drive pretending to be a hard drive).
  • An optical disk drive (such as a CD-ROM or DVD drive).
  • A network interface card containing a network boot ROM.

Any of these can be used to boot Bering-uClibc 5.x.

Step 2: Boot Loader

Bering-uClibc 5.x uses one of SYSLINUX, ISOLINUX or PXELINUX as the boot loader, depending on the type of boot device being used.

For the most part these tools behave in the same way - there is a configuration file which defines what to load next:

  • syslinux/syslinux.cfg on the SYSLINUX boot disk.
  • isolinux/isolinux.cfg on the ISOLINUX boot disk.
  • pxelinux.cfg/default (or similar) on the PXELINUX TFTP server.

Each of these file contains lines like the following:

DISPLAY syslinux.dpy
APPEND reboot=bios VERBOSE=1
DEFAULT /syslinux/linux initrd=/initrd.lrp,/initmod.lrp rw root=/dev/ram0 LEAFCFG=/dev/sda1:vfat

This example is for SYSLINUX but the others are very similar.

The "DISPLAY" line dumps the contents of the .dpy file to the boot console. This is what displays the LEAF Project "shield" logo shown below:

Bering-uClibc 5.x boot screenshot

(Actually this screenshot was taken slightly later in the boot sequence, but you get the idea.)

The "TIMEOUT" line means that there is no delaying waiting in case there is any keyboard input.

The "APPEND" line defines some extra command-line arguments which are "appended" to the kernel command line.

The "DEFAULT" line is the important one:

  • The text "/syslinux/linux" specifies the name of the kernel image file to boot.
  • The text "initrd=/initrd.lrp,/initmod.lrp" specifies the name of the INITial RAM Disk image file to load and the associated Package initmod.lrpcontaining kernel-specific modules.
  • The text "rw" specifies that the initrd file shall be mounted read-write (rather than read-only).
  • The text "root=/dev/ram0" specifies that the first RAM disk shall be used as the "root" disk.
  • The text "LEAFCFG=/dev/sda1:vfat" defines a value for kernel command-line argument "LEAFCFG" which is used later.

The boot loader (*LINUX) uncompresses the kernel file and loads it into memory, together with the initrd. It then passes control to the kernel.

Step 3: Linux kernel and initrd

The Linux kernel starts executing against the contents of the initrd and initmod disk images.

Any arguments specified on the kernel command-line which the kernel recognises are processed. (Some other arguments, like "LEAFCFG", are not recognised by the kernel itself but are used in later processing.)

Some initial initialization is performed and then Shell script /init is executed.

Step 4: /init

Shell script /init (actually a symbolic link to /var/lib/lrpkg/root.linuxrc) is a critical file with a huge influence on the startup of a Bering-uClibc 5.x machine.

In summary, this script:

  1. Creates the /proc/ directory and mounts the "proc" filesystem at that location.
  2. Creates the /sys/ directory and mounts the "sysfs" filesystem at that location.
  3. Creates the symbolic links for all of the commands provided by the "busybox" executable.
  4. Loads all of the kernel Modules listed in file /boot/etc/modules/
    • Currently just isofs and vfat.
    • The modules are loaded using "modprobe" so any pre-requisite modules are loaded too, provided they are present in directory /lib/modules/.
  5. Loads any modules specified in a comma-separated list against kernel command-line argument "KMODULES".
    • For example, if the kernel command line includes "KMODULES=e100,natsemi" then modules mii and e100 will be loaded, provided they are present in directory /lib/modules/.
    • Again, the kernel Modules are loaded using "modprobe" so any pre-requisite modules are loaded too.
  6. Loads any kernel Modules which are available in directory /lib/modules/ and which implement device drivers for installed hardware.
    • This is done by looking for files called modalias within the directory structure under /sys/devices/, examining the contents of those files and checking for a match in file /lib/modules/`uname -r`/modules.alias. Any kernel Modules which match are loaded.
    • File /lib/modules/`uname -r`/modules.alias is generated by the "depmod" command.
  7. Mounts the disk device specified by kernel command-line argument "LEAFCFG".
    • This variable can be set to a list of entries. The first one in the list containing a file called leaf.cfg is used.
    • This behaviour permits a default leaf.cfg on read-only media (such as a CD-ROM) to be overridden by a modifed copy on read-write media (such as a floppy disk).
    • By default there is a 1-second "wait" before mounting the disk device, which allows some time for device drivers to load before proceeding. On some hardware this may not allow sufficient time for the drivers to fully load, in which case the symptom is that leaf.cfg cannot be found. The delay can be adjusted by specifying a value for kernel command-line argument "usb_wait".
  8. "Sources" file leaf.cfg in the current shell, to set variables required by later processing.
  9. Creates a standard set of empty directories
    • For example /mnt/, /var/run/.
  10. Mounts the disk device(s) specified by variable "PKGPATH".
    • Variable "PKGPATH" is specified in leaf.cfg.
    • Like "LEAFCFG" this can specify a list of entries.
    • Invalid entries are ignored but valid entries are used to populate file /var/lib/lrpkg/pkgpath.disks and modified Packages are saved to the first entry in that file.
  11. Loads all of the Packages listed against variable "LRP", provided the corresponding .lrp file can be located in "PKGPATH".
    • Variable "LRP" is specified in leaf.cfg.
  12. Unmounts the devices for "LEAFCFG" and "PKGPATH".
  13. Mounts the "future" root filesystem (type "tmpfs") in a dummy directory.
  14. Mounts separate "tmpfs" file systems under directories /tmp/ and /var/log/.
  15. Recursively copies the files and directories created earlier (e.g. by loading the Packages) across to the "future" root directory.
  16. Uses the "switch_root" utility to start using the "future" root directory in place of the original (initrd) one.

Step 5: inittab

TODO - mention serial consoles

Step 6: /etc/rc?.d/*


Prev Up Next