【问题标题】:Does allocated memory make a module to be considered as "used" by the kernel分配的内存是否使模块被内核视为“已使用”
【发布时间】:2013-02-17 12:50:14
【问题描述】:

我是内核编程的新手,目前正在使用 tplink 无线网卡(Atheros 芯片组)的“Madwifi”驱动程序。我的内核版本是 2.6.32-37 (ubuntu)。

我正在使用已被其他人修改过的驱动程序(我不认识也无法联系以获取更多信息),我担心他们动态分配内存(使用 kmalloc)但没有适当释放它。

我的问题是:

  1. 如果他们确实没有释放分配的内存,是否会让操作系统认为模块“忙”,从而无法卸载模块?

  2. 我应该如何或在哪里释放模块中分配的内存(考虑到模块应该“永远”运行的事实)?

谢谢!

异构体。

【问题讨论】:

  • A2.模块应在其补充例程中释放、取消分配或取消注册其所有获取的资源,即open()close() fops init()exit()

标签: linux-kernel kernel drivers


【解决方案1】:

没有。使用kmalloc(或其任何同事)分配内存不会增加模块的use-count。分配内存的所有权可以随时更改,只需将地址(保存在指针变量中)传递给另一个存储在某处的模块/块。内核没有跟踪这个。

如何共享、给予和获取内存在很大程度上取决于编码架构和编码模型的选择。这是用 C 编写的;没有规则。

处理模块使用计数的一种方法是使用 kref。有关详细信息,请参阅内核源树中的 Documentation/kref.txthere

【讨论】:

  • 谢谢! :) 所以如果我理解正确,它应该不会影响加载\卸载模块?
  • 可以通过使使用计数非零(参见lsmod)或模块崩溃(参见dmesg/var/log/kernel)来阻止卸载模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2011-01-15
相关资源
最近更新 更多