Debian auf dem Bifferboard

Mein Schwager Uli ist schon lange stolzer Besitzer eines Bifferboards und nun wollte ich auch eins haben. Ich habe seit geraumer Zeit einen Home-Server mit Ubuntu “am laufen”, der als SAMBA Server für mein Heimnetz, als SSH/VPN Zugang von draußen und als “Datensammler” für meine DS18S20 Temperatursensoren dient. Meine aktuellen Experimente mit dem Arduino haben mich auf die Idee gebracht, diesen Server abzulösen und durch einen Mini-Mini-Rechner mit Linux zu ersetzen. Und genau das ist das Bifferboard.
Der erste Schritt ist die Installation eines “ordentlichen” Betriebssystems. Ab Werk ist OpenWRT installiert – was zwar alles in allem toll ist und auch ohne USB-Stick vom 8MB Flashspeicher läuft – aber ich hätte gerne ein Debian drauf laufen. Unter Debian gibt es unzählige, für die x86 Plattform kompilierte Pakete und man kann sich CrossCompiling sparen. Famzah hat das alles schon mal schön zusammengefasst und auch Kernel- und RootFS-Images bereitgestellt. Also folgte ich mutig seiner Anleitung und verpasste meinem gerade 90 Minuten in meinem Besitz befindlichen Bifferboard eine neue Firmware. Das Ergebnis war ernüchternd – es funktionierte nicht mehr :-/ Nachdem ich den ersten Schreck überwunden hatte, habe ich flux wieder die Orginal-Firmware draufgeflashed. Das ging erstaunlich reibungslos und der Werkszustand war wieder hergestellt. *puh*

Also fangen wir heute mal hinten an ;-) Folgende Schritte sind zum Flashen der original Bifferboard Firmware und damit der Wiederherstellung des Werkszustandes erforderlich:

  • Download der Original-Firmware von hier. Sollte dort nix zu finden sein, so hilft vielleicht eine Suche nach bzImage – wir brauchen die ~6MB große Datei.
  • Download der Upload-Skripte von hier. Wir benötigen für den Upload auf ein 8MB Board via Netzwerk das Skript bb_eth_upload8.py. Sollten die Skripte so nicht funktionieren, so muss Subversion installiert und die Skripte aus dem Reposotory genommen werden:

    user@linux:~$ sudo - s
    user@linux:~$ apt-get install subversion
    user@linux:~$ svn co https://bifferboard.svn.sourceforge.net/svnroot/bifferboard bifferboard
    user@linux:~$ cd bifferboard/utils
  • Nun geht’s ans Flashen! Angenommen, das Firmware-Image liegt in /tmp und wir befinden uns im Verzeichnis utils, dann sieht das Ganze so aus:
    user@linux:~/bifferboard/utils$ sudo -s
    user@linux:~/bifferboard/utils$ ./bb_eth_upload8.py eth0 00:B3:F6:00:5F:76 /tmp/bzImage
    ...113 (oder so) Chunks written...
    user@linux:~/bifferboard/utils$

Nun sollte das Bifferboard wieder das Original OpenWRT hochfahren, sich per DHCP eine IP-Adresse besorgen und per Telnet erreichbar sein. Damit wäre “der Weg zurück” gesichert. Wir können uns also an den nächsten Schritt wagen – die Installation von Slackware. Ich beginne mit Slackware, weil so ein Erfolgserlebnis zwischendurch ja auch nicht schlecht ist ;-)

Die folgenden Schritte zur Installation von Slackware auf dem Bifferbord sind, leicht modifiziert und kommentiert aus der offiziellen, englischen Anleitung übernommen und auf meinem Bifferboard getestet.

  • Das aktuelle RootFS (29.11.2010: slack13-rootfs-9.txz) gibt es als Tarball auf der Slackware Changelog Seite. Dieses laden wir als erstes mal runter.
  • Nun muss der Stick vorbereitet werden. Der Slackware Kernel erwartet das RootFS (ich glaube, es war ext2) unter /dev/sda1 und eine Swap Partition unter /dev/sda2. Diese müssen mit fdisk/mkfs zuerst angelegt werden.
  • Der Stick wird nun gemountet und das RootFS entpackt. Ich gehe dabei wieder davon aus, dass das Tarball unter /tmp abgelegt wurde:
    user@linux:~$ sudo -s
    user@linux:~$ mount /dev/sdb1 /mnt/usb
    user@linux:~$ cd /mnt/usb
    user@linux:/mnt/usb$ tar -v -xJf /tmp/slack13-rootfs-9.txz .
  • Der passende Kernel ist im RootFS enthalten und kann nun von dort geflashed werden:
    user@linux:~$ sudo -s
    user@linux:~$ cd /mnt/usb/boot
    user@linux:/mnt/usb/boot$ ./bb_eth_upload8.py eth0 00:B3:F6:00:5F:76 ./bzImage
    ...117 (oder so) Chunks written...
    user@linux:/mnt/usb/boot$ cd ~
    user@linux:~$ umount /mnt/usb

Das sollte es gewesen sein. Nun kann man den Stick ins Bifferboard stecken und das Netzteil aus- und wieder einstecken – das Bifferboard sollte nun den Kernel aus den Flash und anschließend Slackware von Strick booten.

