230 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
Summary
 | 
						|
=======
 | 
						|
The README is for the boot procedure on the ipam390 board
 | 
						|
 | 
						|
In the context of U-Boot, the board is booted in three stages. The initial
 | 
						|
bootloader which executes upon reset is the ROM Boot Loader (RBL) and sits
 | 
						|
in the internal ROM. The RBL initializes the internal memory and then
 | 
						|
depending on the exact board and pin configurations will initialize another
 | 
						|
controller (such as NAND) to continue the boot process by loading
 | 
						|
the secondary program loader (SPL). The SPL will initialize the system
 | 
						|
further (some clocks, SDRAM). As on this board is used the falcon boot
 | 
						|
mode, now 2 ways are possible depending on the GPIO 7_14 input pin,
 | 
						|
connected with the "soft reset switch"
 | 
						|
 | 
						|
If this pin is logical 1 (high level):
 | 
						|
spl code starts the kernel image without delay
 | 
						|
 | 
						|
If this pin is logical 0 (low level):
 | 
						|
spl code starts the u-boot image
 | 
						|
 | 
						|
AIS is an image format defined by TI for the images that are to be loaded
 | 
						|
to memory by the RBL. The image is divided into a series of sections and
 | 
						|
the image's entry point is specified. Each section comes with meta data
 | 
						|
like the target address the section is to be copied to and the size of the
 | 
						|
section, which is used by the RBL to load the image. At the end of the
 | 
						|
image the RBL jumps to the image entry point.  The AIS format allows for
 | 
						|
other things such as programming the clocks and SDRAM if the header is
 | 
						|
programmed for it.  We do not take advantage of this and instead use SPL as
 | 
						|
it allows for additional flexibility (run-time detect of board revision,
 | 
						|
loading the next image from a different media, etc).
 | 
						|
 | 
						|
Compilation
 | 
						|
===========
 | 
						|
run "tools/buildman/buildman -k ipam390" in the u-boot source tree.
 | 
						|
Once this build completes you will have a ../current/ipam390/u-boot.ais file
 | 
						|
that needs to be written to the nand flash.
 | 
						|
 | 
						|
Flashing the images to NAND
 | 
						|
==========================
 | 
						|
The AIS image can be written to NAND flash using the following commands.
 | 
						|
Assuming that the network is configured and enabled and the u-boot.ais file
 | 
						|
is tftp'able.
 | 
						|
 | 
						|
U-Boot > print upd_uboot
 | 
						|
upd_uboot=tftp c0000000 ${u-boot};nand erase.part u-boot;nand write c0000000 20000 ${filesize}
 | 
						|
U-Boot >
 | 
						|
U-Boot > run upd_uboot
 | 
						|
Using DaVinci-EMAC device
 | 
						|
TFTP from server 192.168.1.1; our IP address is 192.168.20.71
 | 
						|
Filename '/tftpboot/ipam390/u-boot.ais'.
 | 
						|
Load address: 0xc0000000
 | 
						|
Loading: ##################################
 | 
						|
	 1.5 MiB/s
 | 
						|
done
 | 
						|
Bytes transferred = 493716 (78894 hex)
 | 
						|
 | 
						|
NAND erase.part: device 0 offset 0x20000, size 0x160000
 | 
						|
Erasing at 0x160000 -- 100% complete.
 | 
						|
OK
 | 
						|
 | 
						|
NAND write: device 0 offset 0x20000, size 0x78894
 | 
						|
 493716 bytes written: OK
 | 
						|
U-Boot >
 | 
						|
 | 
						|
Recovery
 | 
						|
========
 | 
						|
 | 
						|
In the case of a "bricked" board, you need to use the TI tools found
 | 
						|
here[1] to create an uboot-uart-ais.bin file
 | 
						|
 | 
						|
- cd to the u-boot source tree
 | 
						|
 | 
						|
- compile the u-boot for the ipam390 board:
 | 
						|
$ tools/buildman/buildman -k ipam390
 | 
						|
 | 
						|
  -> Now we shall have u-boot.bin
 | 
						|
 | 
						|
- Create u-boot-uart-ais.bin
 | 
						|
