无法在 debugfs 中删除文件
Impossible to delete file in debugfs
我正在玩 debugfs。在一个模块中,我在 debugfs 文件系统(安装在 /sys/kernel/debug)中创建了一个目录 'test_debugfs' 和一个文件 'demo_file'.
// Create the test_debufs in /sys/kernel/debug
struct dentry * my_dirent;
static int __init my_module_init_module(void) {
my_dirent = debugfs_create_dir("test_debugfs", NULL);
debugfs_create_file("demo_file", 0666, my_dirent, NULL, &fops_debugfs);
}
不幸的是,我忘记在模块卸载时删除目录,现在我无法删除demo_file。
# rmmod my_module
# cd /sys/kernel/debug/test_debugfs
# ls
demo_file
# rm -rf demo_file
rm: cannot remove 'demo_file': Operation not permitted
# sstat
File: demo_file
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 6h/6d Inode: 16426 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-04-28 10:20:14.807999989 +0200
Modify: 2021-04-28 10:20:14.807999989 +0200
Change: 2021-04-28 10:20:14.807999989 +0200
Birth: -
重新启动我的机器后,demo_file 仍然存在。
你知道我怎样才能删除它吗?
回答:
感谢 Varun,我设法使用以下代码直接在模块中删除了文件:
struct dentry * my_dirent;
static int __init my_module_init_module(void) {
struct path path;
ret = kern_path("/sys/kernel/debug/test_debugfs", LOOKUP_DIRECTORY, &path);
if (ret)
pr_err("Failed to lookup /sys/kernel/debug/test_debugfs err %d\n", ret);
else
debugfs_remove_recursive(path.dentry);
}
您不能使用 rm 命令从 debug_fs..
中删除文件
debugfs 文件系统不支持目录 inode 操作中的取消链接功能。因此 rm 命令将失败
您必须使用 debugfs 函数 void debugfs_remove(struct dentry *dentry) 其中 dentry 参数是来自 debugfs_create_file 函数调用
的 return 值
我正在玩 debugfs。在一个模块中,我在 debugfs 文件系统(安装在 /sys/kernel/debug)中创建了一个目录 'test_debugfs' 和一个文件 'demo_file'.
// Create the test_debufs in /sys/kernel/debug
struct dentry * my_dirent;
static int __init my_module_init_module(void) {
my_dirent = debugfs_create_dir("test_debugfs", NULL);
debugfs_create_file("demo_file", 0666, my_dirent, NULL, &fops_debugfs);
}
不幸的是,我忘记在模块卸载时删除目录,现在我无法删除demo_file。
# rmmod my_module
# cd /sys/kernel/debug/test_debugfs
# ls
demo_file
# rm -rf demo_file
rm: cannot remove 'demo_file': Operation not permitted
# sstat
File: demo_file
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 6h/6d Inode: 16426 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-04-28 10:20:14.807999989 +0200
Modify: 2021-04-28 10:20:14.807999989 +0200
Change: 2021-04-28 10:20:14.807999989 +0200
Birth: -
重新启动我的机器后,demo_file 仍然存在。
你知道我怎样才能删除它吗?
回答: 感谢 Varun,我设法使用以下代码直接在模块中删除了文件:
struct dentry * my_dirent;
static int __init my_module_init_module(void) {
struct path path;
ret = kern_path("/sys/kernel/debug/test_debugfs", LOOKUP_DIRECTORY, &path);
if (ret)
pr_err("Failed to lookup /sys/kernel/debug/test_debugfs err %d\n", ret);
else
debugfs_remove_recursive(path.dentry);
}
您不能使用 rm 命令从 debug_fs..
中删除文件debugfs 文件系统不支持目录 inode 操作中的取消链接功能。因此 rm 命令将失败
您必须使用 debugfs 函数 void debugfs_remove(struct dentry *dentry) 其中 dentry 参数是来自 debugfs_create_file 函数调用
的 return 值