boot loader project - omappedia

7
5/22/12 Bootloader Project - OMAPpedia 1/7 omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview Bootloader Project From OMAPpedia Contents 1 OMAP Bootloader Overview 2 OMAP Boot Sequence 2.1 SYSBOOT Pins 2.2 First Stage Boot 2.3 Second Stage Boot 3 x-loader overview 4 u-boot overview 5 Building the Bootloaders 5.1 u-boot 5.1.1 Downloading u-boot source 5.1.2 Building u-boot 5.1.3 u-boot config files 5.2 x-loader 5.2.1 Accessing x-loader source 5.2.2 Building x-loader 5.2.3 x-loader config files 6 Flashing 7 Upstreaming U-boot OMAP Bootloader Overview There are several stages of bootloaders that perform different levels of initialization on an OMAP platform, in order to eventually load and run the filesystem. This figure shows the booting sequence of the ROM code, x-loader, u-boot, and kernel, with each stage performing enough configuration in order to load and execute the next.

Upload: pradeep-kumar

Post on 20-Apr-2015

146 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

1/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

Bootloader Project

From OMAPpedia

Contents

1 OMAP Bootloader Overview

2 OMAP Boot Sequence2.1 SYSBOOT Pins

2.2 First Stage Boot2.3 Second Stage Boot

3 x-loader overview

4 u-boot overview

5 Building the Bootloaders

5.1 u-boot5.1.1 Downloading u-boot source

5.1.2 Building u-boot5.1.3 u-boot config files

5.2 x-loader

5.2.1 Accessing x-loader source

5.2.2 Building x-loader5.2.3 x-loader config files

6 Flashing

7 Upstreaming U-boot

OMAP Bootloader Overview

There are several stages of bootloaders that perform different levels of initialization on an OMAP platform, in order to eventually load and run thefilesystem. This figure shows the booting sequence of the ROM code, x-loader, u-boot, and kernel, with each stage performing enough configuration inorder to load and execute the next.

Page 2: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

2/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

The Bootloader Project covers specifically the x-loader and the u-boot: a code overview, and how to obtain and build the code.

Why are there two bootloaders? The first bootloader, x-loader, is a stripped-down version of the u-boot, designed to run in OMAP's small on-chipSRAM. It initializes the main off-chip memory of the system and other necessary device drivers, and then loads the larger bootloader for Linux, u-boot.

OMAP Boot Sequence

Detailed documentation on the OMAP boot sequence is available in the OMAP TRM, Initialization chapter. The TRMs for multiple OMAP platforms(OMAP4430, OMAP4460, OMAP34xx, etc) are available here: http://www.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?templateId=6123&navigationId=12037

SYSBOOT Pins

The internal ROM Code can attempt to boot from several different peripheral and memory devices, including, but not limited to: Serial (UART3), SDCard, eMMC, NAND, and USB. The order in which these devices are searched for a valid first-stage booting image (x-loader) is determine by a setof GPIO configuration pins referred to as SYSBOOT. The TRM includes a table that shows the booting device list that each combination of theSYSBOOT pins refers to.

The SYSBOOT value can be read from physical address 0x480022f0, either using JTAG, or if you have linux running, use devmem2:

# devmem2 0x480022f0 b

/dev/mem opened.

Memory mapped at address 0x40020000.

Value at address 0x480022F0 (0x400202f0): 0x2F

For OMAP34xx, there is also a tool to show the boot order: omap34xx-boot-order (http://linux.fjfi.cvut.cz/~zub/omap34xx-boot-order/)

First Stage Boot

For example, the SYSBOOT pins could be set such that booting device list consists of 1) serial (UART3), 2) SD card (MMC1), and 3) NAND flash.In this case, the ROM code would first look for a valid x-loader over the serial port, then in the SD card, then in the NAND flash. Whenever it finds avalid x-loader, it proceeds with execution of that binary.

Serial Boot

For serial boot, a simple ID is written out of the serial port. If the host responds correctly within a short window of time, the ROM will read from theserial port and transfer the data to the internal SRAM. Control is passed to the start of SDRAM if no errors are detected. UART3 is the only uart forwhich the ROM will attempt to load from.

SD Card Boot