Und jetzt versuchen wir genau das Gleiche nochmal – allerdings mit Debian! Hier folgen also die Schritte zur Installation von Debian Lenny auf dem Bifferboard. Die Anleitung ist vom Prinzip eine deutsche Übersetzung von famzah’s howto – mit der einen oder anderen Anmerkung ;-)

  • Zum Einsatz kommt famzah’s 2.6.30.5er Kernel. Diesen kann man hier herunterladen und unter /tmp abspeichern
  • Das RootFS nehmen wir ebenfalls von famzah. Ich habe das Developer-Paket verwendet.
  • Bevor es losgeht müssen wir noch den USB-Stick vorbereiten. Man kann natürlich auch den Slackware-Stick wiederverwenden, aber das RootFS von famzah erwartet keine Swap Partition. Also am besten den Stick mit fdisk “plattmachen” und eine Partition anlegen. Diese dann mit mkfs.ext3(!) formatieren.
  • Zuerst entpacken wir das RootFS auf den Stick…
    user@linux:~$ sudo -s
    user@linux:~$ mount /dev/sdb1 /mnt/usb
    user@linux:~$ cd /mnt/usb
    user@linux:/mnt/usb$ tar -v -xjf /tmp/debian-lenny-bifferboard-rootfs-developer.tar.bz2 .
  • …legen ein Swap-File an…

    user@linux:/mnt/usb$ mkdir /mnt/usb/swap
    user@linux:/mnt/usb$ dd if=/dev/zero of=/mnt/usb/swap/swapfile bs=1M count=128
    user@linux:/mnt/usb$ mkswap /mnt/usb/swap/swapfile
    user@linux:/mnt/usb$ echo '/swap/swapfile none swap sw 0 0' >> /mnt/usb/etc/fstab
  • …und flashen schließlich den Kernel:
    user@linux:/mnt/usb$ cd ~/bifferboard/utils
    user@linux:~/bifferboard/utils$ ./bb_eth_upload8.py eth0 00:B3:F6:00:5F:76 /tmp/vmlinuz-2.6.30.5-bifferboard-ipipe
    ...114 (oder so) Chunks written...
    user@linux:~/bifferboard/utils$

Tja, das sollte es gewesen sein. Mal sehen was passiert. Die blaue LED leuchtet, die orange auch, aber am USB-Stick tut sich nix. Irgendwie scheint’s nicht zu booten. Ich hab’s dann alles nochmal versucht, den anderen Kernel und das andere RootFS getestet und hatte keinen Erfolg. Dann habe ich mir ein serielles Kabel gebastelt, damit ich die Bootmeldungen sehen kann. Ich hatte noch eine FTDI-Breakout-Platine von Sparkfun rumliegen, womit sich das relativ einfach lösen ließ. Minicom (unter Linux) sollte man wie hier beschrieben einstellen. Also, das “Device” anpassen und auf 115200,8,n,1 stellen. Anschließend alle Init-Strings entfernen. Unter Windows funktionierts mit der aktuellen Version von Putty auch ohne Probleme. Nun kann man in Minicom/Putty sehen, was das Bifferboard (oder besser: BiffBoot – der Bootloader) beim Starten so zu sagen hat:

BIFFBOOT v3.3 00B3F6005F76 32-bit Loader by bifferos (c) 2010
Redistribution prohibited, all rights reserved.
Press < ESC >
No network link established - cable disconnected?
Booting...
00100000 loaded from flash.
Booting Linux with:

Und Ende :-/ “No network link” ist ja noch ok – ich hatte kein Netzwerkkabel drin, aber was mag “press < ESC >” bedeuten? Also nochmal Strom an/aus und im richtigen Moment < ESC > gedrückt. Und siehe da! Ich bin im BiffBoot-Menü! Zum Glück gibt es dort eine eingebaute Hilfe, die den (vielversprechenden) Befehl usbroot offenbart! Das klingt gut! Also habe ich ganz mutig mal usbroot und anschließend go eingegeben (mit save kann man die Kernel Commandline abspeichern – das habe ich aber mich beim ersten Versuch noch nicht getraut ;-) ) Und jetzt sieht das Ganze doch schon ganz anders aus:

BIFFBOOT v3.3 00B3F6005F76 32-bit Loader by bifferos (c) 2010
Redistribution prohibited, all rights reserved.
Press < ESC >
No network link established - cable disconnected?
Booting...
00100000 loaded from flash.
Booting Linux with: console=uart,io,0x3f8 init=/etc/preinit root=/dev/sda1 rootwait ubi.mtd=rootfs
Linux version 2.6.30.5-bifferboard-ipipe (root@FURNA) (gcc version 4.3.2 (Debian 4.3.2-1.1)
...

Er bootet und Debian läuft! Es war also die fehlende Kernel Commandline, wie auch hier von Lurch bestätigt wurde.

Jetzt kann ich mich nach und nach an die Einrichtung geben – ich denke, ich fange mal mit SSH an…

WICHTIG: Diese Anleitung wird so wie sie ist unter Ausschluss jeglicher Gewährleistung für experimentelle Zwecke veröffentlicht. Sie erhebt keinen Anspruch auf Vollständigkeit und Richtigkeit und wendet sich an Anwender, die unter Linux schon mal eine Konsole gesehen haben. Ich übernehme keine Haftung oder Garantie! Für Hinweise auf Fehler, Verbesserungsvorschläge oder Kommentare bin ich natürlich dankbar.