You've come to this page because you've asked a question similar to the following:
What is the boot process employed by ARC (Advanced RISC Computing) machine firmware?
This is the Frequently Given Answer to such questions.
Bootstrapping on ARC involves a boot manager that is built in to the firmware. ARC systems do not rely upon bootstrap programs stored in boot records (VBRs or MBRs) at all. The firmware knows how to read a partition table and understands the FAT filesystem format. (IBM PC compatible firmware does neither.) A designated partition, that is formatted with the FAT filesystem format, is known as the ARC System Partition. It contains boot loader programs, which are ARC executable programs that are loaded and run by the ARC Boot Manager.
The location of the ARC System Partition is specified by the value of a firmware variable that is held in non-volatile RAM, named SystemPartition
.
The value of this variable is the ARC Path for the system volume.
An ARC Path is a general-purpose mechanism provided by ARC firmware for naming devices, disc volumes, and files.
The precise details of the boot manager may vary according to firmware implementation, but the operation of the boot process is driven by publicly documented firmware variables with defined named and semantics.
The boot manager presents a menu of boot options to the user.
The name of each boot option is determined by value of the LoadIdentifier
firmware variable.
(The value of the LoadIdentifier
firmware variable, like the values of the firmware variables mentioned later, is in fact an array, with one element of the array for each option on the ARC Boot Manager menu.
Effectively, picking an option on the menu picks the array index that will be used to index into the variable values.
For simplicitly, the discussion below will take the array indexing as implied.)
The boot manager inspects the value of the OSLoader
firmware variable for the location, specified as an ARC Path, of the operating system boot loader program image file.
The boot manager loads and invokes this program.
Usually the operating system boot loader is a file that resides on the ARC System Partition:
For Windows NT version 5.0, the value of the OSLoader
variable is the full ARC Path of the /os/WinNT50/osloader.exe
file on that volume, which contains NTLDR.
For AlphaLinux, the value of the OSLoader
variable is the full ARC Path of the /linload.exe
file on that volume.
For NetBSD, the value of the OSLoader
variable is the ARC Path of either boot
or boot.ecoff
, the boot loaders for ELF and ECOFF NetBSD kernel images, respectively.
(NetBSD does not have a single loader that can understand both program image file formats.)
The operating system boot loader program is responsible for loading the and invoking the operating system kernel proper. The boot loader uses the values of several firmware variables.
The boot loader uses the value of the OSLoadFilename
firmware variable to determine the location of the operating system kernel program image file, which it then loads and invokes.
This file, too, is usually a file that resides on the ARC System Partition.
The exact meaning of the ARC Path in the value of the variable depends from the operating system boot loader:
The Windows NT version 5.x boot loader treats this value as the name of a directory, in which it will look for system32/ntoskrnl.exe
, system32/hal.dll
, and the program image files for the boot-class device drivers.
This is usually the "Windows directory" on the Windows NT system volume.
The AlphaLinux boot loader treats this value as the name of a file, which it expects to contain the program image for MILO, another boot loader (rather than the operating system kernel itself) that it loads and invokes.
(This extra indirection is wholly unnecessary for AlphaLinux, and is nothing more than the result of not making a version of MILO that can be invoked directly by the ARC firmware.)
The NetBSD boot loader treats this as the name of a file, which it expects to contain the program image of the NetBSD operating system kernel.
This is usually netbsd
or netbsd.ecoff
in the ARC System Partition.
The boot loader uses the value of the OSLoadPartition
firmware variable to determine the location of the system volume for the operating system.
It passes this location to the operating system kernel in whatever format the operating system kernel requires.
(For example: The Windows NT kernel understands ARC Paths, and so the Windows NT boot loader, NTLDR, simply passes the value of this variable to the kernel as it is.)
The boot loader uses the value of the OSLoadOptions
firmware variable as a set of additional command-line options to pass to the kernel when it invokes it.
These command-line options are kernel-specific:
For Windows NT version 5.x, these load options are kernel option switches such as SOS
, DEBUG
, and BAUDRATE
.
Because the AlphaLinux boot loader actually loads another boot loader, MILO, these command-line options are command-line arguments to MILO that specify the location of the kernel program image file for MILO to load, and the command-line arguments to pass to the Linux kernel when MILO invokes it.
MIPS Technology Incorporated. (1992). Advanced RISC Computing Specification 1.2