Linux内核模块中Proc文件/目录创建与删除的问题求助
Linux内核模块中Proc文件/目录创建与删除的问题求助
我正在为课程作业编写一个Linux内核模块,遇到了一些令人困惑的问题。
首先,模块会在/proc/下创建一个文件夹,然后在该文件夹下创建一个文件/proc/folder/file。实现代码大致如下:
static struct proc_dir_entry* parent; static struct proc_dir_entry* file; // ... int __init mod_init(void) { parent = proc_mkdir("folder", NULL); if(parent == NULL) { return -ENOMEM; } file = proc_create("file", 0666, parent, &fops); if(file == NULL) { return -ENOMEM; } pr_info("Module insertion successful.\n"); return 0; }
现在模块遇到了几个问题:
- 首先,如果目标文件或文件夹已经存在,模块会返回
-ENOMEM,提示因无法分配内存导致插入失败。我希望能够区分“实际无法创建proc文件指针”和“无法覆盖已有文件/目录”这两种不同的错误场景,想知道该如何实现。 - 然后,我在卸载模块时尝试删除创建的文件和文件夹,代码如下:
void __exit mod_exit(void) { proc_remove(file); proc_remove(folder); } // (之后我绑定了加载/卸载函数)
假设之前的模块加载代码正常工作,这个卸载函数执行时没有报错,但它只删除了子文件,并没有删除对应的文件夹,导致/proc/下仍然保留着folder目录,这和我的预期不符。
TL;DR:
- 如何覆盖已存在的proc文件,同时仍能正确检查文件创建失败的情况?
- 如何删除proc文件夹,我哪里做错了?
大部分其他代码都是通用的模板,已经能正常工作,而且和我的作业细节相关。我就是搞不定这部分,网上找的文档都没覆盖这个特定问题(或者谷歌搜不到)。
编辑补充:
我忘了提,当proc_mkdir返回NULL时,用parent作为父目录调用proc_create自然也无法工作。有没有办法直接获取已有文件夹的指针?
我使用的内核版本是6.8.0-48-generic,系统是Ubuntu 20.04 LTS。
备注:内容来源于stack exchange,提问作者opl23590
相关产品推荐
相关产品推荐

