2017-06-20 3 views
1

ich für ein Zeichen Gerätemodul einen guten Code als Beispiel gefunden: https://github.com/euspectre/kedr/blob/master/sources/examples/sample_target/cfake.cZeichengerät: Gerät wählen lesen/schreiben

ich den Code nicht geändert und ich es getestet. Ich habe zwei Geräte bekommen (/ dev/cfake0 und/dev/cfake1), aber ich möchte etwas verstehen.

Es gibt zwei Geräte exportiert, aber nur eine Lesefunktion, wie Sie angeben, welche Lesefunktion für jedes Gerät verwenden (wenn zwei Lesefunktionen implementiert sind)?

Am Ende möchte ich zwei Zeichen Geräte (eines für I2C Kommunikation, ein anderes für SPI) auf dem gleichen Modul, das Modul und Benutzer-Raum benötigen die Kommunikation, so dass ich beide exportieren muss.

Antwort

2

Sie haben eine Funktion für jeden Anruf auf Ihrer Datei:

  • Öffnung
  • Lesen
  • Schreiben
  • Schließen
  • ...

Aber alle Funktion haben a struct file als Parameter.

Diese Struktur - die Informationen über die Datei enthält - wird vom Modul erstellt, wenn es in den Kernel geladen wird. (siehe static int __init cfake_init_module(void); Funktion).

Am Ende würde Ich mag zwei Zeichengeräte haben (einen für I2C Kommunikation, ein weiterer für SPI)

Sie das Zeug zu tun haben könnte, um so:

Im Beispiel Sie gaben an, jede Datei wird mit einem minor device number erstellt (siehe cfake_construct_device()). Mit dieser Nummer können Sie auswählen, ob es sich bei dem Gerät um ein SPI- oder ein I2C-Gerät handelt.

Ihre read Funktion könnte wie folgt aussieht:

ssize_t 
cfake_read(struct file *filp, char __user *buf, size_t count, 
    loff_t *f_pos) 
{ 
    /* reading minor device number */ 
    unsigned int mn = iminor(filp->f_inode); 

    /* select specialized function to use */ 
    if (0 == mn) 
     return cfake_read_i2c(filp, buf, count, f_pos); 
    else 
     return cfake_read_spi(filp, buf, count, f_pos); 
} 

sagte, dass ich nicht denke, es ist eine gute Idee zu haben, zwei verschiedene Protokolle in einem Modul (es sei denn, die beiden Gerät teilen Daten): Modul auf Absturz, werden Sie die zwei Kommunikationskanäle verlieren, und das Modul wird hart werden, um zu debuggen.

+0

Vielen Dank für den Tipp, ich weiß, es ist kein gutes ideo, aber ich habe ein FPGA in SPI kommunizieren, und ich muss Daten an eine Kamera teilen, die in I2C kommuniziert. – PierreOlivier

Verwandte Themen