Beiträge getagged mit sheevaplug
SheevaPlug – Open uboot Update
Wie schon im letzten Artikel über das SheevaPlug, wird auch diesmal wieder das u-boot Image upgedatet.
Nur mit einem Unterschied – wir kompilieren uns die aktuellste Variante selbst. In diesem Artikel wird der Vorgang beschrieben.
Los geht’s!
Die aktuelle u-boot Version auf meinem Plug:
Marvell>> version
U-Boot 1.1.4 (Jul 19 2009 – 16:03:28) Marvell version: 3.4.19
Zuerst muss man die Buildumgebung einrichten. Man benötigt in jedem Fall den GCC für die ARM Architektur. Die Binaries befinden sich innerhalb des SheevaPlug_Host_SWsupportPackageLinuxHost.zip Paket. Entweder man lädt das Paket von hier herunter oder verwendet das von der mitgelieferten CD. In diesem Fall werde ich das Paket von der CD nutzen, denn der Versionsstring auf der genannten Downloadseite zeigt aktuell 1.1.0 (Februar 2009)- auf der CD jedoch befindet sich das Paket in Version 1.2 (April 2009)
Ich entpacke das Paket in welchem sich gcc.tar.bz befindet. Diese Datei entpacke ich nun in den Ordner meiner Wahl, welchen ich anschließend exportieren und für die dauerhafte Verwendung an die PATH Variable in der .bashrc anhänge.
sudo mkdir -p /usr/local/sheevaplug
sudo tar xjf /pfad/zur/gcc.tar.bz2 -C /usr/local/sheevaplug
export PATH=$PATH:/usr/local/sheevaplug/gcc/bin
echo “#SheevaPlug – GCC Pfad” >> ~./bashrc
echo “export PATH=$PATH:/usr/local/sheevaplug/gcc/bin” >> ~/.bashrc
Nach diesem Eingriff sind im Terminal einige Befehle namens arm-none* verfügbar.
Jetzt müssen noch ein paar Dinge installiert werden, nämlich git-core und openocd. Das ist schnell erledigt mit
sudo aptitude install openocd git-core
Einen TFTP Server benötigt man für die spätere Installation, Putty oder cu für den seriellen Zugriff. Diese Dinge setze ich jetzt einfach mal voraus.
Jedenfalls ist jetzt das Benötigte beisammen und das Cross Compilen, wie man so schön sagt, kann beginnen.
Ich lege mir nun einen Ordner an und lade die Open U-Boot Sourcen runter wie auf der Seite beschrieben.
mkdir -p ~/.sheevaplug/open-uboot
cd ~/.sheevaplug/open-uboot
git clone git://git.denx.de/u-boot-marvell.git u-boot-marvell.git
Die Ausgabe von git quittiert den Download
remote: Counting objects: 107270, done.
remote: Compressing objects: 100% (20780/20780), done.
remote: Total 107270 (delta 87565), reused 105564 (delta 85876)
Receiving objects: 100% (107270/107270), 30.94 MiB | 1.61 MiB/s, done.
Resolving deltas: 100% (87565/87565), done.
Checking out files: 100% (6386/6386), done.
Nun wechsel ich in den von git erstellten Ordner und führe einen Checkout durch
cd u-boot-marvell.git
git checkout -b testing origin/testing
welcher ebenfalls quittiert wird
Branch testing set up to track remote branch testing from origin.
Switched to a new branch ‘testing’
Jetzt kommt das eigentliche Cross Compilen… saubermachen, config erstellen & compilen!
make mrproper
make sheevaplug_config
make u-boot.kwb CROSS_COMPILE=arm-none-linux-gnueabi-
Der Wert von CROSS_COMPILE orientiert sich an dem Namen der neuen ARM GCC in /usr/local/sheevaplug/gcc/bin, hier heißen alle Dateien so, auch der gcc.
Der Kompiliervorgang ist schnell erledigt und präsentiert uns auch gleich das Ergebnis
Preparing kirkwood boot image to boot from nand
Nand ECC mode = default
Nand page size = 0×800
Image Type: Kirkwood Boot from NAND Flash Image
Data Size: 174124 Bytes = 170.04 kB = 0.17 MB
Load Address: 00600000
Entry Point: 00600000
Wie in dem zu Beginn erwähnten Artikel zu lesen ist, wird jetzt testweise das ELF Image hochgeladen und getestet ob es auch funktioniert.
file u-boot*
zeigt, welche Datei benutzt werden muss
Nun werden 3 Terminalfenster benötigt:
In Fenster 1 wird nun openocd gestartet, den auf der Seite genannten Pfad musste ich dazu anpassen.
sudo openocd -f /usr/share/openocd/scripts/board/sheevaplug.cfg
Es steht folgendes im Fenster 1:
Open On-Chip Debugger 0.3.1 (2009-11-25-12:22)
$URL$
For bug reports, readhttp://openocd.berlios.de/doc/doxygen/bugs.html
2000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
jtag_nsrst_delay: 200
jtag_ntrst_delay: 200
dcc downloads are enabled
Warn : use ‘feroceon.cpu’ as target identifier, not ’0′
Info : clock speed 2000 kHz
Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3 (mfg: 0x1e9, part: 0x0a02, ver: 0×2)
Info : Embedded ICE version 0
In Fenster 2 verbinde ich mich wie gewohnt über /dev/ttyUSB0
cu -s 115200 -l /dev/ttyUSB0
In Fenster 3 starte ich eine Telnetsession, der Verbindungsaufbau wird in Fenster 1 quittiert.
telnet localhost 4444
Dann wollen wir mal…
In Fenster 3, also der Telnetsitzung, werden nun folgende Befehle abgesetzt
sheevaplug_init
load_image /pfad/zur/kopilierten/elfdatei/u-boot
resume 0×00600000
Nach absetzen des letzten Befehls bootet das Gerät neu mit der selbstkompilierten u-boot wie man in Fenster 2 beobachten kann. Hier erkundige ich mich gleich nach der Version – schaut gut aus!
Marvell>> version
U-Boot 2009.11-00922-g1103196 (Feb 19 2010 – 13:36:10)
Marvell-Sheevaplug
Fenster 3 beende ich mit “exit”, Fenster 1 wird mit Strg+C beendet und anschließend in Fenster 2 ein “reset” eingetippt.
SheevaPlug bootet dann wieder mit dem installierten u-boot.
Im letzten Schritt will ich die selbstkompilierte Version auf den Speicher installieren. Dazu geht man ahnlich vor wie im ersten u-boot Update Artikel. Zuerst muss die kompilierte u-boot.kwb (also NICHT die elf-binary!!) ins TFTP Verzeichnis kopiert und der Updatevorgang wie gehabt durchgeführt werden.
In der Kürze auf der SheevaPlug:
Marvell>> setenv ipaddr 192.168.254.39
Marvell>> setenv serverip 192.168.254.108
Marvell>> tftp 0×6400000 u-boot.kwb
Using egiga0 device
TFTP from server 192.168.254.108; our IP address is 192.168.254.39
Filename ‘u-boot.kwb’.
Load address: 0×6400000
Loading: ###################################
done
Bytes transferred = 174640 (2aa30 hex)
Marvell>> nand erase 0×0 0×40000
NAND erase: device 0 offset 0×0, size 0×40000
Erasing at 0×20000 — 100% complete.
OK
Marvell>> nand write 0×6400000 0×0 0×40000
NAND write: device 0 offset 0×0, size 0×40000
262144 bytes written: OK
Marvell>> reset
Nun bootet die SheevaPlug neu und ich kontrolliere den Erfolg
Marvell>> version
U-Boot 2009.11-00922-g1103196 (Feb 19 2010 – 13:36:10)
Marvell-Sheevaplug
Sehr schön!
SheevaPlug – uboot Update
Wie schon angekündigt dokumentiere ich hier die Aktionen mit der Sheevaplug.
Auf meinem Squeeze System mit derzeit aktivem 2.6.30-2-686 Kernel wird die Kiste sofort erkannt und das Device /dev/ttyUSB0 wird erstellt.
Um das Device zu verwenden, sollte man in der Systemgruppe dialout sein. Wer das nicht ist, kann sich als root der Gruppe via
adduser $USER dialout
hinzufügen. Sollte das notwendig sein, muss man sich am System ab- und wieder anmelden. Erst dann ist die Modifikation aktiv und kann mit dem Befehl “id” auf der Konsole geprüft werden.
Es bestehen nun mehrere Möglichkeiten zu dem Device zu connecten. Putty oder cu stehen auf jedenfall zur Wahl. Ich entscheide mich für cu welches schnell via aptitude installiert ist.
Die Verbindung kann dann über
cu -s 115200 -l /dev/ttyUSB0
hergestellt werden. Leider sieht man hier die wunderschöne ASCII Grafik nicht richtig
__ __ _ _
| / | __ _ _ ____ _____| | |
| |/| |/ _` | ‘__ / / _ | |
| | | | (_| | | V / __/ | |
|_| |_|__,_|_| _/ ___|_|_|
_ _ ____ _
| | | | | __ ) ___ ___ | |_
| | | |___| _ / _ / _ | __|
| |_| |___| |_) | (_) | (_) | |_
___/ |____/ ___/ ___/ __|
** MARVELL BOARD: SHEEVA PLUG LEU-Boot 1.1.4 (Mar 19 2009 – 16:06:59) Marvell version: 3.4.16
U-Boot code: 00600000 -> 0067FFF0 BSS: -> 006CEE80
Soc: 88F6281 A0 (DDR2)
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200MhzDRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6
DRAM CS[0] base 0×00000000 size 256MB
DRAM CS[1] base 0×10000000 size 256MB
DRAM Total size 512MB 16bit width
Flash: 0 kB
Addresses 8M – 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M – 7M): Done
NAND:512 MBCPU : Marvell Feroceon (Rev 1)
Streaming disabled
Write allocate disabledUSB 0: host mode
PEX 0: interface detected no Link.
Net: egiga0 [PRIME], egiga1
Hit any key to stop autoboot: 0
Marvell>>
An dieser Stelle sollte man zügig irgendeine Taste drücken, sonst bootet die Kiste in das vorinstallierte System.
Nun ist man auf der Marvell Commandline. Über
help
kann man sich die verfügbaren Kommandos anzeigen lassen.
Wichtig ist die uboot Version die man sich mit dem Befehl
version
ausgeben lassen kann.
Meine Kiste gibt mir folgende Ausgabe:
U-Boot 1.1.4 (Mar 19 2009 – 16:06:59) Marvell version: 3.4.16
Ein dringendes Update auf 3.4.19 ist erforderlich – mit dieser Version wurde die FAT32 Unterstützung verbessert.
Für das Update gibt es auch wieder mehrere Möglichkeiten – entweder über TFTP oder über USB. Ich nutze die USB Variante und formatiere deshalb mit gparted einen 1GB Stick mit FAT32.
Über die Marvellkonsole will ich nun, wie auf dieser Seite beschrieben, die notwendigen Schritte durchführen. Leider jedoch wird “usb start” schon wie folgt quittiert.
Marvell>> usb start
(Re)start USB…
USB: scanning bus for devices… 2 USB Device(s) found
scanning bus for storage devices… Device NOT ready
Request Sense returned 00 00 00
0 Storage Device(s) found
Auch mehrere “reset” bringen keine Besserung. Die installierte uboot Version scheint tatsächlich etwas buggy zu sein oder der Noname Stick wird schlichtweg verpöhnt.
Also fluchs einen anderen Stick (Kingston – 1GB) ausprobiert – und wird wenigstens auf Anhieb gefunden
Marvell>> usb start
(Re)start USB…
USB: scanning bus for devices… 2 USB Device(s) found
scanning bus for storage devices… 1 Storage Device(s) found
Das ist aber auch nicht immer der Fall wie ich eben durch ein erneutes “reset” feststellen musste.
Als wenn das nicht genug wäre, schockt mich auch noch folgende Meldung:
Marvell>> fatload usb 0:1 0×0800000 uboot.bin
reading uboot.bin
Invalid FAT entry
4096 bytes read
Vielleicht sollte man doch die auf der Anleitungsseite empfohlene TFTP Variante wählen. Nun gut, einen Versuch war es Wert würde ich sagen – hätte ja auch klappen können *ggg*
Also installier ich mir auf die schnelle einen TFTP Server via
sudo aptitude install tftpd-hpa
und definiere das Verzeichnis /opt/tftp welches auch selbstständig angelegt wird.
Hier kopiere ich jetzt die Datei u-boot.bin-3.4.19 rein und entpacke diese dort. uboot.bin liegt nun also an der vorgesehenen Stelle.
Nun folge ich den Anweisungen der genannten Seite und siehe da:
Marvell>> setenv serverip 192.168.222.14
Marvell>> setenv ipaddr 192.168.222.88
Marvell>> bubt uboot.bin
Using egiga0 device
TFTP from server 192.168.222.14; our IP address is 192.168.222.88
Filename ‘uboot.bin’.
Load address: 0×2000000
Loading: #################################################################
############################
done
Bytes transferred = 473888 (73b20 hex)**Warning**
If U-Boot Endiannes is going to change (LE->BE or BE->LE), Then Env parameters should be overriden..
Override Env parameters? (y/n) y
Erase Env parameters sector 655360…
Erase 0 – 655360 …
Copy to Nand Flash…
done
Dieses Fest quittiere ich natürlich mit einem “reset” und warte gespannt.
Ergebnis: Der Reset geht gefühlt doppelt so schnell und folgende Version erwartet mich
Marvell>> version
U-Boot 1.1.4 (Jul 19 2009 – 16:03:28) Marvell version: 3.4.19
Geschafft! Bestens!
Fazit: Nächstes Mal sofort die TFTP Variante nutzen!
SheevaPlug Development Kit
Ich habe mir am Wochenende voller Vorfreude das SheevaPlug Development Kit bestellt – und tatsächlich – jetzt halte ich es in meinen Händen.
Nun, was ist das eigentlich?
Die dazugehörige Meldung auf Heise verschafft sicher schnell Klarheit. Ein Rechner mit ARM Prozessor in der Größe eines Trafos.
Bestellt habe ich dieses Gerät bei DuregExpress, dort ist es aber aktuell vergriffen. Bald wird noch der große Bruder GuruPlug verfügbar sein – wann genau kann aber noch keiner sagen. Deshalb begnüge ich mich vorab mit diesem Gerät, welches ja im Prinzip baugleich ist. Ein paar Features fehlen halt noch, was solls!
Ausgeliefert wird dieses Gerät mit Ubuntu Jaunty, welches sich auf dem internen NAND Speicher befindet. Im ersten Schritt werde ich dieses durch ein Debian Squeeze ersetzen und im nächsten Schritt als Router einsetzen. Schritt Null wird das Update des installierten uboot Images sein – das ausgelieferte Gerät beherbergt noch eine alte Version welche unbedingt zuerst ersetzt werden muss.
In nächster Zeit werdet Ihr hier wahrscheinlich vermehrt kleine Anleitungen für die Installation und Konfiguration hier finden – aber jetzt warten wir mal ab.
Zur Komplettierung noch ein paar Seiten rund ums Thema “Sheevaplug”:
plugcomputer.org – Hier gibt es ein reichhaltiges Forum und Wiki

Letzte Kommentare