$ mono HexAIS_OMAP-L138.exe -entrypoint 0xC1080000 -ini ipam390-ais-uart.cfg \
 | 
						|
	-o ../current/ipam390/uboot-uart-ais.bin ./u-boot.bin@0xC1080000;
 | 
						|
 | 
						|
Note: The ipam390-ais-uart.cfg is found in the board directory
 | 
						|
for the ipam390 board, u-boot:/board/Barix/ipam390/ipam390-ais-uart.cfg
 | 
						|
 | 
						|
- We can now run bootloader on IPAM390 via UART using the command below:
 | 
						|
 | 
						|
$ mono ./slh_OMAP-L138.exe -waitForDevice -v -p /dev/tty.UC-232AC uboot-uart-ais.bin
 | 
						|
NOTE: Do not cancel the command execution! The command takes 20+ seconds
 | 
						|
to upload u-boot over serial and run it!
 | 
						|
Outcome:
 | 
						|
Waiting for the OMAP-L138...
 | 
						|
(AIS Parse): Read magic word 0x41504954.
 | 
						|
(AIS Parse): Waiting for BOOTME... (power on or reset target now)
 | 
						|
(AIS Parse): BOOTME received!
 | 
						|
(AIS Parse): Performing Start-Word Sync...
 | 
						|
(AIS Parse): Performing Ping Opcode Sync...
 | 
						|
(AIS Parse): Processing command 0: 0x5853590D.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Executing function...
 | 
						|
(AIS Parse): Processing command 1: 0x5853590D.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Executing function...
 | 
						|
(AIS Parse): Processing command 2: 0x5853590D.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Executing function...
 | 
						|
(AIS Parse): Processing command 3: 0x5853590D.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Executing function...
 | 
						|
(AIS Parse): Processing command 4: 0x5853590D.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Executing function...
 | 
						|
(AIS Parse): Processing command 5: 0x58535901.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Loading section...
 | 
						|
(AIS Parse): Loaded 326516-Byte section to address 0xC1080000.
 | 
						|
(AIS Parse): Processing command 6: 0x58535906.
 | 
						|
(AIS Parse): Performing Opcode Sync...
 | 
						|
(AIS Parse): Performing jump and close...
 | 
						|
(AIS Parse): AIS complete. Jump to address 0xC1080000.
 | 
						|
(AIS Parse): Waiting for DONE...
 | 
						|
(AIS Parse): Boot completed successfully.
 | 
						|
 | 
						|
Operation completed successfully.
 | 
						|
 | 
						|
Falcon Bootmode (boot linux without booting U-Boot)
 | 
						|
===================================================
 | 
						|
 | 
						|
The Falcon Mode extends this way allowing to start the Linux kernel directly
 | 
						|
from SPL. A new command is added to U-Boot to prepare the parameters that SPL
 | 
						|
must pass to the kernel, using ATAGS or Device Tree.
 | 
						|
 | 
						|
In normal mode, these parameters are generated each time before
 | 
						|
loading the kernel, passing to Linux the address in memory where
 | 
						|
the parameters can be read.
 | 
						|
With Falcon Mode, this snapshot can be saved into persistent storage and SPL is
 | 
						|
informed to load it before running the kernel.
 | 
						|
 | 
						|
To boot the kernel, these steps under a Falcon-aware U-Boot are required:
 | 
						|
 | 
						|
1. Boot the board into U-Boot.
 | 
						|
Use the "spl export" command to generate the kernel parameters area or the DT.
 | 
						|
U-Boot runs as when it boots the kernel, but stops before passing the control
 | 
						|
to the kernel.
 | 
						|
 | 
						|
Here the command sequence for the ipam390 board:
 | 
						|
- load the linux kernel image into ram:
 | 
						|
 | 
						|
U-Boot > nand read c0100000 2 200000 400000
 | 
						|
 | 
						|
NAND read: device 0 offset 0x200000, size 0x400000
 | 
						|
 4194304 bytes read: OK
 | 
						|
 | 
						|
- generate the bootparms image:
 | 
						|
 | 
						|
U-Boot > spl export atags c0100000
 | 
						|
