当为Linux编写内核模块时,module_param及其变体可以将字符串作为模块参数,并且该字符串所需的内存空间是在幕后分配的,而无需显式地执行任何操作。我的问题是,你该如何处理这段记忆?如果你不再需要它,你必须显式地释放它吗?如果要从模块内部更改字符串,您应该做什么?
发布于 2016-03-27 21:12:54
module_param为string (charp类型)参数分配的内存由此参数类型的回调来维护,参见kernel/params.c中定义的param_set_charp、param_get_charp和param_free_charp函数。
param_free_charp释放参数的旧值。
2)为参数赋值。如果分配了此值,则需要在module_exit或下一次写入参数时手动释放该值。
这两个操作都应该在单个关键部分kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE)内执行,这样从用户空间读取参数的值就会发现它的值完全初始化了。kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE)。https://stackoverflow.com/questions/36252192
复制相似问题