forked from rrcarlosr/Jetpack
230 lines
8.0 KiB
Plaintext
230 lines
8.0 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 "./MAKEALL ipam390" in the u-boot source tree.
|
||
|
Once this build completes you will have a 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:
|
||
|
$ ./MAKEALL 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 ./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/
|