【问题标题】:Do built-in kernel drivers need kfree?内置内核驱动需要kfree吗?
【发布时间】:2015-03-04 16:08:02
【问题描述】:

对于编译到 Linux 内核中的设备驱动程序,是否应该通过相应的 kfree() 调用来释放 kmalloc 的内存?

我说的是在初始化时分配一次的内存,而不是在驱动程序生命周期内连续分配的内存。我假设没有必要释放分配的内存,因为内置驱动程序的生命周期是内核的生命周期。是的,分配的内存是驱动程序运行所必需的,在驱动程序初始化后无法释放;即不可能有 __init 宏。

我没有看到上面的明确说明,想确定一下。

【问题讨论】:

  • 驱动程序如何在编码时知道它是编译为内置还是模块?
  • @Miline,很少有模块不能编译为模块。它们通常由 Kconfig 中的布尔选择器标记。

标签: memory-management linux-kernel driver


【解决方案1】:

这取决于。但是很少有模块(它们是驱动程序)不能这样编译。而且它是一种很好的编程风格。

顺便说一句,您可以考虑使用设备管理的资源,例如通过devm_kzalloc 分配的内存。它将负责探测阶段分配的资源,并允许您在那里清理错误路径。

【讨论】:

  • 感谢您对devm_kzalloc 的提醒。在这种情况下,驱动程序用于嵌入式设备的低级初始化。卸载此驱动程序后,设备无法运行。
  • 在其Kconfig 选项中添加一个布尔选择器,并随意使用常规kzalloc(),但仍要小心。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 2012-09-27
  • 2017-02-07
  • 1970-01-01
  • 2011-11-10
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多