mecker. mecker. mecker.

Ubuntu auf's SheevaPlug

Hä, aber da ist doch schon ein Ubuntu drauf, oder?

Ja, das stimmt so.

Allerdings ist das vor­in­stal­lier­te Ubuntu der schlech­tes­te Aus­gangs­punkt, den man sich wohl denken könnte:

Das Gute ist: Es gibt ein Tool, da macht man quasi zwei Klicks, und schon sind alle genannten Punkte in einem Rutsch erledigt.

Im Schnell­durch­lauf

  • SheevaPlug Installer
  • Entpacken und Terminal und ./README.txt öffnen, kurz lesen.
  • “openocd” benötigt (in Ubuntu Quellen). Arch Linux hat es im AUR (openocd-git-libftdi)
  • USB Stick (/mnt/disk) fat32 for­ma­tie­ren (mkfs.msdos) und die Dateien unterhalb von “Installer” nach /mnt/disk/ kopieren
  • sudo php ./runme.php nand und warten (php | php5-cli package wird gefordert)
  • Warten und nach ~5-10 Minuten via “ssh root@192.168.0.123” - pass: nosoup4u

HowTo

Vor­be­rei­tun­gen

Benötigt wird:

  • SheevaPlug Installer (extern)
  • Ubuntu/Debian Linux oder was ver­gleich­ba­res
    • nativ / virtuell via VirtualBox : Ubuntu 9.10 VDI (user: ubuntu pass: reverse)
      Wichtig: VirtualBox mit USB Un­ter­stüt­zung (also nicht OSE)
  • USB Stick > 200 MB
    Achtung: Muss formatiert werden!
  • SheevaPlug (jetzt wirklich) und das Kabel für die serielle Schnitt­stel­le

Durch­füh­rung

Der Ein­fach­heit halber beschreibe ich aus­schließ­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 hin­be­kom­men; mit Debian sollte die In­stal­la­ti­on auch funk­tio­nie­ren. Man müsste das halt nur adaptieren und für seine Dis­tri­bu­ti­on leicht anpassen.

  1. startet Linux und stöpselt das SheevaPlug schon mal auf ‘ne Steckdose und verbindet es mit dem seriellem Kabel.

  2. sudo apt-get install minicom libftdi libftdi-dev openocd php5-cli

  3. USB-Stick anstöpseln und via Geräte -> USB-Geräte -> $Modell zum Gast durch­lei­ten.
    For­ma­tie­ren 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
    
  4. Entpackt sheevaplug-installer-v1.0.tar.gz und geht in das Ver­zeich­nis sheevaplug-installer-v1.0.

  5. $ ubuntu@ubuntu-desktop:~/Downloads$ cd sheevaplug-installer-v1.0/
    $ sudo cp ./installer/* /mnt/
    $ umount /mnt/
    
  6. Nehmt den USB-Stick und steckt ihn ans SheevaPlug.

  7. 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 syn­tak­tisch 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 ...
    
  8. Der Prozess dauert einige Minuten, nach Erhalt der letzten Zeile kann dann via minicom der Boot­pro­zess und das Einrichten von Ubuntu verfolgt werden.
    (wenn minicom den Boot­pro­zess un­ter­bricht, 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 ein­ge­steckt, 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 wie­der­be­le­ben.
Totflashen geht, indem man den Bootloader falsch flasht, sodass das Plug nicht einmal mehr die Hardware in­itia­li­sie­ren kann. (Erkennbar an der nicht leuch­te­ten­den blauen Lampe)

Dieser Schritt sollte der allererste sein, den man nach Erhalt eines neuen Sheevas tut.

Hinterher haben wir:

Weiterhin ist es mit diesem Werkzeug möglich, eigene Dis­tri­bu­tio­nen ein­zu­bin­den. Im installer/-Ver­zeich­nis kann der rootfs.tar.gz Tarball mit einem eigenen Distro-Baum aus­ge­tauscht werden.

Auf diesem Weg habe ich selber ein Debian zum Laufen bekommen. Wer das allerdings selber probieren möchte, sollte den vor­ge­fer­tig­ten Tarball nutzen. Die aktuelle Build (Anfang Januar) via bootstrap funk­tio­nier­te bei mir nämlich nicht.

Der Installer bietet auch die Mög­lich­keit, das Be­triebs­sys­tem 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 Flash­spei­cher ist und dieser be­kannt­lich eine begrenzte Schreib­vor­gangs­an­zahl 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 Schreib­zy­klen 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!

blog comments powered by Disqus