Freitag, 21. Dezember 2012

OpenWRT auf PogoPlug


Manchmal kaufe ich Sachen einfach weil sie günstig sind (wer macht das nicht?), so auch neulich... Beim Günstikgkeitsportal meiner Wahl gab es einen Deal über einen Linux Plug Computer, den die Firma CloudEngines Inc. offensichtlich abverkaufte.


Für 10 EUR/Stück habe ich mir prompt acht davon bestellt, die in der Auftragsbestätigung als Typ "Pogo-P24" gekennzeichnet waren. Eine Recherche bei Archlinux ergab, dass es sich (leider) um einen v3 mit 700MHz ARMv6 Dualcore handelt. Mein Lieblings-Mini-Linux OpenWRT würde es auf dieser Architektur nicht geben... bleibt immer noch ArchLinux.

Umso größer dann meine Freude, als ich beim Auspacken feststellte, dass ich entgegen der Bezeichnung auf der Verpackung (Pogo-B04!) tatsächlich Geräte des Typs "Pogo-E02" bekommen habe. Hierbei handelt es sich um die Marvell Orion Plattform (ARMv5) die unter dem Namen Kirkwood in vielen NAS verbaut ist - und natürlich von OpenWRT unterstützt wird. Als kleines Goodie besitzt der PogoPlug neben einem 1,2GHz Prozessor 128MB Flash und 256MB RAM. Das ist für die gängigen beengten OpenWRT System verdammt viel (selbst mein nagelneuer TP-WDR4300 hat nur 8MB Flash bei 128MB RAM und einer mageren 560MHz Atheros CPU). Da sollte sich also so einiges machen lassen...


Nach anfänglicher Recherche war mir klar, zunächst muss mal der Bootloader geändert werden. Dazu gibt es eine vorzügliche Arbeit von einem gewissen Jeff

Folgendermaßen bin ich vorgegangen:

  1. PogoPlug bootet
  2. sofort per Telnet anmelden (root:ceadmin) und die PogoPlug Dienste killen (sonst wird evtl. ein Update geladen, welches zukünftige Telnet Anmeldungen unterbindet.)
  3. Update Script ausführen

    cd /tmp
    wget http://projects.doozan.com/uboot/install_uboot_mtd0.sh
    chmod +x install_uboot_mtd0.sh
    ./install_uboot_mtd0.sh
    

    Bei der Nachfrage, ob die PogoPlug Dienste deaktiviert werden sollen, kann man gleich mit "yes" antworten.
  4. Bei der Gelegenheit richtet man auch gleich die Netconsole ein, dann braucht man für für das Flashen kein serielles Kabel.

    fw_setenv serverip 192.168.1.254
    fw_setenv ipaddr 192.168.1.1
    fw_setenv if_netconsole 'ping $serverip'
    fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
    fw_setenv preboot 'run if_netconsole start_netconsole'
    
  5. Der anschließende reboot führt per Netcat am Server gleich auf die Netconsole.

    nc -l -u -p 6666
    

    Hier partitioniere ich den Flash zunächst neu, da ich nur eine große JFFS2 Partition für mein Root-Filesystem haben möchte.

    mtdparts del data
    mtdparts del rootfs
    mtdparts add nand0 0x07b00000@0x00500000 rootfs
    saveenv
    reset
    
  6. Da in der OpenWRT Trunk Version (Barrier Breaker) irgendwie die USB-Unterstützung fehlte, verwende ich die RC1-Version von Attitude Adjustment. Das Kernel-Image und das Root-Filesystem habe ich zunächst auf meinen TFTP-Server heruntergeladen. Mit folgenden Kommandos wird beides in den Flash geschrieben:

    tftp 0x2000000 openwrt-kirkwood-uImage
    nand erase 0x00100000 0x00400000
    nand write 0x2000000 0x00100000 0x116ce8
    
    tftp 0x2000000 openwrt-kirkwood--jffs2-128k.img
    nand erase 0x00500000 0x7b00000
    nand write 0x2000000 0x00500000 0x1e0800
    

    (Die Größe des Images beim Write-Kommando entspricht den übertragenen Bytes (Hex) aus der TFTP-Sitzung. Im Falle des Kernels vom 22.11.12 sind das 0x116ce8 Bytes.)
  7. Abschließend ändere ich noch die Bootparameter und Startsequenz unter Beibehaltung der bestehenden U-Boot-Parameter - wer weiß, wofür die evtl. mal noch gut sind. So bootet der PogoPlug zwar etwas langsamer, weil er zunächst einen Start per USB versucht, aber das kann ich bisher verschmerzen.

    setenv pogo_set_bootargs "setenv bootargs console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=jffs2 panic=10"
    setenv pogo_bootcmd "run pogo_set_bootargs; nand read 0x2000000 0x100000 0x400000 ; bootm 0x2000000"
    saveenv
    reset
    
  8. Der "reset" startet den PogoPlug mit den neuen Einstellungen neu und führt direkt in die schöne neue Welt von OpenWRT (Achtung: die IP des OpenWRT Images lautet 192.168.1.1!).