2017-07-07 7 views
1

Ich habe meine Kamera-Treiber kompilieren und versuchen Sie es Platte von meinem Ziel zu testen i.MX6Q Ich bin vor mitEmbedded Linux Gerätetreiber Fehlercode 1-001a?

Sonde von 1-001a fehlgeschlagen mit Fehler -16

Fehler, wenn ich schau dir die dmesg | grep camera_name an, ich glaube die 1-001a beziehen sich auf den Gerätetreiber camera_name @ 1a. das ist mein Gerätetreiber

camera_name: [email protected] { 
    compatible = "camera,camera_name"; 
    reg = <0x1a>; 
    inck-name = "mclk"; 
    xvs-output-len = <8>; 
    xclr-gpio = <&gpio1 6 1 GPIO_ACTIVE_LOW>; 
    pwn-gpios = <&gpio1 6 1>; 
    clock-names = "csi_mclk"; 
    DOVDD = <&reg_1p8v>; 
    AVDD = <&reg_2p9v>; 
    DVDD = <&reg_1p2v>; 
    rst-gpios = <&gpio1 6 1>; /* xclr */  
    ipu_id = <0>;    
    csi_id = <0>; 
    mclk = <37125000>; 
    mclk_source = <0>; 
    lanes = <4>; 
}; 

Aber ich konnte nicht verstehen, was diese Fehler zu sagen ist? Hast du irgendwelche Vorschläge ? Ich konnte keine Informationen darüber finden.

Vielen Dank.

Mit freundlichen Grüßen.

+1

Überprüfen Sie * include/asm-generic/errno-base.h * für den Code. – 0andriy

Antwort

3

Diese Protokollfehler probe of 1-001a failed with error -16 informiert uns, dass:

  • Die .probe Funktion von
  • ein Gerätetreiber als 1-001a
  • identifiziert hat der Fehlerwert -EBUSY

zurückkehren Das Gerät-t Der in der Frage erwähnte ree-Knoten gehört zum Gerätetreiber.

den Grund für die oben Scheitern zu verstehen,

  1. starten, indem Sie die C-Datei im Linux-Kernel Ortung
    , die den Gerätetreiber für das obige Gerät implementiert.

  2. Weiter Suchen Sie nach der Funktion, die als Handler für ".probe" im Gerätetreiber registriert ist.

  3. Überprüfen Sie, unter welchen Bedingungen es -EBUSY zurückgibt.


errno-base.h enthält die vordefinierten Konvention von verschiedenen gemeinsamen Nummern Fehler innerhalb des Linux-Kernel definiert. Die meisten Funktionen in Linux-Kernel-Gerätetreibern und den verschiedenen Linux-Kernel-Subsystemen verwenden diese Fehlercodes als Rückgabewerte, um Fehlerbedingungen anzuzeigen.

+0

danke für deine klare Antwort, ich schaue auf die errno-base.h und finde die -EBUSY '#define \t EBUSY \t/* Gerät oder Ressource beschäftigt * /' würde es über die falsche gpio Knoten wählen oder i2c-Knoten im Gerätebaum? Und ich würde gerne wissen, wie können wir entscheiden, welcher Knoten je nach Gerät wählen? Gibt es irgendeine Ressource darüber, weil ich die xclr-gpio und pwn-gpios aus der Gerätebaumreferenz ov5640 gewählt habe, weil dieser Fehler passiert sein kann. – Mustafa

+1

Was Sie vermuten, ist eine Möglichkeit.Ein sicherer Weg, dies zu bestätigen, wäre es, die Sondenfunktion des Treibers zu lesen und zu prüfen, unter welchen Bedingungen -EBUSY zurückgegeben wird. Wenn der Treiber EBUSY unter mehr als einer Bedingung zurückgibt, können Sie versuchen, 'printk()' Anweisungen in jedem der bedingten Zweige hinzuzufügen, um den Ablauf innerhalb der Probe-Funktion zu bestätigen. – TheCodeArtist

+0

Vielen Dank für Ihren Rat, es hilft mir herauszufinden, in welchem ​​Teil des Codes diesen Fehler gibt, schrieb ich pr_info(); Funktion anstelle von printk(); aber ich denke beide sind gleich. Vielen Dank . Ich möchte noch eine Frage stellen. Während wir den Gerätebaumknoten schreiben, wie zum Beispiel zu entscheiden ist, welche GPIOs ausgewählt werden sollen, gibt es irgendwelche Informationen oder Dokumente darüber, wie diese GPSOS oder andere Dinge zu wählen sind? – Mustafa

Verwandte Themen