Dies ist eine alte Version des Dokuments!
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.
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.
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.
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.
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:
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.
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.
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.
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 |