Anleitung zum Flashen von U-Boot auf den PowerPC-CPUs
CPU87
- Board über serielles Terminal starten, Boot-Prozess anhalten.
- 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.
- Mit dem Befehl
printenv
die aktuelle Konfiguration anzeigen, hierbei folgende Variablen notieren
( Wichtig: Nach dem Flashen von einer älteren Version sind diese Werte weg!):
- 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
- 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))
- 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 ................
- 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
- 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
- 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
- Kopieren des neuen U-Boot ins EEPROM:
=> cp.b 100000 ff800000 40000
- U-Boot im RAM und ROM vergleichen:
=> cmp.b 100000 ff800000 40000
, es erscheint Total of 262144 bytes were the same
- Board neu starten mit
reset
(SW oder HW-reset möglich), Bootvorgang mit Tastendruck stoppen
-
printenv
, die Variablen ethaddr
und ethaddr1
überprüfen und evtl. neu setzen.
-
=> setenv ethaddr ...
und => setenv ethaddr1 ...
, z.B.
=> setenv ethaddr 00:40:42:01:XX:XX
- 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)
- 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
- 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
- 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)'
- 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 ...
-
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
- 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.