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 = 0x800
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, read
http://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: 0x2)
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 0x00600000

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 0x6400000 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: 0x6400000
Loading: ###################################
done
Bytes transferred = 174640 (2aa30 hex)
Marvell>> nand erase 0x0 0x40000
NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x20000 — 100% complete.
OK
Marvell>> nand write 0x6400000 0x0 0x40000
NAND write: device 0 offset 0x0, size 0x40000
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!

, ,

  1. #1 von Dietmar am 24. Mai 2010 - 20:15

    Ich bekomme das ganze nicht hin.
    Beim

    make u-boot.kwb …..

    erzählt er mir daß er den gcc nicht findet.
    Ich dachte er soll gar nicht gcc sondern den arm-none-linux-gnueabi-gcc nehmen. Hast du eine Idee was hier falsch läuft?

  2. #2 von conzul am 25. Mai 2010 - 12:15

    Hallo Dietmar,
    sitzt deine Pfadvariable richtig? Die Befehle beginnend mit arm-none-linux-gnueabi- sollten in einem Terminal zur Verfügung stehen.
    Vllt auch heißen deine gcc-Dateien etwas anders – dann musst du den CROSS_COMPILE Wert entsprechend anpassen.
    Du könntest auch den Pfad zum arm-gcc mit dem Wert CC= angeben.
    –> make uboot.kwb CC= CROSS_COMPILE=
    Hab ich zwar noch nicht versucht, könnte aber klappen.
    Viel Erfolg!

  3. #3 von Dietmar am 25. Mai 2010 - 12:44

    Hallo conzul,

    ich habe kein Glück damit, ich vermute mir fehlt etwas, wobei es warscheinlich das Wissen ist 🙂

    Die Befehle amr-none-linux-gnueabi- sind verfügbar.
    Sobalr ich arm- und 2xtab drücke kommt die Liste der verfügbaren Befehle. Also mein Pfad sollte passen.
    Du schreibst ich soll den arm-gcc via CC= angeben. Auch das habe ich probiert, geht nicht.
    Benötige ich neben dem arm-none-linux-gnueabi-gcc auch den normalen gcc also die build-essentials?
    Die habe ich absichtlich noch nicht damit kein fascher gcc verwendet wird.

  4. #4 von conzul am 25. Mai 2010 - 15:47

    Also die Buildessentials und was ich auch sonst zum normalen Kompilieren irgendwelcher Applikationen benötige, ist bei mir alles installiert. Könnte also sein dass es an dem Fehlen dieser Dinge liegt. Sonst scheint bei dir ja soweit alles i.O. zu sein.

    Eines solltest du wissen: Die Firmware ist bei mir eigentlich gleich wieder runter geflogen weil sie einiges an Befehlen (im Vergleich mit Originalfirmware) nicht mitbringt (evtl hat sich das ja auch geändert – ich sollte einfach auch mal wieder eine erstellen).
    Ich habe das hier einfach mal zum Spass gemacht – um zu sehen obs was taugt oder eben mehr kann.

    Solltest du also nicht DRINGEND die OpenBoot Frmware benötigen – kannst du dir eigentlich die Mühe sparen. my2cents

(wird nicht veröffentlicht)