3

Ich habe gelesen und fast durch alle Linux-Kernel-Dokumentation auf dem Gerätebaum und Gerätebaum Overlays. Ich bin nicht in der Lage zu verstehen, wenn wir ein neues Entree im Gerätebaum von erstellen müssen die Plattform oder um ein neues Overlay für das Gerät für einen neuen Treiber basierend auf der Gerätebaumstruktur zu erstellen. Ich bin auf der Suche nach einem einfachen LED leuchtenden Treiber Beispiel, wo LED ist mit GPIO Pin verbunden und seine Konfiguration ist in der Gerätebaum Overlay oder Gerätebaum Fragment auf der Board-Plattform erwähnt. Wie kann es gebaut/geschoben und getestet mit dem Benutzer Raum Anwendung.Hallo Word Device Tree Based Gerätetreiber

+0

Ich hatte ein ähnliches Problem und löste es mit dem Beispiel 'kernel_src/drivers/uio/uio_pdrv_genirq.c'. Die Informationen aus dem Gerätebaum werden über die 'of'-Funktionen (Open Firmware) empfangen. Du brauchst auch einen Kernel-Stub, wo ich 'Hans J. Koch: Userspace-I/O-Treiber in Echtzeit-Kontext 'empfehle (in der Regel hat dieser Autor mehrere Arbeiten über UIO geschrieben). – h0ch5tr4355

+0

kannst du bitte den ds-dateiinhalt, den du in die platform dtsi eingefügt hast, posten und wie hast du das gemacht und getestet? – Raulp

+0

Ich habe gerade eine benutzerdefinierte dtsi mit benutzerdefinierten kompatibel und die entsprechenden reg-Eigenschaften verwendet. In dem Gerätetreiber habe ich die compaitble in der 'struct of_device_id' geholt – h0ch5tr4355

Antwort

2
  1. Ich habe eine benutzerdefinierte Gerät in meinem Gerätebaum:

    [email protected] { 
        compatible = "my_driver"; 
        reg = <0xffdf0000 0x1000> 
        /* 
        * reg = address of device and size 
        * (Minimum is System's Pagesize = 0x1000 Byte in my case 
        */ 
    } 
    
  2. ich einen Kernel-Stub für dieses Gerät hat geschrieben:

    (Hier habe ich kernel_src/drivers/uio/uio_pdrv_genirq.c und Hans J. Koch: Userspace I/O drivers in a realtime context (Gerätetreiber-Tutorial) als Basis.)

    Dieser Stub hat folgende zwei Strukturen:

    Die of_device_id Struktur:

    static struct of_device_id my_match_table[] = { 
        { 
          .compatible = "my_driver", 
        }, 
        {0} 
    }; 
    MODULE_DEVICE_TABLE(of, my_match_table); 
    

    und der Treiber-Struktur selbst:

    static struct platform_driver my_platform_driver = { 
         .probe = my_probe, 
         .remove = my_remove, 
         .driver = { 
           .name = "my_driver", 
           .owner = THIS_MODULE, 
           .of_match_table = of_match_ptr(my_match_table), 
         }, 
    }; 
    
  3. Jetzt habe ich Zugriff auf die Eigenschaften des Gerätebaum in meiner Probe-Funktion:

    static int my_probe(struct platform_device *dev) 
    { 
         struct uio_info *uioinfo; 
         struct resource *r = &dev->resource[0]; 
         [...] 
         uioinfo->name = dev->dev.of_node->name /* name from device tree: "my_device" */ 
         uioinfo->mem[0].addr = r->start; /* device address from device tree */ 
         uioinfo->mem[0].size = resource_size(r); /* size from device tree */ 
         [...] 
    } 
    

Wenn es eine Übereinstimmung in compatible mit dem Kernel gibt Stubs Eintrag und der Gerätebaum wird die Sondenfunktion aufgerufen.

+0

bitte pm ich bei raulpbllooper bei der Rate gmail dot com mit der Betreffzeile Ihr Benutzername: h0ch5tr4355: Device tree.Ich möchte mehr darüber zu diskutieren.Thanks für das Teilen des Beispiels !! Warten auf Ihre e-Mail.Thanks noch einmal! – Raulp

+0

Ich bin auch ein Neuling auf dem Gerät Baum. Ich frage mich nur, wie Sie die Adresse der "reg" -Eigenschaft bekommen haben. Oder kann ich eine beliebige Adresse einstellen? – einstein