Linux kernel 分配的内存是否使模块被视为;“用过的”;按内核

Linux kernel 分配的内存是否使模块被视为;“用过的”;按内核,linux-kernel,kernel,drivers,Linux Kernel,Kernel,Drivers,我是内核编程新手,目前正在使用tplink无线NIC(Atheros芯片组)的“Madwifi”驱动程序。我的内核版本是2.6.32-37(ubuntu) 我使用的驱动程序已经被其他人修改过(我不认识他们,也无法联系他们获取更多信息),我担心他们动态分配了内存(使用kmalloc),但没有适当地释放内存 我的问题是: >P>如果他们实际上没有自由分配内存,是否会使操作系统将模块视为“忙”,使其无法卸载模块? 我应该如何或在哪里释放模块中分配的内存(考虑到模块应该“永远”运行的事实) 谢谢 ome

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

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

我的问题是:

>P>如果他们实际上没有自由分配内存,是否会使操作系统将模块视为“忙”,使其无法卸载模块?

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

  • 谢谢


    omer。

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

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


    处理模块使用计数的一种方法是使用kref。有关更多信息,请参阅内核源代码树中的文档/kref.txt或。

    谢谢!:)因此,如果我理解正确,它应该不会影响加载/卸载模块?卸载模块可能会被使用计数非零(请参阅
    lsmod
    )或模块崩溃(请参阅
    dmesg
    /var/log/kernel
    )阻止。A2。模块应在其补充例程中释放、取消分配或取消注册所有获取的资源,即
    open()
    close()
    fops或
    init()
    exit()