{Latest update: 10 March 2005}

  1. Introduction
  2. Low-level boot process
  3. Bootloader
  4. Kernel initialization
  5. Resources


After so many years providing support to UNIX and Linux system administrators, and after taking so many classes on kernel and operating system internals, I finally decided to start a project to study these issues on my own. Using the latest stable kernel release (version at the moment I started the project), I plan to study the boot process of the Linux kernel just on two of the architectures I am the most familiar with: IA-32 and IA-64. Once this paper is finished, I may be able to move onto other aspects of the kernel: process management and scheduling, memory management, I/O, networking, etc.

Low-level boot process

The details of the boot process on any system are highly dependent on the architecture itself, so given the enormous amount of platforms supported by the Linux kernel we have little choice but to concentrate on one or two of them. In this case, we will only study the IA-32 and IA-64 architectures, due to their popularity and, I have to admit, the fact that they are the ones I am more familiar with. I fully understand the AMD x86 Opteron architecture is becoming quite popular, and perhaps in the future I may consider to pay some attention to it but my time and resources are limited so we will not study it here for the time being.

As anyone could imagine, such architecture-dependent process must involve a good amount of assembly language. For the most part though is not something extremely complex and one can get by with some basic concepts that we will discuss in the next few chapters.

IA-32 architecture

The IA-32 boot process can be summed up in the following steps:

  • BIOS selects the boot device.
  • BIOS loads the boot sector from the boot device.
  • Boot sector loads setup, decompression routines and the compressed kernel image.
  • The kernel is uncompressed in protected mode.
  • Low-level initialization is performed by the asm code.
  • High-level C initialization.

IA-64 architecture


Kernel initialization


Documents on the boot up process:
Other documents on the Linux kernel:
Generic kernel related resources: