bk99.de entertain the web since 1997

Ein Computer im Steckernetzteil: Debian auf dem SheevaPlug

Zusammenfassung

Im November 2009 habe ich auf einem SheevaPlug von Marvell, einem kompletten ARM-Rechner im Gehäuse eines Steckernetzteils, Debian Squeeze installiert und von einer SDHC-Karte gestartet. Der Weg führte über die serielle Konsole, den Bootloader U-Boot und einen TFTP-Server, der Kernel und Installer ins Gerät lud. Dieser Beitrag aus meinem alten Blog zeigt die Schritte von damals, was das Gerät konnte und warum es ein Vorläufer des Raspberry Pi war.

Ein Rechner, der in die Steckdose passt

Marvell stellte den SheevaPlug Anfang 2009 als Referenzdesign für sein „Plug Computing“ vor und verkaufte ihn ab Februar 2009 für 99 US-Dollar. Das Konzept: ein vollwertiger Linux-Rechner im Gehäuse eines Steckernetzteils, der direkt in der Steckdose steckt und ein paar Watt verbraucht.

Meiner meldete beim Start eine Marvell-Kirkwood-CPU 88F6281 mit 1,2 GHz, 512 MB DDR2-Arbeitsspeicher und 512 MB NAND-Flash, dazu Gigabit-Ethernet, USB 2.0 und einen SD-Kartenleser. Ab Werk lief ein Ubuntu-System aus dem Flash. Die Idee war, daraus kleine Server zu machen: Netzwerkspeicher, Druckserver, Downloadstation, alles, was dauernd laufen soll und dabei kaum Strom ziehen darf.

Zugang über die serielle Konsole

Der Plug hatte einen Mini-USB-Anschluss, hinter dem ein USB-Seriell-Wandler steckte. Den Windows-Treiber fand ich gut versteckt auf der beiliegenden CD im Supportpaket; er war nicht signiert, lief aber trotzdem unter Vista 64 Bit. Mit PuTTY auf COM4 und 115.200 Baud stand die Konsole.

Ein Detail, das man nicht vergisst: Die Uhr des Geräts stand beim ersten Start auf dem 22. Mai 2029. Bevor irgendetwas mit Zertifikaten oder Paketquellen funktionierte, musste die Zeit stimmen:

root@debian:~# date
Tue May 22 01:03:58 UTC 2029
root@debian:~# ntpdate ntp.bk99.de
... step time server ... offset -615361606.846183 sec
root@debian:~# hwclock --systohc

U-Boot vorbereiten

Gestartet wird der SheevaPlug vom Bootloader U-Boot. Damit ein Debian-Kernel aus dem offiziellen Linux-Zweig statt des Marvell-Kernels startet, mussten zwei Variablen gesetzt werden: mainlineLinux und arcNumber, die Maschinennummer, an der der Kernel das Board erkennt.

U-Boot 1.1.4 (Sep 14 2009 - 15:36:37) Marvell version: 3.4.19
Soc: 88F6281 A0 (DDR2)
CPU running @ 1200Mhz L2 running @ 400Mhz
DRAM Total size 512MB  16bit width
NAND:512 MB
Net:   egiga0 [PRIME], egiga1

Marvell>> setenv mainlineLinux yes
Marvell>> setenv arcNumber 2097
Marvell>> saveenv
Marvell>> reset

Installer per TFTP

Ein CD-Laufwerk gab es nicht, also kamen Kernel und Installer übers Netz. Ein TFTP-Server im LAN stellte die beiden Dateien bereit, U-Boot lud sie an feste Adressen im Speicher und startete den Debian-Installer, der das System auf die 8-GB-SDHC-Karte schrieb.

Marvell>> setenv serverip 172.16.48.20
Marvell>> setenv ipaddr 172.16.48.101
Marvell>> tftpboot 0x0800000 uInitrd
Bytes transferred = 2690046 (290bfe hex)
Marvell>> tftpboot 0x400000 uImage
Marvell>> setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
Marvell>> bootm 0x400000 0x0800000
## Booting image at 00400000 ...
   Image Name:   Debian kernel
## Loading Ramdisk Image at 00800000 ...
   Image Name:   debian-installer ramdisk
Starting kernel ...

Danach lief ein normaler Debian-Installer über die serielle Konsole. Zum Schluss musste U-Boot noch lernen, Kernel und Initrd beim Start von der SD-Karte zu laden statt aus dem Netz:

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_mmc 'mmcinit; ext2load mmc 0 0x0800000 /uInitrd; ext2load mmc 0 0x400000 /uImage'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_mmc; bootm 0x400000 0x0800000'
saveenv
run bootcmd

Debian Squeeze war im November 2009 noch der Testing-Zweig; offiziell erschien es erst im Februar 2011. Die ARM-Kernel für den Plug pflegte damals vor allem Martin Michlmayr, der auch die Anleitungen dazu schrieb.

Was das Gerät konnte und was daraus wurde

Als kleiner Server für Netzwerkdienste reichte der Plug völlig, und Debian unterstützte ihn bald direkt im Installer. Mit dem GuruPlug folgte 2010 ein Nachfolger mit WLAN und Bluetooth, und verschiedene Hersteller bauten Netzwerkspeicher auf derselben Kirkwood-Plattform.

Drei Jahre später kam der Raspberry Pi und machte die Idee eines billigen, sparsamen ARM-Rechners für alle zum Massenprodukt, mit Grafikausgabe, großer Gemeinschaft und ohne serielle Konsole als Pflicht. Was vom SheevaPlug geblieben ist: U-Boot als Bootloader auf fast jedem ARM-Board und das Wissen, dass man einen Rechner über TFTP und eine serielle Leitung auch dann installieren kann, wenn er weder Bildschirm noch Laufwerk hat.

Zahlen im Überblick

  • SheevaPlug: Marvell Kirkwood 88F6281 mit 1,2 GHz, 512 MB DDR2, 512 MB NAND-Flash, Gigabit-Ethernet, USB 2.0, SD-Karte.
  • Marvell verkaufte das Referenzdesign ab Februar 2009 für 99 US-Dollar.
  • U-Boot-Variablen für Mainline-Kernel: mainlineLinux=yes und arcNumber=2097.
  • Die serielle Konsole lief mit 115.200 Baud über einen eingebauten USB-Seriell-Wandler.
  • Debian 6.0 „Squeeze“ erschien offiziell im Februar 2011.

Referenzen

Bemerkungen

  • Dieser Beitrag fasst meine SheevaPlug-Seiten vom 20. und 21. November 2009 aus dem alten Plone-Blog zusammen, darunter die Boot-Protokolle und meine Notizen. 2026 habe ich sie aus dem Webarchiv geholt und überarbeitet.
  • Die Startbefehle für den Installer habe ich auf die wesentlichen Zeilen gekürzt; die Protokolle von damals sind im Webarchiv vollständig.

Originalbeitrag im Webarchiv