首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可能删除调试器中的文件

不可能删除调试器中的文件
EN

Stack Overflow用户
提问于 2021-04-28 08:53:15
回答 1查看 424关注 0票数 1

我在玩调试器。在一个模块中,我在调试器文件系统中创建了一个目录'test_debugfs‘(挂载在/sys/内核/调试)和一个文件'demo_ file’。

代码语言:javascript
复制
// 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了。

代码语言:javascript
复制
# 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,我用以下代码直接删除了模块中的文件:

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 15:15:50

不能使用rm命令从debug_fs中删除文件。

调试器文件系统不支持inode目录操作中的unlink功能。因此rm命令将失败。

您必须使用调试器函数debugfs_remove(struct * dentry ),其中dentry参数是debugfs_create_file函数调用的返回值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67296923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档