Zum Inhalt springen

Can4linux

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 20. September 2010 um 02:07 Uhr durch MerlBot (Diskussion | Beiträge) (+QS WP:Wikifizieren: Kategorien fehlen). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Dieser Artikel wurde am 20. September 2010 auf den Seiten der Qualitätssicherung eingetragen. Bitte hilf mit, ihn zu verbessern, und beteilige dich bitte an der Diskussion!
Folgendes muss noch verbessert werden: WP:Wikifizieren: Kategorien fehlen -- MerlBot 02:07, 20. Sep. 2010 (CEST)
Portal: Freie Software – Übersicht zu Wikipedia-Inhalten zum Thema Freie Software

can4linux ist ein open source CAN Gerätetreiber für den Linux-Kernel. Die Entwicklung begann Mitte der 1990er Jahre für den CAN Controller Baustein Philips 82C200 auf einem ISA Board AT-CAN-MINI. Die erste Version entstand um 1995 im Rahmen des Linux Lab project an der FU-Berlin, um unter Linux den CAN Bus in der Laborautomatisierung zu nutzen.

Durch die zunehmende Verbreitung von CAN in der Automatisierungstechnik insbesondere auch im embedded Bereich, in dem seit der Jahrtausendwende auch verstärkt Linux eingesetzt wird, kommt Gerätetreibern als Basis für höhere CAN basierende Protokolle wie CANopen, J1939 und DeviceNet. eine gestiegene Bedeutung zu.

Neben dem NXP SJA1000 als Nachfolger des CAN Controllers Philips 82C200 und dem Intel 82527 wurden ab 2005 verstärkt Anpassungen für so genannte integrierte CAN Controller in leistungsstarken Mikrocontrollern, für die Linux Portierungen existieren, erstellt. Als Beispiele sollen hier die Freescale ColdFire Prozessoren [1] oder ARM Derivate von ATMEL und Freescale [2] genannt werden.

Eine Liste befindet sich auf der can4linux Projekt Seite [3].

Benutzung

Die Anwendungssoftware öffnet einen CAN Device Descriptor und erhält einen File Descriptor. Über diesen werden die CAN Frames über die Standard Betriebssystem Funktionen read() und write() mit anderen Teilnehmern am CAN Bus ausgetauscht.

Der folgende Code ist ein Beispiel, welches einen Frame sendet und anschließend auf einen Frame von einem anderen Bus Teilnehmer wartet. Weitere Beispiele befinden sich auf der Projekt Seite [4].

/* simple CAN application example 
 * 
 * used for the Wikipedia article on can4linux
 */
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

#include <can4linux.h>

int main(int argc,char **argv)
{
int fd;
canmsg_t frame;
    
    fd = open("/dev/can0", O_RDONLY);

    frame.id      = 100;
    frame.length  = 2;
    frame.data[0] = 5;
    frame.data[1] = 0;
    write(fd, &frame, 1); /* ! count enthält Anzahl Frames, nicht Byte */

    read(fd, &frame, 1);  /* ! count enthält Anzahl Frames, nicht Byte */
    printf("received CAN Frame Id %ld\n", frame.id);
    return 0;
}

can4linux kann so übersetzt werden, dass verschiedenen Prozesse auf den gleichen CAN Controller Lesend und Schreibend zugreifen können. Auf diese Weise kann z.B. neben der eigentlichen Anwendung ein unabhängiger Diagnoseprozess den Bus beobachten.

References

  1. Freescale ColdFire
  2. Freescale i.MX35 Familie
  3. can4linux Projekt Seite
  4. Online can4linux-examples

[[Category:Linux drivers]]