Ubuntu auf's SheevaPlug
Fri, 08 Jan 2010
Hä, aber da ist doch schon ein Ubuntu drauf, oder?
Ja, das stimmt so.
Allerdings ist das vorinstallierte Ubuntu der schlechteste Ausgangspunkt, den man sich wohl denken könnte:
- alter, unvollständiger U-Boot Loader
- alter, langsamer Kernel
- misskonfiguriertes Ubuntu
- sehr langsames Filesystem JFFS2
Das Gute ist: Es gibt ein Tool, da macht man quasi zwei Klicks, und schon sind alle genannten Punkte in einem Rutsch erledigt.
Im Schnelldurchlauf
1. SheevaPlug Installer herunterladen. 2. Entpacken und Terminal und ./README.txt öffnen, kurz lesen. 3. "openocd" benötigt (in Ubuntu Quellen). Arch Linux hat es im AUR (openocd-git-libftdi) 4. USB Stick (/mnt/disk) fat32 formatieren (mkfs.msdos) und die Dateien unterhalb von "Installer" nach /mnt/disk/ kopieren 5. "sudo php ./runme.php nand" und warten (php/php5-cli package wird gefordert) 6. Warten und nach ~5-10 Minuten via "ssh root@192.168.0.123" - pass: nosoup4u
HowTo
Vorbereitungen
Benötigt wird:
- SheevaPlug Installer (extern)
- Ubuntu/Debian Linux oder was vergleichbares
- nativ / virtuell via VirtualBox : Ubuntu 9.10 VDI
(user: ubuntu pass: reverse)
Wichtig: VirtualBox mit USB Unterstützung (also nicht PUEL)
- nativ / virtuell via VirtualBox : Ubuntu 9.10 VDI
(user: ubuntu pass: reverse)
- USB Stick > 200 MB
Achtung: Muss formatiert werden! - SheevaPlug (jetzt wirklich) und das Kabel für die serielle Schnittstelle
Durchführung
Der Einfachheit halber beschreibe ich ausschließlich den Weg für Ubuntu (9.*) in VirtualBox, sodass auch Mac- und Windows-User diese Anleitung verfolgen können.
Ich selber habe es mit Arch Linux ebenfalls hinbekommen; mit Debian sollte die Installation auch funktionieren. Man müsste das halt nur adaptieren und für seine Distribution leicht anpassen.
startet Linux und stöpselt das SheevaPlug schon mal auf 'ne Steckdose und verbindet es mit dem seriellem Kabel.
sudo apt-get install minicom libftdi libftdi-dev openocd php5-cli
USB-Stick anstöpseln und via Geräte -> USB-Geräte -> $Modell zum Gast durchleiten.
Formatieren des Sticks mit fat32:$ sudo umount /media/usbstick # falls gemountet $ sudo mkfs.msdos /dev/sdb1 # je nach eigenen Geräten $ sudo mount /dev/sdb1 /mnt
Entpackt sheevaplug-installer-v1.0.tar.gz und geht in das Verzeichnis sheevaplug-installer-v1.0.
$ ubuntu@ubuntu-desktop:~/Downloads$ cd sheevaplug-installer-v1.0/ $ sudo cp ./installer/* /mnt/ $ umount /mnt/
Nehmt den USB-Stick und steckt ihn ans SheevaPlug.
Nun geht's ans Flashen via JTAG. Es unnötig zu sagen, dass alle Daten auf dem Sheeva werden gelöscht...
$ sudo ./runme.php nand
[bei wem die runme.php streikt, der kann eine syntaktisch Korrekte hier beziehen]
Dauert etwas und resultiert in:
**** exec(modprobe ftdi_sio vendor=0x9e88 product=0x9e8f) **** Preparing environment variables file ... reading uboot/uboot-env/uboot-dflt.txt uboot/uboot-env/fw_setenv baudrate 115200 CRC read error on uboot-env.bin: Success [...] **** Burning uboot and environment variables ... This will take few minutes ... Open On-Chip Debugger 0.2.0 (2009-07-26-14:56) Release $URL: http://svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.2.0/src/openocd.c $ For bug reports, read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS 2000 kHz jtag_nsrst_delay: 200 jtag_ntrst_delay: 200 dcc downloads are enabled [...] **** U-boot should be up and running now. Open your console ...
Der Prozess dauert einige Minuten, nach Erhalt der letzten Zeile kann dann via minicom der Bootprozess und das Einrichten von Ubuntu verfolgt werden.
(wenn minicom den Bootprozess unterbricht, einfach in u-boot reset eintippen, dann geht es nochmal los.)
Zugriff via SSH
Nachdem man fertig ist, kann man ein frisches Ubuntu 9.04 auf einem UBIFS mit neuem Kernel und U-Boot betrachten.
Ein LAN-Kabel eingesteckt, einem DHCP Router und man kann sich via ssh in das System einloggen:
$ ssh root@192.168.0.123 # passwort: nosoup4u
SheevaPlug Installer
Der SheevaPlug Installer ist ein sehr nettes Tool. Damit lässt sich zum Beispiel ein tot geflashtes SheevaPlug wiederbeleben.
Totflashen geht, indem man den Bootloader falsch flasht, sodass das Plug nicht einmal mehr die Hardware initialisieren kann.
(Erkennbar an der nicht leuchtetenden blauen Lampe)
Dieser Schritt sollte der allererste sein, den man nach Erhalt eines neuen Sheevas tut.
Hinterher haben wir:
- Das U-Boot 3.4.19 (kann von SD booten)
- Linux ubuntu 2.6.30.2 #11 PREEMPT Wed Jul 22 19:53:31 MDT 2009 armv5tel GNU/Linux
- verdammt schnelles Dateisystem UBIFS mit lzo on-the-fly Komprimierung
- Ubuntu mit korrekt konfigurierter DNS-Auflösung und apt-get
Weiterhin ist es mit diesem Werkzeug möglich, eigene Distributionen einzubinden. Im installer/-Verzeichnis kann der rootfs.tar.gz Tarball mit einem eigenen Distro-Baum ausgetauscht werden.
Auf diesem Weg habe ich selber ein Debian zum Laufen bekommen. Wer das allerdings selber probieren möchte, sollte den vorgefertigten Tarball nutzen. Die aktuelle Build (Anfang Januar) via bootstrap funktionierte bei mir nämlich nicht.
Der Installer bietet auch die Möglichkeit, das Betriebssystem auch auf die SD Flashkarte zu spielen. Denn diese wird mit dem Kernel Update wieder richtig schnell:
Benchmark SDHC Karte Class 4 mit Kernel 2.6.30.2
100 bis 1 GB MB:
== Schreiben via dd bs=1024 count=[100K, 200K, 1M] if=/dev/zero of=/mnt/test.img == 104857600 bytes (105 MB) copied, 6.31505 s, 16.6 MB/s 209715200 bytes (210 MB) copied, 30.8354 s, 6.8 MB/s 1073741824 bytes (1.1 GB) copied, 221.97 s, 4.8 MB/s == Lesen via dd if=/mnt/test.img of=/dev/null == 104857600 bytes (105 MB) copied, 5.46798 s, 19.2 MB/s 209715200 bytes (210 MB) copied, 10.8675 s, 19.3 MB/s 1073741824 bytes (1.1 GB) copied, 64.4165 s, 16.7 MB/s
/tmp und /var und swap
Da das NAND Flashspeicher ist und dieser bekanntlich eine begrenzte Schreibvorgangsanzahl haben, ist es ratsam, swap, /tmp und /var (sehr häufige Schreib/Lesezyklen) auf eine USB-Festplatte oder auf eine externe (billige) SD Karte umzubiegen oder in den RAM zu speichern.
Das NAND selber kann nämlich nur zwischen 1.000 und 10.000 Schreibzyklen bestehen. Dazu editiert man sich einfach seine /etc/fstab zurecht. Meine sieht z.B. so aus:
USB Festplatte
mone /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0 ubi0:rootfs / ubifs defaults,noatime 0 0 /dev/sda1 /var jfs defaults,mode=0755 0 0 /dev/sda6 /home jfs defaults,noatime /dev/sda5 swap swap defaults 0 0 /tmp /var/tmp bind defaults,bind 0 0
RAM (ohne SD/HDD)
nach Arch Mobile Wiki
none /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0 ubi0:rootfs / ubifs defaults,noatime 0 0 tmpfs /var/lock tmpfs defaults,size=50m,mode=0755 0 0 tmpfs /var/log tmpfs defaults,size=50m,mode=0755 0 0 tmpfs /var/run tmpfs defaults,size=50m,mode=0755 0 0 tmpfs /tmp tmpfs defaults,size=100m,mode=1777 0 0 /tmp /var/tmp bind defaults,bind 0 0
Viel Spaß mit eurem neuen System!