2014-11-07 19 views
15

Sto provando a utilizzare la funzione create_proc_entry() per creare una directory in/proc. Quando provo a compilare il codice, ottengo il seguente errore: dichiarazione implicita della funzione 'create_proc_entry'.dichiarazione implicita di funzione 'create_proc_entry'

Queste sono le intestazioni che ho incluso nel mio file .c:

#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> 

La versione del kernel sulla macchina che sto cercando di compilare per è: 3.10.33-g7954807-sporco

Mi mancano le intestazioni necessarie per chiamare questo metodo? O il metodo è deprecato nella mia versione del kernel?

risposta

20

/proc Il file system è stato refactored in 3.10, la funzione che si sta cercando è stata rimossa, è necessario utilizzare la famiglia di funzioni proc_create completa. Si noti che le firme sono diverse.

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

3,9 versione:

È possibile trovare una maggiore spiegazione di utilizzare pienamente le funzioni selezionate/proc nei driver libro di periferica Linux 4, o, se si vuole una soluzione più breve, controllare questo collegamento (https://github.com/jesstess/ldd4/blob/master/scull/main.c) dove è possibile vedere come è stato utilizzato il struct file_operations. Non è necessario impostare tutti i campi della struttura.

+0

Vedo che è necessario creare una struct file_operations per utilizzare proc_create. Qual è la nomenclatura della creazione di un callback per il membro .write? – theNoobProgrammer

+0

@theNoobProgrammer Ho modificato la risposta, spero che aiuti. –

+0

Il metodo in questo collegamento sembra essere eccessivo per i miei scopi. Sto essenzialmente cercando di farlo: http://www.ibm.com/developerworks/linux/library/l-proc/index.html. Sono stato in grado di eseguire questo dal mio ospite. La directory creata (/ proc/fortune) una volta montata potrebbe essere scritta e letta da. Ma sul dispositivo che sto sviluppando non contiene create_proc_entry() ma ha proc_create(). Sto semplicemente cercando di cambiare le richiamate di lettura/scrittura dal link per lavorare con le strutture file_operation. Non penso di aver bisogno di andare avanti con letture sequenziali di file. – theNoobProgrammer

Problemi correlati