Montag, 18. Oktober 2010

uBoot für DockStar

Wie versprochen geht es weiter mit Artikeln zum DockStar

Um einen eigenen uBoot zu übersetzen bedarf es nicht viel...

  1. Crosscompiler/Toolchain für Arm
  2. uBoot-Quellen
  3. patches für uBoot für den Dockstar
  4. meine Anpassungen für Speicher und LEDs

Wer das alles nicht möchte, kann auch einfach das fertige Binary laden, muss dann aber mit den Standardoptionen leben oder die Optionen im Flash anpassen. Meine Version des u-Boot gibt es hier. Vorsicht: Es scheint nicht jeder Kernel damit zu booten. Bitte vorher testen!

Die Toolchain bekommt man nach der Anleitung hier und dann geht es bei ahsoftware weiter mit dem uBoot.

Am Ende gibt es dann noch die Anpassungen für LED's und Speicher von mir:

In der Datei board/Marvell/sheevaplug/sheevaplug.h kann man sich aussuchen, wie man die LED's beim Einschalten gesetzt haben will. Folgende Zeilen schalten einfach die orange LED ein, um den Bootvorgang zu signalisieren:

#define SHEEVAPLUG_OE_LOW        (~(0))           /* This is for DockStar:                    */
#define SHEEVAPLUG_OE_HIGH       (~( (1 << 15) )) /* output enable gpio47 (32+15) = orange,   */
                                                  /*               gpio46 (32+14) = green led */
#define SHEEVAPLUG_OE_VAL_LOW    (1 << 29)        /* USB_PWEN low                             */
#define SHEEVAPLUG_OE_VAL_HIGH    0               /* output low => led on - thus we switch on */
                                                  /* the yellow one above.                    */

Viel wichtiger ist jedoch das korrekte Konfigurieren des Speichers, damit das später startende Linux nicht versucht, auf den nicht vorhandenen Speicher zuzugreifen.

Die Option hierzu findet sich in der Definition des Konfigurationsabbilds der CPU in der Datei board/Marvell/sheevaplug/kwbimage.cfg. Dort gilt es die DATA-Definition an der Adresse 0xFFD01504 zu ändern:

DATA 0xFFD01504 0x07FFFFF1     # CS[0]n Size Register - 07=128MB for DockStar

Wer nun noch eine komfortable Eingabeaufforderung im Bootloader haben will, editiert noch schnell die Datei include/configs/sheevaplug.h und fügt die folgenden Zeilen ein:

#define CONFIG_SYS_HUSH_PARSER
#define CONFIG_AUTO_COMPLETE
#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
#define CONFIG_CMDLINE_EDITING

Schliesslich wollte ich noch die Standard-Boot-Optionen anpassen:

 #define CONFIG_BOOTCOMMAND \
         "${x_bootcmd_usb}; "    \
         "setenv bootargs ${x_bootargs} ${x_bootargs_root}; echo cmdline: ${bootargs} ; "    \
         "run x_bootload_kernel m_usb_boot;" \
         "reset" /* If loading from USB failed we just reset, my experience was that the second time the device will be found */

[...]
 #define CONFIG_EXTRA_ENV_SETTINGS \
       "x_bootargs=console=ttyS0,115200 mtdparts="CONFIG_MTDPARTS \
       "x_bootargs_root=root=/dev/sda1 ro rootdelay=5\0" \
       "x_bootload_kernel=ext2load usb 0:1 0x800000 /boot/uImage\0" \
       "m_usb_boot=if ext2load usb 0:1 0x1100000 /boot/uInitrd; then bootm 0x800000 0x1100000;else bootm 0x800000;fi;\0" \
        "x_bootcmd_usb=usb start\0"

Damit sucht der u-Boot auf dem usb-stick nach einem uImage und uInitrd und bootet, falls vorhanden, auch mit Initrd.

Flashen des uBoot

Die heikelste Operation ist das Flashen des uBoot. Zum Testen empfiehlt es sich, mit dem vorhandenen Bootloader den neuen uBoot per Netz oder usb-Stick in den Speicher zu laden und direkt anzuspringen (Dazu das bin-file benutzen). Wer seinen eigenen uBoot flashen will sollte unbedingt daran denken, nicht versehentlich das binary sondern immer das Bootfile (kwb) zu flashen.

Ich erledige das bequem mit der seriellen Konsole und einem tftp-Server:

setenv ipaddr 10.1.1.17 ; setenv serverip 10.1.1.1 ; tftp 0x6400000 u-boot.kwb
nand erase 0x0 0x40000
nand write 0x6400000 0x0 0x40000
reset
Und wenn man Glück hatte, braucht man nicht so wie ich einen JTAG-Adapter...

Mein Dockstar lebt wieder...

So. Es ist wieder einmal passiert. Ich habe mir Hardware zum Spielen gekauft.

