2017-02-14 32 views
0

Мне удалось создать dentry в соответствующем пути, но теперь как я на самом деле там пишу?Запись на debugfs из модуля ядра Linux

struct dentry* log_dir = debugfs_create_dir ("my_module", NULL); 
struct dentry* log_file = debugfs_create_dir ("log", 0777, log_dir, NULL, NULL); 

ответ

1

Я бы сказал, что лучшая ссылку на то, что вам нужно сделать, будет файл debugfs.txt документации в дереве исходных текстов ядра.

Я также предполагаю, что вы сделали ошибку в вашем примере кода здесь:

struct dentry* log_file = debugfs_create_dir ("log", 0777, log_dir, NULL, NULL); 

Так это выглядит, как вы пытаетесь создать файл, а не другой каталог. Так что я думаю, что вы хотели сделать, это больше похоже на это:

struct dentry* log_file = debugfs_create_file("log", 0777, log_dir, NULL, &log_fops); 

где log_fops бы, возможно, что-то вроде этого:

static const struct file_operations log_fops = { 
    .owner = THIS_MODULE, 
    .read = log_read, 
    .write = log_write, /* maybe you don't need this */ 
}; 

И, конечно, вы также должны реализовать log_read и log_write:

ssize_t log_read(struct file *file, char __user *buff, size_t count, loff_t *offset); 

ssize_t log_write(struct file *file, const char __user *buff, size_t count, loff_t *offset);