
The bootloader environment consists of a set of libraries that provide
various features and a couple small driver programs that build against
these libraries.  The libraries used come from three categories --
generic (containing code useful to any bootloader), architecture
(containing code useful to a specific cpu, system-on-chip, etc), and
board (containing code useful to a single specific device)

For the purpose of this discussion, we will involve the fictional
companies Outstanding Electronics Manufacturing (OEM) and Silicon
Engineering Management, Inc (SEMI).  OEM produces the quality Brick
mobile device using SEMI's 65002 ARM-based system-on-chip.

Common bootloader libraries and base architectures:

boot/include/boot                     headers
boot/libboot                          libboot.a
boot/libc                             libboot_c.a
boot/arch_armv6                       libboot_arch_armv6.a

Architecture-specific libraries for SEMI 65002 SOC:

partner/semi/boot/include/65002       headers
partner/semi/boot/arch_65002          liboot_arch_65002.a

Device-specific library for OEM Brick phone:

partner/oem/brick/product_config.mk   configuration
partner/oem/brick/boot                libboot_board_brick.a

The actual bootloader:

boot/bootloader                       bootloader


The product_config.mk defines three important build variables:

DEVICE_BOOTLOADER_LIBS := \
	libboot_board_brick.a \
	libboot_arch_65002.a \
	libboot_arch_armv6.a

DEVICE_BOOTLOADER_LINK_SCRIPT := \
	partner/semi/boot/boot.ld

DEVICE_BOOTLOADER_INIT := \
	partner/semi/boot/init.S

Which are used by the bootloader to specify which board and
architecture specific libraries to link against as well as what link
script and init.S to use
