【发布时间】:2015-07-09 03:14:42
【问题描述】:
我正在尝试学习 sysfs,并尝试编写一个简单的 sysfs 目录。代码如下
static struct kobject *example_kobject;
static int __init mymodule_init (void)
{
pr_debug("Module initialized successfully \n");
example_kobject = kobject_create_and_add("kobject_example",
kernel_kobj);
if(!example_kobject)
return -ENOMEM;
return 0;
}
static void __exit mymodule_exit (void)
{
pr_debug ("Module un initialized successfully \n");
// kobject_put(example_kobject); <-- Forgot to delete
}
module_init(mymodule_init);
module_exit(mymodule_exit);
如 mymodule_exit 所示,我错误地忘记取消注释代码,然后插入并 rmmod 模块。
现在当我尝试再次插入模块时,初始化失败,因为条目已经存在。
我知道,允许用户空间删除内核创建的条目是没有意义的。但是,我仍然想知道除了重新启动盒子之外,是否还有其他方法可以删除特定的 /sys/kernel/kobject_example 条目。
【问题讨论】:
-
当您的模块尝试加载和删除并再次创建它时,重新启动盒子或获取它的句柄?
-
哦!!我得到了第二部分,在用户空间中还有其他方法吗?
-
@Pradheep:通常,您无法从用户空间修复内核代码问题。在你的情况下,你不能删除
kobject在用户空间中。
标签: linux-kernel sysfs