Anleitung zum Flashen von U-Boot auf den PowerPC-CPUs

CPU87

  1. Board über serielles Terminal starten, Boot-Prozess anhalten.
  2. Herausfinden der Mac-Addresse: Mit
     => printenv ethaddr  
    die Variable ethaddr (MAC-Addresse) auslesen (Achtung, nicht ethaddr1!) und notieren. Diese muß dann mit dem Namen des Boards (von der Netzwerkgruppe) im DHCP- und Nameserver eingetragen werden.
  3. Mit dem Befehl printenv die aktuelle Konfiguration anzeigen, hierbei folgende Variablen notieren
    ( Wichtig: Nach dem Flashen von einer älteren Version sind diese Werte weg!):
    • ethaddr
    • ethaddr1
    • serial#
  4. Um das neue U-Boot zu laden ist es am einfachsten wenn das Board schon im DHCP eingetragen ist. Alle wichtigen Informationen kann es sich dann vom DHCP-Server mit dem Kommando .
    => dhcp oder
    => bootp 

    holen. Ansonsten müssen die Variablen serverip und ipaddrgesetzt werden.
    => setenv ipaddr (Board-IP-Adresse)
    => setenv serverip 140.181.132.60
  5. U-Boot laden (Bitte bei der Netzwerkgruppe das aktuel gültige U-Boot erfragen; unten aufgeführtes U-Boot war im Januar 2013 gültig):
    => tftp 100000 CPU87/u-boot-1.3.3-cpu87-20110225.bin
    hiernach erscheint eine Meldung =Bytes transferred  (z.B. 213460 (341d4 hex) 
    je nach Größe des U-Boots auf dem server))
  6. Prüfen, ob U-Boot mit den richtigen Bytes anfängt:
    => md 100000 20  
    muss beginnen mit:
    00100000: 06060606 06060606 04040404 04040404 ................
    00100010: 80808080 80808080 40404040 40404040 ........@@@@@@@@ 
    00100020: 00000000 00000000 00000000 00000000 ................ 
  7. Mit dem Befehl flidie Informationen über Flash-Banke anzeigen:
    => fli
    
    
    Bank # 1: INTEL 28F160C3B (16 Mbit, bottom sector)
    Size: 8 MB in 39 Sectors
    Sector Start Addresses:
    FF000000 FF008000 FF010000 FF018000 FF020000
    FF028000 FF030000 FF038000 FF040000 FF080000
    FF0C0000 FF100000 FF140000 FF180000 FF1C0000
    FF200000 FF240000 FF280000 FF2C0000 FF300000
    FF340000 FF380000 FF3C0000 FF400000 FF440000
    FF480000 FF4C0000 FF500000 FF540000 FF580000
    FF5C0000 FF600000 FF640000 FF680000 FF6C0000
    FF700000 FF740000 FF780000 FF7C0000
     
    Bank # 2: AMD AM29F040B (4 Mbit)
    Size: 512 KB in 8 Sectors
    Sector Start Addresses:
    FF800000 (RO) FF810000 (RO) FF820000 (RO) FF830000 FF840000
    FF850000 FF860000 FF870000 
  8. Ab der Adresse FF800000 beginnt der Bereich des U-Boot im EEPROM. Dieser ist derzeit geschützt (RO). Daher muss dieser erst entsperrt werden:
    => protect off ff800000 ff83ffff
    , es erscheint
    Un-Protected 4 sectors
  9. Ab jetzt wird es ernst! Die folgenden Schritte müssen bis zum reset komplett durchgeführt werden, sonst bootet das Board nicht mehr.
    => erase ff800000 ff83ffff
    , es erscheint
    Erased 4 sectors
  10. Kopieren des neuen U-Boot ins EEPROM:
     => cp.b 100000 ff800000 40000  
  11. U-Boot im RAM und ROM vergleichen:
    => cmp.b 100000 ff800000 40000
    , es erscheint
    Total of 262144 bytes were the same
  12. Board neu starten mit reset (SW oder HW-reset möglich), Bootvorgang mit Tastendruck stoppen
  13. printenv, die Variablen ethaddr und ethaddr1 überprüfen und evtl. neu setzen.
  14. => setenv ethaddr ...
    und
    => setenv ethaddr1 ...
    , z.B.
    => setenv ethaddr 00:40:42:01:XX:XX
  15. Setzen der Seriennr., z.B.
    => setenv serial# 285500059 
    (falls man vergessen hat, diese Nr. zu notieren, sie befindet sich auch auf dem Board auf einem Barcode-Aufkleber im Bereich der VME-Steckverbindung)
  16. Alle unnötigen Bootvariablen löschen, wie z. B.:
    
    => setenv ipaddr
    => setenv serverip
    => setenv preboot
    => setenv loads_echo
    => setenv loadaddr 200000
    => setenv ramargs
    => setenv flash_nfs
    => setenv flash_self
  17. Zum Schluss sieht das Boot-Environment so aus:
     => printenv
    bootdelay=5
    ethact=FCC1 ETHERNET
    ethaddr=00:40:42:01:54:XX
    eth1addr=00:40:42:01:54:XX
    serial#=285500049
    baudrate=19200 oder 9600
    loadaddr=200000
    netdev=eth0
    stdin=serial
    stdout=serial
    stderr=serial
  18. Weitere nötige Bootkommandos setzen:
    => setenv console 'console=ttyCPM2,19200'
    => setenv bootcmd 'dhcp; run setup_nfsargs setup_ipargs setup_bootargs; bootm'
    => setenv setup_nfsargs 'setenv nfsargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath)'
    => setenv setup_ipargs 'setenv ipargs ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):
                    $(hostname):eth0:off panic=1'
    => setenv setup_bootargs 'setenv bootargs $(console) $(nfsargs) $(ipargs)'
  19. Umstellen der Baudrate des PPC-Boards auf 19200 und Baudrate am Terminalserver auf 19200 umstellen:
     => setenv baudrate 19200 
    ## Switch baudrate to 19200 bps and press ENTER ... 
  20. Achtung! Die setenv Befehle müssen jeweils als eine einzelne Zeile abgesetzt werden (auch wenn obige Befehle in der Browser-Darstellung evtl. umgebrochen werden). Beim Setzen der Variable unbedingt auf die einzelnen Anführungsstriche (keine doppelten!) achten! Bitte unbedingt vor dem Abspeichern der Umgebungsvariablen, mit printenv kontrollieren, ob die Variablen korrekt gesetzt wurden. Die Anführungsstriche bei den Variablen werden von printenv nicht mehr angezeigt.

    Wenn die Variablen richtig gesetzt wurden, muss die Konfiguration mit saveenv abgespeichert werden, sonst sind die Werte nach dem nächsten Reboot weg!

    => printenv    , falls korrekt:  
    => saveenv  
  21. Ist das Board im dhcp bekannt, dann nochmals den Reset-Tastschalter des PowerPC's betätigen. Wenn alles in Ordnung ist, meldet sich dieser nun mit seinem Namen und einem Prompt mit der Aufforderung zum Einloggen. Die serielle Verbindung kann nun mit Beenden der Power-Term-Sitzuung geschlossen werden. (disconnect)

