Bering-uClibc 5.x - User Guide - Appendices - Overview of the Startup Sequence
Appendices - Overview of the Startup Sequence | ||
---|---|---|
Prev | Bering-uClibc 5.x - User Guide | Next |
Contents
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 TIMEOUT 0 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:
(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.lrp
containing 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:
- Creates the
/proc/
directory and mounts the "proc" filesystem at that location. - Creates the
/sys/
directory and mounts the "sysfs" filesystem at that location. - Creates the symbolic links for all of the commands provided by the "busybox" executable.
- 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/
.
- 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.
- 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
- 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.
- This is done by looking for files called
- 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".
- This variable can be set to a list of entries. The first one in the list containing a file called
- "Sources" file
leaf.cfg
in the current shell, to set variables required by later processing. - Creates a standard set of empty directories
- For example
/mnt/
,/var/run/
.
- For example
- 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.
- Variable "PKGPATH" is specified in
- 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
.
- Variable "LRP" is specified in
- Unmounts the devices for "LEAFCFG" and "PKGPATH".
- Mounts the "future" root filesystem (type "tmpfs") in a dummy directory.
- Mounts separate "tmpfs" file systems under directories
/tmp/
and/var/log/
. - Recursively copies the files and directories created earlier (e.g. by loading the Packages) across to the "future" root directory.
- 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/*
TODO
Prev | Up | Next |