debugfs_create_file不会创建文件

时间:2010-05-04 23:24:14

标签: linux linux-kernel

我正在尝试使用debugfs_create_file(...)创建debugfs文件。我已为此编写了示例代码。

static int __init mmapexample_module_init(void)                                 
 {                                                                               
         file1 = debugfs_create_file("mmap_example", 0644, NULL, NULL, &my_fops)\
 ;                                                                               
         printk(KERN_ALERT "Hello, World\n");                                    
         if(file1==NULL)                                                         
           {                                                                     
             printk(KERN_ALERT "Error occured\n");                               
           }                                                                     
         if(file1==-ENODEV)                                                      
           {                                                                     
             printk(KERN_ALERT "ENODEV occured\n");                              
           }                                                                     
         return 0;                                                               
 }  

当我运行insmod时,我可以获得Hello,World消息但没有错误消息。所以我认为debugfs_create_file工作正常。但是我在/ sys / kernel / debug中找不到任何文件。文件夹在那里,但它是空的。谁能帮我这个?谢谢......

谢谢, 巴拉

2 个答案:

答案 0 :(得分:3)

要使debugfs工作,您实际上必须有一个debugfs mountpoint:

mount -t debugfs none /sys/kernel/debug

不确定问题是否存在,但您可以查看是否安装了debugfs 在/ sys / kernel / debug

答案 1 :(得分:0)

如果file1不等于printk(KERN_ALERT "Something else happened\n")NULL,您可以考虑-ENODEV。这可能会提供一些有趣的结果。也许:

if (file1 == NULL)
    printk(KERN_ALERT "Error occurred\n");
else if (file1 == -ENODEV)
    printk(KERN_ALERT "ENODEV occurred\n");
else
    printk(KERN_ALERT "Something else occurred\n");

我不太熟悉内核编程库,但如果有一个类似于printk()的va_args接口,你可能会打印file1的值。

现在看看这个,是否有某种内核errno?或者是debugfs_create_file()返回的是什么?

<强>更新

我现在唯一能给出的帮助是以某种方式发现file1的值是什么,并调查这意味着什么。您可能想要对errno等效项进行一些探讨,看看它是否已设置。基本上相当于内核中的perror()调用。