Dies ist eine alte Version des Dokuments!


Emdebian auf dem Zoom Board

Die Emdebian Crosstoolchain wird in unserem Institut zum Beispiel für den Zoom OMAP-L138 eXperimenter Kit von Logic PD eingesetzt. Das Zoom Board besitzt einen Texas Instruments OMAP-L138 Prozessor. Dieser basiert auf einem ARM926EJ-S und einem C6748 DSP. Weitere Infos zum Board und zum DSP sind im oben angefügten Link oder auch auf dem Wiki unter OMAPL138 TMS320C6748 zu finden.

Das Board wird im Unterricht eingesetzt und zur Zeit mit dem bereits von Texas Instruments bereitgestellten Filesystem betrieben. Auf dem Display wird eine mit QT erstellte Oberfläche dargestellt, die per Touch bedienbar ist. Mit der Emdebian Crosstoolchain werden dann die auf dem Host geschriebenen Treiber usw. crosscompiliert und per SSH auf das Target geladen.

Cross-Compilieren für das Zoom Board

Wie C-Sourcen oder Kernelmodule mit der Emdebian Toolchain übersetzt werden können ist unter Cross-Compilieren mit Emdebian zu finden.
Die einfachste Variante die Kompilate auf das Target zu kopieren ist via SSH. Alle Boards sind für die NTB-Infrastruktur registriert und können so einfach via Hostname über das Netzwerk angesprochen werden. Die Files werden dann am einfachsten mit scp kopiert:

scp filename username@hostnameTarget:/folder/In/Filesystem
zum Beispiel:
scp hello.ko root@es092:/media/ram

Das oben angegebene Verzeichnis /media/ram wird bei jedem Booten des Targets gelöscht, verhält sich also wie ein RAM und ist damit praktisch, um kurz etwas auszuprobieren.
Bei einem Kernel-Update erhält das Target einen neuen RSA key. Dadurch kann keine SSH-Verbindung mehr hergestellt werden, falls mit dem gleichen Host schon mal eine SSH Verbindung bestanden hatte. Es erscheint nur noch die Warnung Warning: Remote Host Identification has changed. In diesem Falle muss der alte Key gelöscht werden. Dies erfolgt mittels

ssh-keygen -R hostname

Wobei bei hostname der Hostname oder die IP-Adresse des entsprechenden Zoom Boards einzutragen ist. Beim nächsten Verbindungsversuch wird dann der neue Key übernommen.

Kernel Update

Auf dem Zoom Board befindet sich momentan ein Linux Kernel der Version 2.6.37. Wie ein Kernel, zum Beispiel für das Zoom Board, kreuzkompiliert werden kann, ist unter Linux-Kernel kreuzkompilieren zu finden.

Bootloader

Das Zoom Board hat ein U-Boot (Universal Boot Loader) installiert. Der kreuzkompilierte Kernel muss noch in ein entsprechendes uImage konvertiert werden, wobei zum Beispiel die Startadresse für das Aufstarten gesetzt werden muss etc. Dies erfolgt mit folgendem Befehl:

mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d source_datafile filenameOfCreated

with: -A -> set architecture to 'arch'
      -O -> set operating system to 'os'
      -T -> set image type to 'type'
      -C -> set compression type 'comp'
      -a -> set load address to 'addr' (hex)
      -e -> set entry point to 'ep' (hex)
      -n -> set image name to 'name'
      -d -> use image data from 'source_datafile'
            and how generated image should be named 'filenameOfCreated'
      -x -> set XIP (execute in place)

Für unser Beispiel ergibt dies folgenden Konsolen-Befehl:

mkimage -A arm -O linux -T kernel -C none -a 0xC008000 -e 0xC0008000 -n 'linuxName' -d Image uImage

Ob das Image komprimiert werden soll oder nicht, hängt vom verfügbaren Speicherplatz ab. Das neu erstellte uImage muss anschliessend auf die SD-Karte des Zoom Boards auf die Partition START_HERE kopiert werden. Beim nächsten Aufstarten wird der Kernel von dort geladen.

SD Karte formatieren

Mit dem SDK von Texas Instruments wird ein Shell mitgeliefert, mit welchem SD-Karten für das Zoom Board formatiert und partitioniert werden können. Dabei wird auch eine Partition mit dem rootfs erstellt.
Das Formatieren erfolgt mit folgenden Schritten:

  1. SD Karte mit Kartenleser anschliessen und mit dmesg Device Node herausfinden. Dies unbedingt überprüfen, damit nicht aus Versehen das falsche Device formatiert wird! Dies wird etwa so aussehen:
    host $ dmesg
    [ 2160.060627]  sdb: sdb1
    [ 2160.114041] sd 4:0:0:0: [sdb] Assuming drive cache: write through
    [ 2160.114044] sd 4:0:0:0: [sdb] Attached SCSI removable disk

    In diesem Fall ist der SD Karte /dev/sdb zugewiesen worden.

  2. mksdboot Skript des TI SDKs ausführen mit Angabe des richtigen Devices! Dazu wird mit einer Konsole ins Hauptverzeichnis des SDK gewechselt und folgender Befehl ausgeführt:
    sudo bin/mksdboot.sh --device /dev/sdb --sdk /home/ntbuserti/Documents/dvdsdk_TI

    Es wird mit einem Konsolen-Output nochmals nachgefragt, ob auch wirklich das richtige Device angegeben wurde für das Formatieren, dies ist nochmals zu überprüfen und durch Enter drücken zu bestätigen.

  3. Auf die so erstellte Karte kann anschliessend bei Bedarf ein neuer Kernel in die START_HERE Partition ins root-Verzeichnis kopiert werden.

Zusatzboard GPIO

Im Betriebssystem-Unterricht besteht ein Ziel darin, einen GPIO-Treiber von Grund auf selber zu schreiben. Da die beiden LED sowie Taster auf dem Zoom Board nicht als normale GPIO benützt werden können, sondern via I²C-Expander Bus angeschlossen sind, wurde für an Stecker J30 ein Zusatzboard hergestellt.

Dabei ist zu beachten, dass die Pins des OMAP-Prozessors gemultiplext sind, das heisst zum Beispiel, der auf dem Zusatzboard verwendete GP0[2] ist auch noch ein Pin der McBSP usw. Falls also die McBSP ebenfalls verwendet werden möchte, darf unter Umständen dieser Pin nicht als GPIO konfiguriert werden.

I/0 Pin Alternativ-Funktionen
GP0[0] 92 AXR8 / CLKS1 / ECAP1_APWM1
GP0[1] 81 AXR9 / DX1
GP0[2] 23 AXR10 / DR1
GP0[6] 17 AXR14 / CLKR1
GP0[13] 73 AFSR
GP0[15] 77 ACLKR

Schema OMAPL138 Zoom Baseboard
Schema Zusatzboard

Steckverbinder

Das Zusatzboard ist über einen Stecker mit 100 Pins angeschlossen. Auf dem Board sind noch vier weitere Stecker gleichen Typs vorhanden. Diese haben folgende Bezeichnung:

Beschreibung Bezeichnung Lieferant Bestellnummer
Stecker DF40C-100DS-0.4V(51) Mouser 798-DF40C100DS0.4V51
Buchse DF40C-100DP-0.4V(51) Mouser 798-DF40C100DP0.4V51