Mercurial > ecos
view packages/redboot/current/doc/redboot.ebsa285 @ 115:6ed91473a1cd ecos-sw-2000-08-21
Merge from eCos master repository on 2000-08-21-22:40:54-BST
| author | jlarmour |
|---|---|
| date | Fri, 25 Aug 2000 17:32:38 +0000 |
| parents | |
| children | 0ae0bc38e387 |
line wrap: on
line source
RedBoot for the EBSA285 ======================= Target ------ This document describes using RedBoot with the Intel StrongARM EBSA-285 development system and equivalents. Background ---------- RedBoot is the new debug/bootstrap environment from RedHat. It is designed to replace the existing debug/boot tools CygMon and GDB stubs. It provides a complete bootstrap environment, including network downloading and debugging. Also provided is a simple flash file system for boot images. Some host services may be necessary in order to run RedBoot, especially the first time. In particular: * TFTP - RedBoot uses TFTP for downloading images. Most systems come with this disabled, so it may be necessary to enable a TFTP server. Also note that the files mentioned below are assumed to be in the TFTP directory, normally "/tftpboot". * BOOTP/DHCP - RedBoot will use BOOTP to get its network address parameters unless setup otherwise. For the initial setup, BOOTP will be required. Since RedBoot is still quite new, there are some limitations (which we expect to remove very soon): * The only format supported for image download is Motorola S-records. Thus files to be downloaded would have to be converted using the "objcopy" utility for the platform in question; for EBSA this is arm-elf-objcopy. S-record versions of the boot images are produced as part of the normal RedBoot build process (see below). * Serial downloads are not supported; TFTP only in this version. * RedBoot "chatters" somewhat about network packets that it discards; this is to help with our debugging. * Asynchronous interrupt (^C) of the board is not yet supported in RedBoot. Notes: * Only one network interface is used by RedBoot. This will be the first interface found, which on the EBSA is the board in the highest numbered PCI slot. * In order to use GDB, each network interface needs to have two IP addresses. One will be used for RedBoot/GDB and the other for eCos applications. After RedBoot is installed in the flash, we use the RedBoot configuration to force the IP address for the board's RedBoot persona, and then BOOTP for the eCos application's IP address. * In case of difficulties with RedBoot, it is possible to go back to the "old way" of doing things, with built-in debug stubs and serial-only debug and so on; that way the eCos application and its built-in GDB stubs "takes over" the whole machine. Installing RedBoot is not a one-way street; it can be used just as CygMon or an eCos stub ROM was. Building Test Cases to run with RedBoot --------------------------------------- The default configuration for EBSA-285 at present always sends diagnostic output to the serial line; to use RedBoot to channel diagnostic output to GDB whether connected by net or serial, enable the configuration option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG "Do diagnostic IO via virtual vector table" located here in the common HAL configuration tree: "eCos HAL" "ROM monitor support" "Enable use of virtual vector calling interface" "Do diagnostic IO via virtual vector table" Other than that, no special configuration is required to use RedBoot. If you have been using built-in stubs to acquire support for thread-aware debugging, you can still do that, but you must only use the serial device for GDB connection and you must not enable the option mentioned above. However, it is no longer necessary to do that to get thread-awareness; RedBoot is thread aware. Installation on the Target Board -------------------------------- Here's how to install RedBoot, using the redboot images you should find in loaders/arm-ebsa285/ in your installation directory: 431497 Aug 9 15:28 redboot-ram.elf 184802 Aug 9 15:28 redboot-ram.srec 433104 Aug 9 15:29 redboot-rom.elf (this one is not used) 194732 Aug 9 15:29 redboot-rom.srec Copy the two '.srec' files to /tftpboot or where-ever they have to be for your TFTP server. Briefly, we use whatever boot flash image you have in place already (CygMon or an eCos stub ROM) along with GDB, to execute a RAM based version of RedBoot. That is used, in its command-line mode, to fetch a ROM-based boot image of RedBoot and write it into the flash memory. "Fetching" the image means TFTP from a server; the image must be in S-Record format. We then reset the target, thus running the newly-installed boot image of RedBoot. That in turn is used, in its command-line mode, to fetch a RAM-based boot image of RedBoot and write it into a different area of the flash memory, in order to make it easier to do the first part (running a RAM-based RedBoot in order to update the boot block) again in future. Alternatively you can make a plain binary from the redboot-rom.elf and "blow" that into the boot flash using the means of your choice, as with previous systems. 1. Load a RedBoot, built for RAM startup, into RAM using existing GDB stubs. Note: do not run it yet! % arm-elf-gdb -nw loaders/arm-ebsa285/redboot-ram.elf GNU gdb 4.18-ecos-99r1-991015 Copyright 1998 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. This version of GDB is supported for customers of Cygnus Solutions. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf"...(no debugging symbols found)... (gdb) set remotebaud 38400 (gdb) tar rem /dev/ttyS0 Remote debugging using /dev/ttyS0 0x41000838 in ?? () (gdb) load Loading section .rom_vectors, size 0x44 lma 0x20000 Loading section .text, size 0xf06c lma 0x20044 Loading section .rodata, size 0x19a8 lma 0x2f0b0 Loading section .data, size 0x474 lma 0x30a58 Start address 0x20044 , load size 69324 Transfer rate: 25208 bits/sec. (gdb) detach Ending remote debugging. (gdb) q 2. Execute RedBoot from RAM, and initialize the flash filing system. Notes: the key here is the "-o" option which keeps minicom from sending junk. The magic phrase "$c#63" is important: you must type it in exactly thus. It is the packet which a "continue" command in GDB would send to the target. If you get no response, try "+$c#63" instead. The IP and server info comes from BOOTP, which is how this RedBoot will start up if the flash does not contain good config info. % minicom -o ttyS0 $c#63 RedBoot(tm) debug environment - built 07:45:57, Aug 7 2000 Copyright (C) 2000, Red Hat, Inc. RAM: 0x00000000-0x01000000 FLASH: 0x41000000 - 0x41400000, 16 blocks of 0x00040000 bytes ea. IP: 192.168.1.25, Default server: 192.168.1.101 show tcp = 0x00030d48 RedBoot> fi init About to initialize [format] FLASH image system - are you sure (y/n)? y *** Initialize FLASH Image System Warning: device contents not erased, some blocks may not be usable ... Erase from 0x413c0000-0x41400000: . ... Program from 0x00fb0000-0x00fb0400 at 0x413c0000: . 3. Program RedBoot image into FLASH: This expects the file redboot-rom.srec to exist in the TFTP server space on the server that answered the BOOTP request. RedBoot> lo -v redboot-rom.srec -b 0x00100000 Address offset = bf100000 Entry point: 0x41000044, address range: 0x41000000-0x41011384 RedBoot> fi cr RedBoot -f 0x41000000 -b 0x00100000 -l 0x20000 An image named 'RedBoot' exists - are you sure (y/n)? y ... Erase from 0x41000000-0x41020000: . ... Program from 0x00100000-0x00120000 at 0x41000000: . ... Erase from 0x413c0000-0x41400000: . ... Program from 0x00fb0000-0x00ff0000 at 0x413c0000: . RedBoot> ****reset the board here, leaving your terminal program connected**** RedBoot(tm) debug environment - built 07:47:35, Aug 7 2000 Copyright (C) 2000, Red Hat, Inc. RAM: 0x00000000-0x01000000 FLASH: 0x41000000 - 0x41400000, 16 blocks of 0x00040000 bytes ea. IP: 192.168.1.25, Default server: 192.168.1.101 show tcp = 0x000082f0 RedBoot> 4. Install RAM based RedBoot for backup/update: Similar considerations apply: redboot-ram.srec must be an S-record version of RedBoot built for RAM startup. RedBoot> lo -v redboot-ram.srec Entry point: 0x00020044, address range: 0x00020000-0x00030ecc RedBoot> fi cr RedBoot[backup] -f 0x41040000 -b 0x20000 -r 0x20000 -l 0x20000 An image named 'RedBoot[backup]' exists - are you sure (y/n)? y ... Erase from 0x41040000-0x41060000: . ... Program from 0x00020000-0x00040000 at 0x41040000: . ... Erase from 0x413c0000-0x41400000: . ... Program from 0x00fb0000-0x00ff0000 at 0x413c0000: . RedBoot> You have now updated your board completely. Phew! 5. To update RedBoot with a new version of RedBoot, it is necessary to run a RAM-based version of RedBoot which itself re-writes the ROM-based one, because you can't re-write the code that is executing at the time. RedBoot> fi lo RedBoot[backup] RedBoot> g + RedBoot(tm) debug environment - built 07:45:57, Aug 7 2000 Copyright (C) 2000, Red Hat, Inc. RAM: 0x00000000-0x01000000 FLASH: 0x41000000 - 0x41400000, 16 blocks of 0x00040000 bytes ea. IP: 192.168.1.25, Default server: 192.168.1.101 show tcp = 0x00030d48 RedBoot> .. continue with step 3, using whatever your new boot image is called in the TFTP-place, in .srec format. You probably also want to set up then environment with your own IP addresses and so on. Recall that this IP address is the one you use for GDB to talk to the board, not the IP address which the eCos application will take on (by BOOTP/DHCP or whatever means according to configury as usual). RedBoot> fconfig Network debug at boot time: false Use BOOTP for network configuration: false Local IP address: 192.168.1.25 Default server IP address: 192.168.1.101 GDB connection port: 1000 Run script at boot: false RedBoot> Building RedBoot ---------------- To rebuild RedBoot from source, first cut out the attached configuration export file "redboot.RAM" and save it somewhere, say /tmp/redboot.RAM mkdir redboot cd redboot ecosconfig new ebsa redboot ecosconfig import /tmp/redboot.RAM ecosconfig tree make To build the ROM version, in a different build/config directory, just change the startup mode (at the end of the export file) and add an enable of CYGSEM_HAL_ROM_MONITOR, or use the attached config export redboot.ROM. The resulting files will be, in each of the ROM and RAM startup build places: 70456 ..../install/bin/redboot.bin 433104 ..../install/bin/redboot.elf 91407 ..../install/bin/redboot.img 194732 ..../install/bin/redboot.srec The .elf and .srec files have the obvious relationship to those supplied in the "loaders/arm-ebsa285" directory in the install. Here are the redboot.RAM and .ROM configuration exports: =========================== redboot.RAM ===================================== cdl_savefile_version 1; cdl_savefile_command cdl_savefile_version {}; cdl_savefile_command cdl_savefile_command {}; cdl_savefile_command cdl_configuration { description hardware template package }; cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; cdl_configuration eCos { description "" ; hardware ebsa285 ; template redboot ; package -hardware CYGPKG_HAL_ARM current ; package -hardware CYGPKG_HAL_ARM_EBSA285 current ; package -hardware CYGPKG_IO_PCI current ; package -hardware CYGPKG_DEVS_ETH_ARM_EBSA285 current ; package -hardware CYGPKG_IO_SERIAL_ARM_EBSA285 current ; package -hardware CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 current ; package -template CYGPKG_HAL current ; package -template CYGPKG_INFRA current ; package -template CYGPKG_REDBOOT current ; package CYGPKG_IO_FLASH current ; package CYGPKG_IO_ETH_DRIVERS current ; package CYGPKG_DEVS_FLASH_EBSA285 current ; }; cdl_option CYGBLD_BUILD_GDB_STUBS { user_value 0 }; cdl_option CYGDBG_DEVS_ETH_ARM_EBSA285_CHATTER { user_value 0 }; cdl_option CYGNUM_DEVS_ETH_ARM_EBSA285_DEV_COUNT { user_value 1 }; cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { inferred_value 1 }; cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { inferred_value 0 }; cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { user_value 1 }; cdl_option CYGSEM_HAL_USE_ROM_MONITOR { inferred_value 0 0 }; cdl_option CYGBLD_BUILD_REDBOOT { user_value 1 }; cdl_component CYG_HAL_STARTUP { user_value RAM }; =========================== redboot.RAM ===================================== =========================== redboot.ROM ===================================== cdl_savefile_version 1; cdl_savefile_command cdl_savefile_version {}; cdl_savefile_command cdl_savefile_command {}; cdl_savefile_command cdl_configuration { description hardware template package }; cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; cdl_configuration eCos { description "" ; hardware ebsa285 ; template redboot ; package -hardware CYGPKG_HAL_ARM current ; package -hardware CYGPKG_HAL_ARM_EBSA285 current ; package -hardware CYGPKG_IO_PCI current ; package -hardware CYGPKG_DEVS_ETH_ARM_EBSA285 current ; package -hardware CYGPKG_IO_SERIAL_ARM_EBSA285 current ; package -hardware CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 current ; package -template CYGPKG_HAL current ; package -template CYGPKG_INFRA current ; package -template CYGPKG_REDBOOT current ; package CYGPKG_IO_FLASH current ; package CYGPKG_IO_ETH_DRIVERS current ; package CYGPKG_DEVS_FLASH_EBSA285 current ; }; cdl_option CYGBLD_BUILD_GDB_STUBS { user_value 0 }; cdl_option CYGDBG_DEVS_ETH_ARM_EBSA285_CHATTER { user_value 0 }; cdl_option CYGNUM_DEVS_ETH_ARM_EBSA285_DEV_COUNT { user_value 1 }; cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { inferred_value 1 }; cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { inferred_value 0 }; cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { user_value 1 }; cdl_option CYGSEM_HAL_USE_ROM_MONITOR { inferred_value 0 0 }; cdl_option CYGBLD_BUILD_REDBOOT { user_value 1 }; cdl_component CYG_HAL_STARTUP { user_value ROM }; cdl_option CYGSEM_HAL_ROM_MONITOR { user_value 1 }; =========================== redboot.ROM ===================================== [end]
