首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编写Linux内核模块时,如何处理module_param获得的内存?

在编写Linux内核模块时,如何处理module_param获得的内存?
EN

Stack Overflow用户
提问于 2016-03-26 12:12:41
回答 1查看 266关注 0票数 0

当为Linux编写内核模块时,module_param及其变体可以将字符串作为模块参数,并且该字符串所需的内存空间是在幕后分配的,而无需显式地执行任何操作。我的问题是,你该如何处理这段记忆?如果你不再需要它,你必须显式地释放它吗?如果要从模块内部更改字符串,您应该做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-27 21:12:54

module_param为string (charp类型)参数分配的内存由此参数类型的回调来维护,参见kernel/params.c中定义的param_set_charpparam_get_charpparam_free_charp函数。

  1. 使用这种param操作的最简单方法是将其声明为只读,并从模块访问它仅供读取使用。在这种情况下,您不必为锁定访问或释放参数的值而烦恼。
  2. 如果希望从模块写入只读参数,则需要: 1)通过param_free_charp释放参数的旧值。 2)为参数赋值。如果分配了此值,则需要在module_exit或下一次写入参数时手动释放该值。 这两个操作都应该在单个关键部分kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE)内执行,这样从用户空间读取参数的值就会发现它的值完全初始化了。
  3. 如果您将参数声明为可写,那么在模块中读取需要关键部分kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE)
  4. 只有当新值存储在其他地方时,才允许将写入到可写的参数,因此,如果要从用户空间重写该参数,则可以找到它的前一个值,并在需要时释放它。 在模块内部写入和读取该参数应遵循与案例2和案例3相应的要求。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36252192

复制
相关文章

相似问题

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