## Booting kernel from Legacy Image at c0100000 ...
 | 
						|
   Image Name:   Linux-3.5.1
 | 
						|
   Image Type:   ARM Linux Kernel Image (uncompressed)
 | 
						|
   Data Size:    2504280 Bytes = 2.4 MiB
 | 
						|
   Load Address: c0008000
 | 
						|
   Entry Point:  c0008000
 | 
						|
   Verifying Checksum ... OK
 | 
						|
   Loading Kernel Image ... OK
 | 
						|
subcommand not supported
 | 
						|
subcommand not supported
 | 
						|
Argument image is now in RAM at: 0xc0000100
 | 
						|
 | 
						|
- copy the bootparms image into nand:
 | 
						|
 | 
						|
U-Boot > mtdparts
 | 
						|
 | 
						|
device nand0 <davinci_nand.0>, # parts = 6
 | 
						|
 #: name		size		offset		mask_flags
 | 
						|
 0: u-boot-env          0x00020000	0x00000000	0
 | 
						|
 1: u-boot              0x00160000	0x00020000	0
 | 
						|
 2: bootparms           0x00020000	0x00180000	0
 | 
						|
 3: factory-info        0x00060000	0x001a0000	0
 | 
						|
 4: kernel              0x00400000	0x00200000	0
 | 
						|
 5: rootfs              0x07a00000	0x00600000	0
 | 
						|
 | 
						|
active partition: nand0,0 - (u-boot-env) 0x00020000 @ 0x00000000
 | 
						|
 | 
						|
defaults:
 | 
						|
mtdids  : nand0=davinci_nand.0
 | 
						|
mtdparts: mtdparts=davinci_nand.0:128k(u-boot-env),1408k(u-boot),128k(bootparms),384k(factory-info),4M(kernel),-(rootfs)
 | 
						|
U-Boot > nand erase.part bootparms
 | 
						|
 | 
						|
NAND erase.part: device 0 offset 0x180000, size 0x20000
 | 
						|
Erasing at 0x180000 -- 100% complete.
 | 
						|
OK
 | 
						|
U-Boot > nand write c0000100 180000 20000
 | 
						|
 | 
						|
NAND write: device 0 offset 0x180000, size 0x20000
 | 
						|
 131072 bytes written: OK
 | 
						|
U-Boot >
 | 
						|
 | 
						|
You can use also the predefined U-Boot Environment variable "setbootparms",
 | 
						|
which will do all the above steps in one command:
 | 
						|
 | 
						|
U-Boot > print setbootparms
 | 
						|
setbootparms=nand read c0100000 200000 400000;spl export atags c0100000;nand erase.part bootparms;nand write c0000100 180000 20000
 | 
						|
U-Boot > run setbootparms
 | 
						|
 | 
						|
NAND read: device 0 offset 0x200000, size 0x400000
 | 
						|
 4194304 bytes read: OK
 | 
						|
## Booting kernel from Legacy Image at c0100000 ...
 | 
						|
   Image Name:   Linux-3.5.1
 | 
						|
   Image Type:   ARM Linux Kernel Image (uncompressed)
 | 
						|
   Data Size:    2504280 Bytes = 2.4 MiB
 | 
						|
   Load Address: c0008000
 | 
						|
   Entry Point:  c0008000
 | 
						|
   Verifying Checksum ... OK
 | 
						|
   Loading Kernel Image ... OK
 | 
						|
subcommand not supported
 | 
						|
subcommand not supported
 | 
						|
Argument image is now in RAM at: 0xc0000100
 | 
						|
 | 
						|
NAND erase.part: device 0 offset 0x180000, size 0x20000
 | 
						|
Erasing at 0x180000 -- 100% complete.
 | 
						|
OK
 | 
						|
 | 
						|
NAND write: device 0 offset 0x180000, size 0x20000
 | 
						|
 131072 bytes written: OK
 | 
						|
U-Boot >
 | 
						|
 | 
						|
Links
 | 
						|
=====
 | 
						|
[1]
 | 
						|
 http://sourceforge.net/projects/dvflashutils/files/OMAP-L138/
 |