diff 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 diff
new file mode 100644
--- /dev/null
+++ b/packages/redboot/current/doc/redboot.ebsa285
@@ -0,0 +1,409 @@
+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]