我要做的是在linux内核模块中列出所有已注册的文件系统。我尝试在fs / filesystems.c中编写类似下面的代码来引用find_filesystem(http://elixir.free-electrons.com/linux/v3.19/source/fs/filesystems.c)。 / p>
#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);
我希望这个列表中的所有文件系统。 但它不显示任何文件系统名称。 所以请让我知道这段代码的错误以及如何修改它。
答案 0 :(得分:0)
在你的模块中,你无法迭代文件系统列表,因为该列表的头部 - file_systems
变量 - 对于你来说是不可访问的:实现文件系统列表的源文件将变量声明为的静态即可。您已尝试创建您自己的变量实例,但这只是新列表。没有人填补它,它是空的。
文件系统列表的当前实现没有提供在外部代码中迭代原始列表的方法。只能通过读取文件/proc/filesystems
来获取文本表示中的文件系统列表。