Académique Documents
Professionnel Documents
Culture Documents
01. Power On
02. ROM - BIOS loaded into RAM auto by the boot code at the start of ROM
[bootstrap]
Purpose of BIOS : Load the OS - any/some OS
03. POST - HW Inventory - Int 19H
04. CMOS - [Current bootable devices]
05. BIOS loads/starts [boots] whatever it finds in the first Sector [Sect 1]
of HDD into RAM i.e. [cylinder 0, head 0, sector 1 of a hard disk]
- This first Sector is aka the MBR [on Windows-based systems]
Note: There is only one MBR per HDD, obviously !!
[Remember!!: In fdisk -l, we had seen one sector is 512 bytes]
06. What is this MBR ?
Int 13 fn 8 --> "Get drive parameters"
Int 13 fn 2 --> "Read sectors from drive"
0x228
<=========x=================== 512 bytes ========================>
| |
<-----446 bytes ---->| <--PT -64 bytes->| < Magic no 2 bytes--->
BS | PT | Magic #
| |
<============================ 512 bytes ========================>
M B R
<------ BS ---------> [ fdisk /mbr ]
1. ntldr + hda1 A [Active] ok [first slice]
CHS# of Win Kernel
[KRNL386.EXE]
BootLoader for Linux kernel
"1st stage BL" or IPL [Initial Program Loader]
2. LILO: /etc/lilo.conf
[/boot/boot.b] [binary format]
CHS# a. /boot/boot.b hda2 extended ok
b. /boot/message hda5 /boot
c. /boot/map hda6 /home
d. /boot/initrd-2.4.20-8.img hda7 swap
hda8 /
hda9 /tmp
hda10 /var
hda11 /usr
07. During installation, when the Linux kernel is being installed, its
exact size and location [CHS] on the HDD is stored in /boot/map
in the /boot partition.
By that we mean, the exact CHS no on the HDD of where it installed
/boot/vmlinuz-2.4.20-8
This is the address of the Linux kernel on the HDD
Let's say this address is # 0x1234
/boot/map - Name / Location of Kernel
=======================================
| CHS Number | /boot/vmlinuz-2.4.20-8 |
| # 0x1234 | |
=======================================
It also puts a per-system-unique signature in the first 4 bytes of the
MSDOS master boot record, at offset 0x228.
08. Continuing from 05, BIOS now....
- Examines the PT from this MBR to see where the AP is
- Then goes to the AP
- Loads whatever it finds in the first Sector of the AP [aka BS]
Note: Every Partition on a HDD has a BS [First Sec] where one can put
the BL
- In our case here, the first Sector of the AP is also the BS of the MBR
- Bcos at install time, we had chosen to install the BL [LILO]
in the MBR
Hence, the BL is NOW in the BS of AP which here is also the MBR
09. BIOS then loads/executes [boots/runs] this first stage BL - which is
LILO [i.e /boot/boot.b] which is in the BS of the MBR and put there
at install time
AND NOT
/boot/boot.b from the /boot partition]
and Transfers control to the it
This is called the 1st stage of bootloading
10. This first-stage BL has but one purpose in life :
To load the 2nd stage BL.
11. Makes BIOS calls - Int 13 fn 8 --> "Get drive parameters" and -
Int 13 fn 2 --> "Read sectors from drive" -
which returns the disk geometry in 24-bit address format upto the
1024 cylinder limit.
Since you have enabled the LBA mode, 64-bit address format is used and
instead of the CHS way, BIOS reads the disk by numbering the sectors
from 1,2,3... etc
The requested info from this BIOS call is stored by the BIOS in the first
page of memory ( < 4k )
12 The first-stage loader then requests the BIOS for an Int 13 fn 2, gives it
the CHS # of the /boot/boot.map file
Now the BL speaks CHS and the BIOS speaks 24-bit addresses.
It is LBA which allows the BIOS to act as a speaker of both, CHS and
Linear Sector Addressing - using 64-bit addresses - Translator
13 BIOS loads this 2nd stage BL - from the CHS no supplied by the 1st stage
14. The 2nd-stage BL now loads the contents of the balance of the BS
into the RAM
And what is that ?
/etc/lilo.conf
Not the file lilo.conf in dir /etc
but the contents of the BS - which is the same file - but in binary form
and was put there by the installer
15. The 2nd stage BL now examines this binary-format-BS which contains
"lilo.conf" and follows the instructions given there !!
It requests BIOS for an Int 13h and gives it the CHS # of the
/boot/message file which BIOS promptly fetches and the 2nd stage BL
executes - This is the splash screen
16 The 2nd stage BL then executes the instructions it got from the BS
after the 1st stage had loaded it, and executes those instructions
/etc/lilo.conf
==============
prompt <--------- Display labels
or present lilo prompt so user can
interact with lilo
timeout=50 <--------- In decisecs
default=linux <--------- What to do after timeout
Default image to boot
boot=/dev/hda <--------- Where to install the 1st stage BL
or IPL when you do a /sbin/lilo -v
Here, in the BS of the MBR of Primary
Master HDD
To install in the MBR, specify /dev/hd
a
map=/boot/map <--------- Location of map file which contains
Size and location of kernel
install=/boot/boot.b <--------- Location of the 2nd Stage BL
message=/boot/message <--------- Splash Screen
lba32
image=/boot/vmlinuz-2.4.20-8 <------ Big Boss - The Linux kernel
label=linux <------ An unscary word for the kernel
initrd=/boot/initrd-2.4.20-8.img <--- Image of support modules
read-only
append="hdc=ide-scsi root=LABEL=/" <--- Parameters LILO will pass to
init before it starts
other=/dev/hda1 Another OS
optional
label=DOS
Errors
======
The 'LILO' prompt itself can be used to help diagnose boot related errors.
The number of letters presented at the LILO prompt can indicate the success
or failure of the boot loader.
L = First stage boot loaded and started. Usually indicates disk problems
or invalid options in /etc/lilo.conf.
LI = Second stage boot loaded from /boot, but /etc/lilo.conf has invalid
parameters or /boot/boot.b was moved without re-running /sbin/lilo.
LIL = Second stage loader started, but the descriptor table can't be
loaded due to a bad disk or invalid parms in /etc/lilo.conf.
LIL? = Second stage loaded at an incorrect address because of invalid
parms in /etc/lilo.conf or /boot/boot.b was moved without
re-running /sbin/lilo.
LIL- = Descriptor table is corrupt. Caused by invalid parms in
/etc/lilo.conf or /boot/boot.b was moved without re-running
/sbin/lilo.
LILO = All of LILO loaded correctly.
17. After timing out AND IF the default image is the Linux kernel, and IT IS
in the case above, the 2nd stage boot loader - /boot/boot.b -
loads the Linux kernel in RAM
18. Now what is a BootLoader ?
BootLoaders load "kernel images" into mem and hand control of the CPU
over to the newly loaded kernel [/boot/vmlinuz-2.4.20.8]
To make your new kernel work, you must tell the BL about the kernel
Nearly all BLs use and understand CHS numbers.
[BIOS can now understand CHS nos too, bcos of LBA]
19. Now the 2nd-stage wishes to load the kernel, as instructed by the
binary-format lilo.conf after timing out or whatever the user chooses
But there's a problem !!
The Linux kernel is on the HDD !!
In /boot to be precise !!
And the 2nd-stage LILO BL has no idea how to access the HDD
Why ?
The HDD drivers - /dev/hda... are in /dev on the HDD
and to access it the 2nd stage BL requires the file /dev/hda
which once again is itself on the HDD !!
Hen-and-Egg situation !!
20 The 2nd stage BL has no choice but to use the BIOS as its HDD device
driver to access the HDD at boot time.
After all that's where the kernel is [/boot/vmlinuz-2.4.20-8] !!
21. The 2nd stage BL once again requests BIOS - Int 13h fn 2 - and hands it
the CHS # of the /boot/map file, which BIOS loads
22. The 2nd stage loader now examines this /boot/map and extracts the
CHS # inside it - which was put there by the BL installer - anaconda -
and /sbin/lilo - and requests BIOS once more to load whatever is there
in that CHS # address
23 BIOS then loads the Linux kernel /boot/vmlinuz-2.4.20-8 into the RAM
and hands it to the 2nd stage BL
24 The 2nd stage BL uncomptars this file and fills the memory with kernel
mem structures which can be seen in the /proc virtual file system
The Engine Of The Car Is Ready And Running !!
The Linux OS is ready and running !! Kernel Land is ready !!
BUT WE FORGOT TO MAKE THE CAR PROPER ITSELF !! No Userland !!
How do we drive this car if there is no seat, steering wheel. Nothing.
Just an engine !!
To Part II --------->
Miscellaneous but critical
==========================
System.map - Error Diagnostic Translation File
or Kernel Symbol [vars/fns] Table
or Kernel System Maps
Read by klogd* for debugging
klogd* reads /proc/kmsg
boot.0300 -|------- Stock MBR backup - IDE
boot.0800 -|------- -- do -- - SCSI
/sbin/lilo
==========
What does /sbin/lilo do : 1. Reinstalls LILO - The 1st stage BL in BS of MBR
2. Examines /etc/lilo.conf and iff no errors then
compiles [ie converts to binary] and installs this
in the BS of the MBR near LILO
[map installer] 3. Re-creates the map file - /boot/map - by examining
/etc/lilo.conf for location of kernel
Now we have : LILO --> BootLoader
/sbin/lilo --> Map Installer
/etc/lilo.conf --> Config File to customize LILO - the BL
=============================
Part II /sbin/init takes over
=============================
25 Now that the Linux Kernel is in the RAM, and is much more powerful
and immensely larger than the 2nd stage BL, it takes over total control
from it and makes yet another BIOS call Int 13h fn 2 for the
file /boot/initrd-2.4.20-8.img
26 It uncompresses it in RAM and creates a mini-FS as can be seen if
we look inside the image
# mount -o loop /boot/initrd-2.4.20-8.img /win
# cd /win
# ls
27 Note that the HDD driver is available now; Hence the kernel executes the
"linuxrc" script which mounts the "root" partition in R/O mode and
loads the /sbin/init* program into RAM
The Userland Part of Linux is now started by the /sbin/init daemon
28 /sbin/init* examines /etc/inittab
=======================================================================
/etc/inittab
============
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
ls:S:wait:/etc/rc.d/rc S
~:S:respawn:/sbin/sulogin
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
11:2345:respawn:/sbin/mingetty tty11
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
=======================================================================
29 a. Executes /etc/rc.d/rc.sysinit in a subshell of inittab shell
rc.sysinit
==========
calls /etc/sysconfig/network in same env [shell]
sets the hostname and checks whether NW is yes or no
ie checks for existence for NW card
calls /etc/init.d/functions script in the same env [i.e rc.sysinit]
sets global umask and path and defines 17 shells fns
within the rc.sysinit shell env
# cat functions | grep \(\)|sort|nl
/etc/init.d/functions
=====================
1 action() {
2 checkpid() {
3 confirm() {
4 daemon() {
5 echo_failure() {
6 echo_passed() {
7 echo_success() {
8 echo_warning() {
9 failure() {
10 killproc() {
11 passed() {
12 pidfileofproc() {
13 pidofproc() {
14 status() {
15 strstr() {
16 success() {
17 warning() {
30 Displays the "Welcome to Red Hat..." from /etc/redhat-release
31 Runs dmesg* which creates /var/log/dmesg and
display its contents on the screen
32 Mounts all local filesystems from /etc/fstab and updates /etc/mtab
Mount simply displays the contents of /etc/mtab
Now /etc/rc.d/rc.sysinit script ends !!
Summary: rc.sysinit : 1. sets the global umask, global PATH,
sets up the NW'ing subsystem
Basically starts the System Daemons
b. Back to inittab
33 rc is executed in a new subshell of /etc/inittab
starts and stops the Application NWing daemons
runs /etc/rc.d/rc.local which is a symlink in all RLs and is the
only script which is run regardless of the RL and is
S99local in all /etc/rc.d/rc?.d/...] and points to
/etc/rc.d/rc.local
goes back to inittab
Summary: rc : starts the 3rd party NW services [User NW services]
Basically starts the Application Daemons
i.e all the * in ntsysv
DNF: * chkconfig --level 3 gpm off/on
* chkconfig --add [--del, --list] 3 vadapav off/on
* ntsysv --level 3
*****************************