PF_CAN

[caption id=“” align=“alignright” width=“144” caption=“Image via Wikipedia”]Tux, the Linux penguin[/caption]

Der Linux Kernel unterstützt seit Version 2.6.25. Controller Area Network (CAN). Dies ist ein Busstandard, der vor allem in Fahrzeugen aber auch in anderen schwierigen Umgebungen verwendet wird. Er wurde in den 80er Jahren entwickelt und ist bis heute das wesentliche Kommunikationsmedium für Steuergeräte. CAN-Busse zeichnen sich durch eine hohe Störsicherheit und einen geringen Rechenaufwand für die beteiligten Controller aus.

Es gibt eine Vielzahl an proprietären Hard- und Softwarelösungen, mit denen herkömmliche Computer an CAN-Busse angeschlossen werden könnten, die teilweise ein Vermögen kosten. In der Volkswagen Konzernforschung wurde eine Implementierung entwickelt, die auf Linux Sockets aufsetzt und den Namen SocketCAN trägt. Diese macht es sich zu Nutze, dass ein kompletter Netzwerk-Stack bereits im Kernel vorhanden ist und einfach um ein weiteres Protokoll erweitert werden kann. Viele andere Treiber für CAN-Devices stellen eine Art serieller Schnittstelle bereit, über die eine Anwendung dann mit dem Gerät kommunizieren kann.

Über den CAN Broadcast Manager ist es möglich, bereits im Kernel relevante Frames herauszufiltern und nur diese an die Applikation weiterzuleiten. Dafür kann sowohl eine Überprüfung des Inhalts als auch der ID stattfinden. Dies führt dazu, dass die Menge der Daten, die eine Anwendung erreichen, klein gehalten wird, um die Performance zu verbessern.

In einem älteren Artikel von LWN.net findet sich eine kurze Beschreibung des Projekts und ein Interview mit einem der Entwickler. Ein Zitat aus diesem Artikel macht deutlich, dass diese Entwicklung tatsächlich eine Besonderheit ist:

But it is rather less common to see companies whose core competence is far from kernel hacking try to contribute changes back to the mainline.

Es ist schön zu sehen, wie der Volkswagen Konzern, der Linux an vielen Stellen einsetzt, über ein solches Projekt upstream ein kleines Bisschen zurückgibt. Außerdem steigert es die Motivation, wenn man mit Entwicklern, die an dem Projekt mitarbeiten auf einem Flur sitzt ;-).