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!

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 LE

U-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 = 200Mhz

DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6
DRAM CS[0] base 0x00000000 size 256MB
DRAM CS[1] base 0x10000000 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 MB

CPU : Marvell Feroceon (Rev 1)

Streaming disabled
Write allocate disabled

USB 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 0x0800000 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: 0x2000000
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! 😉

Manual – U-Boot Commands

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“:

Debian on SheevaPlug

plugcomputer.org – Hier gibt es ein reichhaltiges Forum und Wiki

plugcomputer.eu

sheevaplug.de

OCR for Free

Wer für Windows ein taugliches OCR Programm sucht, wird bei FreeOCR wahrscheinlich fündig. Dieser Programm setzt auf dem OpenSource (Google)Produkt „tesseract“ auf, welches auch für Linux verfügbar ist. Wenn ich mich nicht täusche, wird tesseract für die professionelle Digitalisierung von Büchern eingesetzt. Das Programm FreeOCR selbst benötigt die .NET 2.0 Umgebung und lädt diese, wie auch alle anderen Bestandteile selbst aus dem Netz herunter.
Die Handhabung und vor allem die Erkennungsrate ist enorm wie ich finde.
Viel Spass beim Scannen!

Groovebox – MC-303

Die nächste Zeit kann ich eine MC-303 mein Eigen nennen, ein Freund leiht mir für geraume Zeit dieses Schmuckstück.

Während meiner Jugend konnte ich mit einer solchen Kiste meine ersten Gehversuche absolvieren. Das hat definitiv immer Spass gebracht!

Leider liegt keine Anleitung vor, daher hab ich mich mal auf die Suche gemacht und die folgenden PDFs gefunden.
Ich lege diese Dokumente hier ab, hauptsächlich damit ich diese selbst bei Bedarf finde!!

MC-303 – Owners Manual
MC-303 – Turbostart
MC-303 – Advanced Midi Programming
MC-303 – System Exclusiv Messages

Debian Squeeze – Wammu startet nicht

Eben wollte ich das erste Mal den Telefonmanager Wammu verwenden. Ein Klick auf die installierte Applikation im Menu bringt jedoch kein Programm zum Vorschein, besser gesagt es tut sich nichts… merkwürdig!

Ein beherzter Programmstart in einem Terminal bringt Klarheit dank der dortigen Fehlermeldung.

Traceback (most recent call last):
File „/usr/bin/wammu“, line 176, in
import Wammu.App
File „/usr/lib/pymodules/python2.5/Wammu/App.py“, line 28, in
import Wammu.Main
File „/usr/lib/pymodules/python2.5/Wammu/Main.py“, line 58, in
import Wammu.Editor
File „/usr/lib/pymodules/python2.5/Wammu/Editor.py“, line 36, in
import Wammu.Data
File „/usr/lib/pymodules/python2.5/Wammu/Data.py“, line 28, in
from gammu.Data import Connections, MemoryValueTypes, CalendarTypes, CalendarValueTypes, TodoPriorities, TodoValueTypes, InternationalPrefixes
File „/usr/lib/python2.5/site-packages/gammu/__init__.py“, line 39, in
from gammu._gammu import *
ImportError: No module named _gammu

Nach kurzer Recherche (dpkg -S /usr/lib/python2.5/site-packages/gammu/) war klar – den Ordner /usr/lib/python2.5/site-packages/gammu/ gibt es unter Debian Squeeze gar nicht.
Auf meinem System jedoch existiert dieser.
Das hat einen einfachen Grund: Es sind Restbestände von einem Upgrade – mein System wurde im Laufe der Releases von Etch über Lenny auf Squeeze gezogen.

Um das Problem also zu lösen, muss nur der genannte Ordner gelöscht werden (sudo rm /usr/lib/python2.5/site-packages/gammu) – schon verrichtet Wammu ohne Murren seinen Dienst!

Dieser Bugreport brachte die Lösung!

Virtualbox 3.1.2 – Auflösungsprobleme

Seit einiger Zeit habe ich auf meinem Debian Squeeze System Virtualbox in der Version 3.1.2 in Betrieb um einen WinXP Gast zu hosten. Witzigerweise konnte nach einem Update von Virtualbox mein Gast nicht mehr im Vollbild dargestellt werden sondern blieb bei maximal 800 mal 600. Eine Neuinstallation des GuestAdditions brachte keine Besserung!
Da ich das System nur sporadisch in Verwendung habe und auf Anhieb keine Lösung fand, habe ich es der Einfachheit halber hingenommen.
Heute war mal wieder ein Tag an dem mich die bescheidene Auflösung immens bei der Arbeit behinderte und ich mich über meine native Auflösung von 1366 mal 786 freuen würde

Endlich begab ich mich mal auf die Homepage des Herstellers und fand dort auch prompt die Lösung.
Da ich einen Tickless Kernel im Betrieb habe, musste ich die dort beschriebene Moduloption ausprobieren. Und siehe da, sie funktioniert! Die Anzeigeeinstellung zeigt mir nun 1360×768 an – Bestens!

Für dauerhaften Einsatz habe ich nun
/etc/modprobe.d/vbox.conf
mit folgendem Inhalt erstellt:

options vboxdrv force_async_tsc=1

Was lernt man daraus? Manchmal sollte man sich doch einfach gleich die nötigen 10 Minuten nehmen… Happy Vbox!

Openmeetings 1.1 Präsentation

Wer produktiv Videoconferencing einsetzen will, wird zweifelsohne Openmeetings in die engere Wahl nehmen.

Der Coreentwickler des Produktes und guter Freund des Hauses hat kürzlich die Features seines Systems komprimiert in ein Demovideo gepackt welches bei Youtube zu finden ist.

Aber schaut selbst…

httpvh://www.youtube.com/watch?v=5a7-HFm8Ghs

Python Audio Fehler

Eben wollte ich mal wieder Fretsonfire auf meinem Squeeze-System starten. Allerdings blieb der Start ohne Erfolg.
Ein Start von fretsonfire in einem Terminal brachte folgenden Fehler ans Licht:

pygame.error: No available audio device

Es fehlt schlicht die richtige „Simple DirectMedia Layer“ Schicht.
Auf meinem Squeeze System genügte ein Nachinstallieren der richtigen Simple DirectMedia Layer – Komponente.

sudo aptitude install libsdl1.2debian-alsa

und fretsonfire war wieder Einsatzbereit!

Solltet Ihr ein anderes Soundsystem (zB Pulseaudio) verwenden, dann sucht mittels aptitude oder synaptic nach libsdl. Es sollte für jedes Soundsystem ein entsprechendes Paket zur Verfügung stehen!