Es gilt also, erst einmal auf den Standard-Kernel von Raspbian zu wechseln (Listing 2, Zeile 1) und anschließend in der Datei /boot/config.txt den neuen Kernel einzutragen (kernel=vmlinuz-3.6-trunk-rpi). Nach einem anschließenden Neustart fehlt zwar noch der Peak-Treiber [3] (Listing 2, Zeile 2), aber es liegen zumindest die passenden Header-Files vor, sodass man den Treiber nun übersetzen und installieren kann (Listing 3).
Listing 2
$ sudo apt-get install linux-image-3.6-trunk-rpi linux-headers-3.6-trunk-rpi libpopt-dev $ grep CAN_PEAK /boot/config-3.6-trunk-rpi # CONFIG_CAN_PEAK_USB is not set
Listing 3
$ wget http://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-7.9.tar.gz $ tar xvzf peak-linux-driver-7.9.tar.gz $ cd peak-linux-driver-7.9 $ make PCI=NO_PCI_SUPPORT USB=USB_SUPPORT $ sudo make install $ sudo depmod -a
Damit liegt das Modul nun einsatzbereit vor. Man lädt es entweder selbst mit sudo modprobe pcan oder steckt den CAN-Adapter ein – das Modul wird dann automatisch geladen. Im Fall eines Kernel-Updates darf man allerdings nicht vergessen, den CAN-Treiber wieder zu kompilieren und neu zu installieren.
Der PCAN-Treiber legt bei der Installation automatisch die Datei /etc/modprobe.d/pcan.conf an. Um die Bitrate des CAN-Busses auf 1 Mbit/s zu erhöhen, muss man bei diesem Modul die Geschwindigkeit beim Laden des Moduls angeben – automatisiert klappt das beispielsweise mit options pcan bitrate=0x0014 in dieser Datei. Werte für andere Geschwindigkeiten finden Sie in der Tabelle “PCAN-Modul: Geschwindigkeiten” (entnommen aus dem PCAN-Quellcode). Bei anderen CAN-Modulen erreichen Sie dasselbe mit folgendem Befehl:
# ip link set can0 type can bitrate 1000000
PCAN-Modul: Geschwindigkeiten
|
Bitrate |
Moduloption |
|---|---|
|
1000 kbit/s |
0x0014 |
|
500 kbit/s |
0x001C |
|
250 kbit/s |
0x011C |
|
125 kbit/s |
0x031C |
|
100 kbit/s |
0x432F |
|
50 kbit/s |
0x472F |
|
20 kbit/s |
0x532F |
|
10 kbit/s |
0x672F |
|
5 kbit/s |
0x7F7F |
Zum Zugriff auf das CAN-Netzwerk-Device gibt es im Userspace die Can-Utilities [4], die man nach dem Herunterladen des Quellcodes mit make; sudo make install installiert. Zum Auslesen des CAN-Busses dient das Tool candump (siehe Listing 1). Ein Datenpaket auf dem CAN-Bus besteht aus einer 11 Bit langen CAN-ID, es folgen eine Längenangabe (1 bis 8 Byte) sowie die Daten. Bei Bedarf ließen sich mit cansend sogar eigene Nachrichten in den CAN-Bus schreiben.
Netzanbindung
Zur Datenübertragung aus dem Rennwagen auf einen Laptop kommt eine Internetverbindung via 3G-Datenstick zum Einsatz. Der Raspberry Pi erkennt den Stick beim Einbinden automatisch als Datenspeicher, was unter Windows zwar den Installationsvorgang erleichtert, unter Linux aber nichts bringt. Um hier auf den Netzwerkmodus umzuschalten, gilt es, einen SCSI-Code an den Stick zu senden. Dazu dient das Programm sg_raw aus dem Paket sg3_utils:
$ /usr/bin/sg_raw /dev/sr0 11 06 20 00 00 00 00 00 01 00
Alternativ klappt die Umstellung auch mit dem Programm usb_modeswitch [5]. Nach der Umstellung bleibt der Stick im neuen Modus. Der Windows-Treiber allerdings lässt sich nun nicht mehr erreichen – möchten Sie den Stick auch auf einem Windows-Rechner nutzen, müssen Sie den Treiber vorher herunterkopieren.
Unter Linux lässt sich der UMTS-Stick nach der Umstellung über das Device /dev/ttyUSB0 ansprechen, mittels wvdial stellt man eine Netzwerkverbindung her. Um den Vorgang zu automatisieren, tragen Sie in /etc/network/interfaces die Zeilen aus Listing 4 ein.
Listing 4
auto ppp0 iface ppp0 inet wvdial provider Providername
Die Datei /etc/wvdial.conf nimmt dabei die providerspezifische Konfiguration auf. Hier darf man durchaus mehrere Provider eintragen. Bei einem Formula-Student-Wettbewerb im Ausland lässt sich dann einfach eine landesspezifische SIM-Karte einsetzen und der Providername in /etc/network/interfaces ändern.
Nun besitzt der RasPi über den UMTS-Stick eine Internetanbindung. Um die öffentliche IP-Adresse des Minirechners herauszufinden, wurde ein einfacher Redirect-Service programmiert: Der RasPi ruft mit wget eine externe Webseite auf, diese speichert die IP-Adresse, und eine weitere Webseite leitet mit dem PHP-Befehl header("Location: http://$ip/"); (wobei $ip die gespeicherte IP enthält) auf den RasPi weiter. Ein (öffentlicher oder selbst programmierter) DynDNS-Dienst könnte Ähnliches leisten.
Die Telemetriedaten erscheinen benutzerfreundlich aufbereitet auf einer Webseite. Dazu läuft auf dem Raspberry Pi ein Apache-Webserver. Dieser lässt sich mitsamt aller benötigten Pakete mit dem Befehl aus Listing 5 einrichten
Listing 5
$ sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server