If MMC is included in the booting device list, the ROM looks for an SD Card on the first MMC controller. If a card is found, the ROM then looks forthe first FAT32 partition within the partition table. Once the partition is found, the root directory is scanned for a special signed file called "MLO"(which is the x-loader binary with a header containing the memory location to load the file to and the size of the file). Assuming all is well with the file, itis transfered into the internal SRAM and control is passed to it. Both MMC1 and MMC2 can be used for booting.

NAND / eMMC Boot

Page 3: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

3/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

If NAND is included in the booting device list, the ROM attempts to load the first sector of NAND. If the sector is bad, corrupt, or blank, the ROMwill try the next sector (up to 4) before exiting. Once a good sector is found, the ROM transfers the contents to SRAM and transfers control to it. (Thesame steps are performed for eMMC if eMMC is included in the booting device list instead of NAND.)

Second Stage Boot

It is the job of the x-loader to transfer the 2nd stage loader into main memory, which we call the u-boot. Typically both the x-loader and u-boot comefrom the same storage medium. For example, typically if the x-loader is transferred via USB, the u-boot will also be transferred via USB, and if the x-loader is transferred via SD card, the u-boot will also be transferred via SD card. However, this is not required. For example, you could flash the serialx-loader into the NAND. The ROM code will load the x-loader from NAND and transfer control to the x-loader, which will wait for the u-boot to bedownloaded from the serial port.

Serial Boot

In the case of loading both the u-boot over the serial port, the x-loader waits for the host to initiate a kermit connection to reliably transfer large files intomain memory. Once the file transfer is completed successfully, control is transfered.

SD Card Boot

In the case of loading the u-boot via the SD card, the SD card x-loader looks for a FAT32 partition on the first MMC controller and scans the toplevel directory for a file named "u-boot.bin". It then transfers the file into main memory and transfers control to it.

NAND / eMMC Boot

In the case of a u-boot stored in NAND, the x-loader expects the u-boot to be located at the 5th sector (offset 0x00800000). It transfers the imagefrom NAND into main memory and transfers control to it. In the case of a u-boot stored in eMMC, the x-loader expects the u-boot to be located atthe offset 0x200.

x-loader overview

The x-loader is a small first stage bootloader derived from the u-boot base code. It is loaded into the internal static RAM by the OMAP ROM code.Due to the small size of the internal static RAM, the x-loader is stripped down to the essentials. The x-loader configures the pin muxing, clocks, DDR,and serial console, so that it can access and load the second stage bootloader (u-boot) into the DDR. This figure shows the code flow in the x-loader,beginning in start.S.

Page 4: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

4/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

u-boot overview