Diesmal: Ein FreeAgent DockStar Network Adapter von Seagate.

Das Schätzchen hat 128MB Ram und 256MB Flash on Board, eine nette ARM CPU, Gigabit-Netzwerk und 4 USB-Ports. Details finden sich zu Hauf im Netz.

Was mich besonders interessiert hat, war die in der CPU vorhandene Crypto-Unit, die sha1, md5 und aes in Hardware berechnen kann.

Linuxkernel

Leider ist es mit der Unterstützung dieser Einheit im offiziellen Kernel noch nicht so wahnsinnig weit - bisher wird das ganze nur rudimentär angesprochen (z.B. kein DMA), so dass es nicht wirklich Spaß macht, das ganze zu nutzen. (1-2MB/s Gewinn)

Etwas mehr verspricht hier ein Kernel des Herstellers - und voilá, GPL-sei-dank gibt es da auch was passendes. Oder naja, etwas das man für passend halten kann.

Vorweg: Ja, ich habe den Kernel letztlich übersetzt bekommen, man darf nur nicht so wahnsinnig sein, und an der config großartig Dinge ändern wollen - weil dann knallt es. Und zwar richtig mit Compiler-Fehlern und Syntax-Errors in den Kernelquellen.

Letztlich habe ich jedenfalls 15MB/sec von einer verschlüsselten USB-Platte lesen können statt 6-7 ohne Hardwareunterstützung.

Details zum Kernel folgen, sobald ich einen stabilen build habe und das dokumentieren kann. Ausserdem will ich die LEDs aus dem Kernel heraus ansprechen können, die GPIO-Konfiguration habe ich im Prinzip bereits.

uBoot - der Bootloader

Damit ich dieses System bequemer booten kann, wollte ich dann einen neuen uBoot bauen.

Die Cross-compiler-chain war ja schon von kernel vorhanden - sollte also alles kein Problem sein. Dachte ich.

Die Konfiguration des DockStar unterscheidet sich leider etwas von der des Sheeva-Plugs. So ist nur die Hälfte des Rams vorhanden, ausserdem sind die beiden LEDs an andere GPIO-Pins angeschlossen.

Kaputtgeflasht

Was mir letztlich das Genick brach war aber ein dummer Fehler: Ich habe das uBoot-Binary direkt in den Flash des DockStar gebrannt - statt des kwb-Images, das die Hardwarekonfiguration enthält.

Letztlich habe ich nun 4 verschiedene Jtag-Adapter hier gehabt, davon zwei selbstgebaute. Der letzte, ein wiggler, funktionierte schließlich - wenn auch nur mit 50kHz statt 500. (Kabellänge)

Folgende Fallen begeneten mir dabei:

  • 74HC244 falschrum im Sockel. Gute Heizwirkung, der Chip hats überlebt, mein Zeigefinger auch...
  • Kabel zu lang und zu wenig abgeschirmt
  • Ein funktionierender DockStar hat das JTAG deaktiviert und ist zum Testen ungeeignet!

Vor allem der letzte Punkt mit dem funktionierenden DockStar hat mich etliche Stunden gekostet. Aber wer rechnet schon damit -.-

Ausblick

Die folgenden Posts werden ausführlich das Wiederbeleben des DockStars, die korrekte Konfiguration des Bootloaders für diese Plattform und die Konfiguration des Kernels enthalten.

Der Bootloader kann hier jedenfalls schon die LED's ansprechen, dem Kernel werde ich das wohl auch noch beibringen. TODO's sind aber noch die Konfiguration des Speichers im uBoot.

Sonntag, 10. Oktober 2010

Vorlesungsverzeichnis der TU-Berlin (Backup)

Die Freitagsrunde hat sich wieder die Freiheit genommen, eine Kopie des Vorlesungsverzeichnisses der TU-Berlin anzulegen, falls die Server überlastet sein sollten. Bitte weitersagen.

Das Vorlesungsverzeichnis für das Wintersemester 2010/2011 findet sich nun auch hier: offizielles Vorlesungsverzeichnis der TU-Berlin (Kopie).

In den Ordnern sind jeweils die pdf-Versionen der Fakultäten abgelegt. Auf oberster Ebene auch nochmal ein Archiv als zip und tarfile.

Update: Ja, das Backup des Vorlesungsverzeichnis ist in den letzten Jahren rege genutzt worden, weil der Typo3 doch ab und zu ausfällt und das lsf-web einfach überlastet ist. Und ich hoffe dass dieser Eintrag jetzt auch genügend Stichworte für die Google-Trefferliste hat ;o). Die billigen Tricks wie finden sie HIER mehr über TU-Berlin Vorlesungsverzeichnis oder Backup Vorlesungsverzeichnis TU Berlin lasse ich mal weg...öhm - wait... mist ;)