123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- 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/
|