The u-boot is a second stage bootloader that is loaded by the x-loader into DDR. It comes from Das U-Boot (http://www.denx.de/wiki/U-Boot) . Theu-boot can perform CPU dependent and board dependent initialization and configuration not done in the x-loader. The u-boot also includes fastbootfunctionality for partitioning and flashing the eMMC. The u-boot runs on the Master CPU (CPU ID 0), which is responsible for the initialization andbooting; at the same time, the Slave CPU (CPU ID 1) is held in the “wait for event” state. This figure shows the code flow in the u-boot, beginning instart.S.

Page 5: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

5/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

Building the Bootloaders

The following steps will build the x-loader and u-boot.

Note: In order to build the x-loader or u-boot, it is recommended that you use the omappedia Release Notes page corresponding to the platform youare using (Blaze, Blaze Tablet, Panda, or Zoom) and follow the instructions for that release: http://www.omappedia.com/wiki/Release_Notes In general,the instructions will be very similar with the following exceptions:

The commit ID used to pull the code from the u-boot and x-loader git trees varies based on the release. It is recommended that you use thecorrect commit ID corresponding to your release, as this is how the validation is performed.The config file used to setup the configuration when building the u-boot and x-loader varies based on the platform you are using. See the tablesbelow.

Also, ensure that you have installed the pre-requisite packages for building the bootloaders, namely Git and the CodeSourcery ARM Compiler. Theseinstructions are included in the omappedia Release Notes corresponding to your release. You can also find the information here:

Git is available for download at git-scm.com (http://git-scm.com/) . For more details on installing and using git please see this wiki page(http://wiki.omap.com/index.php/Git) .For the CodeSourcery ARM Compiler, visit Support_Tools/Cross_Compilers for further information.

u-boot

Downloading u-boot source

Clone the u-boot git tree and checkout the source code corresponding to this release:

# mkdir u-boot

# cd u-boot

# git clone git://git.omapzoom.org/repo/u-boot.git

# git checkout <<commit_ID_for_uboot_in_this_release>>

Building u-boot

Make the u-boot source code using the correct config file depending on your platform:

# cd u-boot

# make distclean

Page 6: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

6/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

# make CROSS_COMPILE=arm-none-linux-gnueabi- <<config_file_depending_on_your_platform>>

# make CROSS_COMPILE=arm-none-linux-gnueabi-

u-boot config files

Board config file

44xx Blaze Tablet omap44XXtablet_config

44xx Blaze omap4430sdp_config

3430SDP omap3430sdp_config

3630SDP omap3630sdp_config

3430LDP omap3430labrador_config

Zoom2 omap3430zoom2_config

Zoom3 omap3630zoom3_config

2430sdp omap2430sdp_config

2420h4 omap2420h4_config

The resulting u-boot.bin is located in the top-level of your u-boot directory.

x-loader

Accessing x-loader source

Clone the x-loader git tree and checkout the source code corresponding to this release:

# cd x-loader

# git clone git://git.omapzoom.org/repo/x-loader.git

# git checkout <<commit_ID_for_xloader_in_this_release>>

Building x-loader

Make the x-loader source code using the correct config file depending on your platform:

# cd x-loader

# make distclean

# make CROSS_COMPILE=arm-none-linux-gnueabi- <<config_file_depending_on_your_platform>>

# make CROSS_COMPILE=arm-none-linux-gnueabi- ift

x-loader config files

Board config file

44xx Blaze Tablet omap44XXtablet_config

44xx Blaze omap4430sdp_config

3430SDP omap3430sdp_config

3630SDP omap3630sdp_config

3630SDP 1GB omap3630sdp_1G_config

3430LDP omap3430labrador_config

Page 7: Boot Loader Project - OMAPpedia

5/22/12 Bootloader Project - OMAPpedia

7/7omapedia.org/wiki/Bootloader_Project#OMAP_Bootloader_Overview

Zoom2 omap3430zoom2_config

Zoom3 omap3630zoom3_config

2430sdp omap2430sdp_config

2420h4 omap2420h4_config

To build x-loader to boot over a serial connection for OMAP3, use "omap3430labradordownload_config"

The resulting MLO is located in the top-level of your x-loader directory.

Note: If you are using an HS (High Security) OMAP device, an extra step is required. First, build x-load.bin using the steps above. Then, download theMShield signing tool and use the commands below. Contact your TI representative to get access to this tool.

# cd mshield-dk-root-folder

# ./generate_MLO <<OMAP type>> x-load.bin

For example, for an ES2.3 OMAP4430 device, use the command:

# ./generate_MLO OMAP4430 ES2.3 x-load.bin

The resulting MLO is located in the top-level of your mshield-dk directory.

Flashing

Refer to Android_Fastboot to review flashing methods for Blaze and Blaze Tablet using Fastboot.

Refer to Zoom Flashing to review flashing methods for Zoom1/Zoom2/Zoom3.

Refer to 3630SDP Flashing to review flashing methods for 3630SDP board.

Refer to eMMC Boot to review flashing and boot methods from eMMC device.

Refer to [[1] (http://pandaboard.org/content/usb-downloader-and-usb-second-stage-bootloader-omap4) ] for a USB downloader for PandaBoard.

Upstreaming U-boot

U-boot upstreaming is being carried out as a separate project. Please refer to the following link for more details.

U-boot Upstreaming Project

Retrieved from "http://www.omappedia.org/wiki/Bootloader_Project"Categories: Android | Angstrom | Bootloader | Poky | Linux

This page was last modified on 3 April 2012, at 13:52.This page has been accessed 73,582 times.

Content is available under Creative Commons Attribution-Share Alike 3.0 license..

Privacy policyAbout OMAPpedia

Disclaimers