【问题标题】:How to print the list of filesystem in Linux kernel?如何在 Linux 内核中打印文件系统列表?
【发布时间】:2017-12-05 00:46:09
【问题描述】:

我要做的是列出 linux 内核模块中所有已注册的文件系统。我尝试在 fs/filesystems.c 中参考 find_filesystem(http://elixir.free-electrons.com/linux/v3.19/source/fs/filesystems.c) 编写如下代码。

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>       // for basic filesystem

MODULE_LICENSE("Dual BSD/GPL");

static struct file_system_type *file_systems;


void list_filesystem(void){
    struct file_system_type **p;
    for(p=&file_systems; *p; p=&(*p)->next){
        printk(KERN_INFO "%s\n",(*p)->name);
    }
}
static int __init filesystem_list_init(void){
    printk(KERN_INFO "Loaded list_filesystem module\n");
    list_filesystem();
    return 0;
}

static void __exit filesystem_list_exit(void){
    printk(KERN_INFO "list_filesystem module unloaded \n");
}


/* Declaration of the init and exit functions */
module_init(filesystem_list_init);
module_exit(filesystem_list_exit);

我希望这会列出所有文件系统。 但它不显示任何文件系统名称。 所以请让我知道这段代码有什么问题以及应该如何修改。

【问题讨论】:

    标签: linux-kernel filesystems


    【解决方案1】:

    在您的模块中,您无法遍历文件系统列表,因为该列表的头部 - file_systems 变量 - 对您来说是不可访问:实现文件系统列表的源文件将变量声明为 静态。您已尝试创建您自己的变量实例,但这只是一个新列表。因为没人填,所以是空的。

    文件系统列表的当前实现不提供在外部代码中迭代原始列表的方法。只能通过读取文件/proc/filesystems 来获得文本表示的文件系统列表。

    【讨论】:

    • 你说file_systems变量不可访问,这个变量以前是可访问的吗?
    • 你的意思是这个变量在以前的Linux内核版本中是否可以被外界访问?如果是这样,只需检查以前版本的源代码。请注意,要在模块中使用变量,除了非静态变量外,还应导出(使用EXPORT_SYMBOL)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2013-07-13
    相关资源
    最近更新 更多