CU824

Bei der CU824 sind einige Dinge anders, da diese zwei Flash-Banke und kein ROM besitzt.

Daher sieht die Ausgabe von fliwie folgt aus:
Bank # 1: Intel: 28F160F3B (16Mbit)
  Size: 8 MB in 39 Sectors
  Sector Start Addresses:
    FF000000      FF008000      FF010000      FF018000      FF020000    
    FF028000      FF030000      FF038000      FF040000      FF080000    
    FF0C0000      FF100000      FF140000      FF180000      FF1C0000    
    FF200000      FF240000      FF280000      FF2C0000      FF300000    
    FF340000      FF380000      FF3C0000      FF400000      FF440000    
    FF480000      FF4C0000      FF500000      FF540000      FF580000    
    FF5C0000      FF600000      FF640000      FF680000      FF6C0000    
    FF700000      FF740000      FF780000      FF7C0000    

Bank # 2: Intel: 28F160F3B (16Mbit)
  Size: 8 MB in 39 Sectors
  Sector Start Addresses:
    FF800000      FF808000      FF810000      FF818000      FF820000    
    FF828000      FF830000      FF838000      FF840000      FF880000    
    FF8C0000      FF900000      FF940000      FF980000      FF9C0000    
    FFA00000      FFA40000      FFA80000      FFAC0000      FFB00000    
    FFB40000      FFB80000      FFBC0000      FFC00000      FFC40000    
    FFC80000      FFCC0000      FFD00000      FFD40000      FFD80000    
    FFDC0000      FFE00000      FFE40000      FFE80000      FFEC0000    
    FFF00000 (RO) FFF40000      FFF80000      FFFC0000 (RO)

Hier befindet sich das U-Boot im schreibgeschützten Bereich FFF00000 bis FFF3FFFF.

Bei der CU824 gibt es nur die Möglichkeit, im Falle eines kaputten U-Boot per Lötbrücke die beiden Flash-Banke zu vertauschen und von der anderen zu Booten, wenn dort eine Kopie des alten U-Boot liegt.

Diese Kopie wird zunächst wie folgt angelegt:
=> erase ff700000 ff73ffff
. done
Erased 1 sectors

=> cp.b fff00000 ff700000 40000
Copy to Flash... done

=> cmp.b fff00000 ff700000 40000
Total of 262144 bytes were the same

Nun kann das neue U-Boot eingespielt werden, sobald das Board IP-Adresse, Server-IP und Netmask hat (s.o.):
tftp 100000 UBOOT/u-boot-1.3.3-cu824.bin
TFTP from server ...; our IP address is ...
Filename '...'.
Load address: 0x100000
Loading: ####################################
done
Bytes transferred = 191324 (2eb5c hex)

Nun wird der Schreibschutz des Bootbereichs aufgehoben, dieser gelöscht, das soeben geladene U-Boot hinkopiert und dann verglichen.
=> protect off fff00000 fff3ffff
Un-Protected 1 sectors
=>

=> erase fff00000 fff3ffff
. done
Erased 1 sectors
=>

=> cp.b 100000 fff00000 40000
Copy to Flash... done

=> cmp.b 100000 fff00000 40000
Total of 262144 bytes were the same

Falls all dies erfolgreich war, kann nun mit reset neu gebootet werden.

Nach dem Reset müssen dann folgenden Einstellungen durchgeführt werden:
setenv BASEDIR /common/usr/eldk-4.2
setenv nfsargs 'setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${BASEDIR}/${hostname}'
setenv showbootargs 'echo booting with hostname ${hostname}; echo using bootargs ${bootargs}'
setenv bootcmd 'bootp; run nfsargs addip addtty; run showbootargs; bootm'

Die Variable hostnamedarf nicht gesetzt sein! Zum Löschen den Inhalts
setenv hostname

Dann mit saveenv die Einstellungen speichern.
Topic revision: r17 - 25 Jan 2013, ReginePfeil
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback