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!
Vorbereitungen, kleinere Tests und Infos zum SheevaPlug
Sat, 26 Dec 2009
Gestern habe ich ja schon den ersten Einblick geschildert.
Heute hab ich noch kurz weitergemacht, teils mit erfreuten Ergebnissen, teilweise etwas schlechten.
Ubuntus ARM Repository: ports.ubuntu.com
Nirgends habe ich eine vollständige Liste der möglichen Pakete gefunden. Nirgends.
Daher habe ich einmal apt-get update samt apt-cache pkgnames gemacht und nun eine vollständige Liste aller Pakete, die am 25.12.2009 bereits im Repository waren:
10:32:56::# apt-cache pkgnames http://posativ.org/blog/files/linux/sheevaplug/all-packages.txt 10:35:03::# apt-cache stats Total package names: 32956 (1318k) Normal packages: 25053 Pure virtual packages: 250 Single virtual packages: 2200 Mixed virtual packages: 240 Missing: 5213 10:35:25::# cat /etc/apt/sources.list deb http://ports.ubuntu.com jaunty main restricted universe multiverse
Erste Benchmarks vom NAND und einer SDHC Karte
512 MB NAND
- default Filesystem: JFFS2
- zlib Kompression
- 100 MB Testdatei
10:50:40::# dd if=/dev/zero of=/root/test.img bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 9.37936 s, 11.2 MB/s 10:50:59::# dd if=/root/test.img of=/dev/null 204800+0 records in 204800+0 records out 104857600 bytes (105 MB) copied, 0.826774 s, 127 MB/s
Dabei findet eine on-the-fly Kompression und Dekompression statt, die sogar recht effektiv ist: 151 MB physikalisch belegt (Ubuntu), mittels du -sh komme ich allerdings auf 427MB.
Auf 500 MB NAND bei zlib Kompression kann also ca. 1400 MB theoretisch gespeichert werden.
Neben JFFS2 gibt es allerdings noch ein etwas schnelleres Dateisystem: UBIFS. Das hat neben zlib die deutlich performantere Kompression lzo, die dafür allerdings etwas mehr Platz benötigt.
4 Gb SDHC
- default Filesystem: VFAT
- 1 GB Testdatei
21:09:23::# dd bs=1024 count=1M if=/dev/zero of=/mnt/file 1073741824 bytes (1.1 GB) copied, 1455.34 s, 738 kB/s 22:05:19::# dd if=/mnt/file of=/dev/null 2097152+0 records in 2097152+0 records out 1073741824 bytes (1.1 GB) copied, 158.693 s, 6.8 MB/s
Also ich habe ja mit ein paar Einbußen gerechnet, aber nicht mit 700 kB/s. Gekauft hab ich eine Class 4 SDHC von Panasonic, mit 20 MB/s Lesen und 9 MB/s Schreiben.
Weil ich kein SD-Kartenlesegerät für USB habe, konnte ich maximal noch vom Sony PRS-505 die Schreib- und Lesegeschwindigkeit testen. Da kam ich beim Schreiben immerhin auf gut 6 MB/s, beim Lesen allerdings auf utopische 200 MB/s.
Dennoch gibt es wohl sehr heftige Probleme beim mitgeliefertem Kernel und SD Karten (anderer Vergleich).
Welches OS denn nun für das SheevaPlug?
Es gibt mehrere Linuxdistributionen, die entweder einen Port für ARM oder generell für Embedded Systems konzipiert sind:
- Debian: http://www.cyrius.com/debian/kirkwood/sheevaplug/
- Ubuntu: http://www.plugcomputer.org/plugwiki/index.php/Category:Ubuntu
- Gentoo: http://dev.gentoo.org/~armin76/arm/sheevaplug/install.xml
- Arch Linux: http://www.archmobile.org/trac/wiki/AM/SheevaPlug/InstallationOnNAND
- Fedora, Angstrom, SlugOS, Slackware, FreeBSD, OpenWRT
Um nur die aufzuzählen, die mir bisher begegnet sind. Es gibt sicherlich noch mehr.
Da allein schon der Linux Kernel knapp 50 Minuten zum Kompilieren auf dem Plug braucht, fällt Gentoo für mich schon einmal weg. Fedora und Ubuntu sind beides Ports von so schon sehr schwergewichtigen Distributionen. Daher will ich die auch nicht wirklich haben.
Da ich Arch Linux auf dem Desktop verwende und es recht klein ist, liegt es für mich nahe, dieses zu verwenden. Allerdings schaut das Repository noch etwas klein aus und das archmobile.org Projekt ist mehr auf Mobiles fokussiert. Ich werde allerdings Arch Linux on NAND testen!
Alle anderen bis auf Debian sind mir unbekannt. Debian ist sehr populär, daher stelle ich mir auch das Repository recht umfrangreich vor. Aber auch da gibt es natürlich keine Liste mit allen verfügbaren Paketen...
Wie geht's weiter?
U-Boot muss aktualisiert werden für SDHC Boot, dazu der aktuelle Kernel kompiliert werden. UBIFS statt JFFS2 nutzen und dann kommt Arch Linux aufs NAND und Debian auf die SDHC Karte
Wenn das dann geschafft ist, sehe ich weiter.
Mein erster Eindruck vom SheevaPlug
Fri, 25 Dec 2009
Tja, wie beginnt man diesen Blogpost nicht prahlend?
Ich habe vom Weihnachtsmann etwas aus England erhalten:
Marvells SheevaPlug
Wenn jetzt jemand denkt "Hää, wasn das?":
Ein SheevaPlug ist ein headless Server für den Betrieb zu Hause. Bei maximal 11 Watt mit angeschlossener USB-Festplatte, samt Ethernet und Flash Karte unter Volllast. Soviel brauchen manche High-End Rechner, wenn sie angeblich "aus" sind.
Nutzen kann man das z.B. für: Wuala, IRC-Bouncer, Fileserver, Torrent und Webserver.
SheevaPlug Dev Kit
Um jetzt nicht wiederzukauen, was andere Blogs bereits gepostet haben, nur eine kurze Übersicht:
- ARM Prozessor mit 1,2 Ghz
- 512 Mb RAM
- 512 Mb NAND (interner Flash Speicher)
- 1x USB 2.0 (480 Mb/s) Port, 1x Gigabit Netzwerk, SDHC Input
Interessanterweise klackert mein SheevaPlug, wenn ich es leicht schüttel. Allerdings müssten das nur ein paar lose Kabel sein, der Innenarchitektur zu urteilen.
Im Paket befinden sich ein ca. 3m LAN-Kabel, Mini-USB->USB Kabel (50 cm) (für serielles Terminal) und zwei verschiedene Baustücke für die Stromversorgung. Mein Sheevaplug ist einfach auf eine Steckdosenleiste gesteckt.
Leider schaut eine eingesteckte SD-Karte etwas sehr hervor.
Erster Anlauf
Das SheevaPlug hat kein Power-Schalter oder ähnliches. Wenn es auf eine aktive Stromleiste gesteckt wird, fährt es automatisch hoch.
Das SheevaPlug lässt sich im Übrigen auch nicht ausschalten; zwar kann man Ubuntu zum sudo halt zwingen, aber das Sheeva läuft munter weiter. (Also es leuchtet...)
Also in die Steckdose gesteckt, samt seriellem Kabel und LAN und schon geht's los. Da ein Ubuntu (9.04) im NAND vorinstalliert ist, bezieht es sich über DHCP automatisch eine IP. Daher kann man sich einfach per SSH einloggen:
21:09:47::$ ssh root@192.168.0.200 root@192.168.0.200's password: nosoup4u Linux debian 2.6.22.18 #1 Thu Mar 19 14:46:22 IST 2009 armv5tejl [...] To access official Ubuntu documentation, please visit: http://help.ubuntu.com/ Last login: Tue Mar 28 19:07:19 2000 [root@debian]/root 19:07:34::#
Alternativ kann man sich auch via serieller Schnittstelle einloggen und somit auch die Bootsequenz verfolgen.
Als Programm empfehle ich an dieser Stelle minicom, das zuerst via minicom -s auf
den USB Anschluss: /dev/ttyUSB0 konfiguriert werden muss.
Zwar wird den Entwicklern des "Das U-Boot" Bootloaders gerade minicom nicht empfohlen. Allerdings finde ich persönlich
die vorgestellten Programme cu (Teil des uucp Pakets) und kermit nicht gerade zeitgemäß.
Der U-Boot Bootloader, der eigentlich einen extra Blogbeitrag wert wäre, bootet ziemlich zügig vom Sheeva.
Aussehen tut der Anfang so:
__ __ _ _
| \/ | __ _ _ ____ _____| | |
| |\/| |/ _` | '__\ \ / / _ \ | |
| | | | (_| | | \ 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
Erster Blick auf die Software
Ohne etwas angerührt zu haben, sieht die vorgefertigte Speicherbelegung wie folgt aus:
19:38:20::# df -h Filesystem Size Used Avail Use% Mounted on rootfs 507M 148M 360M 30% / tmpfs 252M 0 252M 0% /lib/init/rw varrun 252M 40K 252M 1% /var/run varlock 252M 0 252M 0% /var/lock udev 252M 8.0K 252M 1% /dev tmpfs 252M 0 252M 0% /dev/shm tmpfs 252M 0 252M 0% /var/cache/apt
Vorinstalliert ist, wie schon erwähnt, Ubuntu 9.04 (Jaunty Jackalope). Leider ist es etwas unglücklich installiert:
- apt-get:
- Wer einmal apt-get in irgendeiner Weise nutzen wollte, erfährt ersteinmal:
19:43:15::# apt-get update E: Archive directory /var/cache/apt/archives/partial is missing.
Da das Problem auf zwei Wege gefixt werden kann und es je nach Nutzung des SheevaPlugs ankommt, empfehle ich hier einfach http://computingplugs.com/index.php/Fixing_apt-get.
Schuld ist /var, da es hier ein Dateisystem im RAM ist und somit nicht persistent. - DNS Auflösung:
Per default kann zwar 74.125.43.106 angepingt werden, allerdings nicht die dazugehörende Domain google.com.
Nach einem Neustart ist das behoben, wenn in /etc/dhcp3/dhclient.conf eine Route (#) vor
supersede domain-name-servers 127.0.0.1;
gesetzt wird.
Eine vollständige Auflistung aller installierten Pakete gibt es hier.
Der Linux Kernel ist leider eine etwas ältere Version. Allerdings lässt sich dieser updaten, wenn nötig.
20:13:42::# uname -a Linux debian 2.6.22.18 #1 Thu Mar 19 14:46:22 IST 2009 armv5tejl GNU/Linux
Da es beim mitgelieferten Kernel recht heftige Performance Einbußen beim Lesen und Schreiben einer eingesteckten SD-Karte gibt, sollte man ihn zumindest patchen oder gleich den aktuellsten nehmen.
Das würde ich allerdings in einem separaten Blogposting detailliert beschreiben.
Nützliche Links
Ich habe zwischenzeitlich ein paar sehr informative Webseiten gefunden:
- http://computingplugs.com/index.php/Main_Page:
Nützliches Wiki und die Seite läuft komplett auf einem Sheeva. Mit Echtzeit Statistiken!
- http://www.plugcomputer.org/plugwiki/index.php/Main_Page:
Ist das offizielle Wiki von http://www.plugcomputers.org/ und sehr umfangreich. Die How-To Abteilung ist sehr nett.
- http://www.marvell.com/:
Offizielle Liste der Reselller. Für den Fall der Fälle...

