2010-03-28 14 views
5

Copia e incolla il codice da questo URL per creare e leggere/scrivere un file proc utilizzando un modulo del kernel e ottenere l'errore che proc_root non è dichiarato. Questo stesso esempio si trova su alcuni siti, quindi presumo che funzioni. Qualche idea per cui avrei ricevuto questo errore? Il mio makefile ha bisogno di qualcosa di diverso. Qui di seguito è il mio makefile così:Modulo kernel Linux - Creazione file proc - proc_root errore non dichiarato

codice di esempio per la creazione di file di un proc di base (copia diretta e incolla per ottenere test iniziale fatto): http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN769

Makefile sto usando:

obj-m := counter.o 

KDIR := /MY/LINUX/SRC 

PWD := $(shell pwd) 

default: 
$(MAKE) ARCH=um -C $(KDIR) SUBDIRS=$(PWD) modules 

risposta

12

Questo esempio non è aggiornato. Sotto l'attuale API del kernel, passare NULL per la radice di procfs.

Inoltre, anziché create_proc_entry, è necessario utilizzare proc_create() con un valore corretto const struct file_operations *.

+0

Grande! Grazie. Ora posso farlo compilare correttamente. – Zach

6

C'è stata una modifica nell'interfaccia per creare una voce nel file system proc. Si può avere uno sguardo al http://pointer-overloading.blogspot.in/2013/09/linux-creating-entry-in-proc-file.html per i dettagli

Ecco un esempio 'hello_proc' con la nuova interfaccia:

#include <linux/module.h> 
#include <linux/proc_fs.h> 
#include <linux/seq_file.h> 

static int hello_proc_show(struct seq_file *m, void *v) { 
    seq_printf(m, "Hello proc!\n"); 
    return 0; 
} 

static int hello_proc_open(struct inode *inode, struct file *file) { 
    return single_open(file, hello_proc_show, NULL); 
} 

static const struct file_operations hello_proc_fops = { 
    .owner = THIS_MODULE, 
    .open = hello_proc_open, 
    .read = seq_read, 
    .llseek = seq_lseek, 
    .release = single_release, 
}; 

static int __init hello_proc_init(void) { 
    proc_create("hello_proc", 0, NULL, &hello_proc_fops); 
    return 0; 
} 

static void __exit hello_proc_exit(void) { 
    remove_proc_entry("hello_proc", NULL); 
} 

MODULE_LICENSE("GPL"); 
module_init(hello_proc_init); 
module_exit(hello_proc_exit); 
Problemi correlati