Navilock NL-551EUSB GPS auf ARDrone 2 und Kernel-Module Cross-Compilen

Nachdem wir die RGM-2000 TTL GPS-Maus unter freiem Himmel auf einem Fußballfeld testen konnten, mussten wir feststellen, dass diese eine Kaltstartzeit von über 30 Minuten hat. Dies ist für unsere Zwecke nicht praktikabel. Deshalb versuchten wir, ein anderes GPS-Modul an die ARDrone anzuschließen. Hierfür steht uns das Navilock NL-551EUSB zur Verfügung, das eine Kaltstartzeit von 30 Sekunden verspricht. Dieses Modul wird nicht, wie das RGM-2000 über TTL mit der Drohne verbunden, sondern über einen USB-Anschluss. Dank der Dokumentation der seriellen Schnittstelle wissen wir, dass man über die selbe Schnittstelle auch USB-Devices anschließen kann. Hierfür fehlen auf der Drohne allerdings die entsprechenden Treiber, die man sich zunächst Cross-Compilieren muss.

Die offizielle Dokumentation des GPS-Chips schlägt den cdc_acm Treiber vor, deshalb entschieden wir uns diesen auch zu benutzen.

Zunächst benötigt man einen ARM-Cross-Compiler. Ich benutze die Linaro-Toolchain auf Xubuntu 10.04.
Um Module für die ARDrone zu kompilieren benötigt man außerdem den Kernel-Sourcecode (die linux.tar.gz)
Das Archiv herunterladen und entpacken

Um den Kernel erfolgreich zu bauen benötigt man eine .config Datei, in welcher die Konfiguration des Builds festgehalten ist. Ich empfehle die hier verlinkte. Sie unterscheidet sich von der Originalen, welche Parrot unter dem Namen kernel.config mit dem Kernel-Sourcecode mitliefert, nur darin dass die benötigten Treiber jetzt als Module kompiliert werden und die CONFIG_LOCALVERSION_AUTO Flag deaktiviert wurde. Diese Datei nun in das Kernel-Verzeichnis kopieren.

Als nächstes müssen wir dafür sorgen, dass unsere kompilierten Module den selben Versionmagic-String wie unser AR.Drone-Kernel haben. Ist dies nicht der Fall, dann bekommt man beim Laden des Moduls die Meldung

Um den Version-String herauszufinden, mit Telnet auf die Drohne verbinden und

aufrufen. Man bekommt die Version des Kernels angezeigt, bei unserer ARDrone ist das 2.6.32.9-gbb4d210

Nun die Makefile im Kernel-Verzeichnis öffnen und die Zeile

ersetzen durch

Jetzt kann man mit

alle Kernelmodule bauen.
Die CROSS_COMPILE Flag bezeichnet den Präfix, der den allen Compiler Binaries (gcc, g++, ar, …) vorangestellt wird.
Die fertigen Module liegen dann in den entsprechenden Ordnern, in denen ihre Quellcode-Dateien liegen.
Für unser Projekt benötigen wir <kernel_path>/drivers/usb/class/cdc-acm.ko

Diese Datei wird per FTP auf die AR.Drone kopiert. Danach verbinden wir uns via Telnet mit der AR.Drone und laden das Modul.

Wenn man jetzt den GPS-Empfänger einstöpselt, erscheint das Device /dev/ttyACM0.

Der Aufruf von

zeigt, dass alles funktioniert hat. Das Start-Kommando für gpsd ändert sich dann natürlich entsprechend:

Quellen:

2 thoughts on “Navilock NL-551EUSB GPS auf ARDrone 2 und Kernel-Module Cross-Compilen”

  1. Schade das Toolchain ist nicht mehr vorhanden … Gcc-arm-linux kann leider nicht per sudo befehl installiert werden

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">