2014-11-07 16 views
15

Ich versuche mit der Funktion create_proc_entry() ein Verzeichnis unter/proc zu erstellen. Wenn ich versuche, den Code zu kompilieren, erhalte ich den folgenden Fehler: implizite Deklaration der Funktion 'create_proc_entry'.implizite Deklaration der Funktion 'create_proc_entry'

Dies sind die Header ich in meiner C-Datei enthalten sind:

#include <linux/module.h> 
#include <linux/kernel.h> 
#include <linux/proc_fs.h> 
#include <linux/string.h> 
#include <linux/vmalloc.h> 
#include <linux/uaccess.h> 

Die Kernel-Version auf der Maschine zu kompilieren ich versuche: 3.10.33-g7954807-dirty

Fehle ich irgendwelche Header, um diese Methode aufzurufen? Oder ist die Methode in meiner Version des Kernels veraltet?

Antwort

20

/Proc-Dateisystem wurde in 3.10 umstrukturiert, die gesuchte Funktion wurde entfernt, Sie sollten die vollständige Funktionsfamilie proc_create verwenden. Beachten Sie, dass die Signaturen unterschiedlich sind.

3.10 Version: http://lxr.free-electrons.com/source/include/linux/proc_fs.h?v=3.10

3,9 Version:

Sie mehr Erklärung mit vollem Funktionsumfang/proc-Funktionen im Buch Linux Device Drivers 4 oder finden können, wenn Sie kürzere Lösung wollen, Überprüfen Sie diesen Link (https://github.com/jesstess/ldd4/blob/master/scull/main.c), wo Sie sehen können, wie die struct file_operations verwendet wurde. Sie müssen nicht für alle Felder der Struktur einrichten.

+0

Ich sehe, dass eine Struktur file_operations erstellt werden muss, um proc_create zu verwenden. Wie lautet die Nomenklatur zum Erstellen eines Callbacks für den .write-Member? – theNoobProgrammer

+0

@theNoobProgrammer Ich habe die Antwort bearbeitet, hoffe, es hilft. –

+0

Die Methode in diesem Link scheint für meine Zwecke übertrieben zu sein. Ich versuche im Wesentlichen, dies zu tun: http://www.ibm.com/developerworks/linux/library/l-proc/index.html. Ich konnte das von meinem Gastgeber aus ausführen. Das einmal gemountete Verzeichnis (/ proc/fortune) könnte in geschrieben und gelesen werden. Aber auf dem Gerät, für das ich entwickle, enthält nicht create_proc_entry(), sondern das proc_create(). Ich versuche einfach, die Lese-/Schreib-Rückrufe von dem Link zu ändern, um mit file_operation-Strukturen zu arbeiten. Ich denke nicht, dass ich mit sequenziellen Dateilesevorgängen weitermachen muss. – theNoobProgrammer

Verwandte Themen