【问题标题】:how do we use kmalloc in linux driver code我们如何在 linux 驱动程序代码中使用 kmalloc
【发布时间】:2014-03-22 06:54:54
【问题描述】:

我如何知道应该在设备驱动程序中使用 kmalloc() 为设备分配内存的确切位置或时间点?

是在初始化期间还是在打开期间?和malloc一样,kmalloc会动态分配内存吗?

【问题讨论】:

    标签: linux-kernel linux-device-driver device-driver


    【解决方案1】:

    一般来说,当您需要内核空间中物理上连续的内存时,您可以使用 kmalloc()。 您可以根据您的用例在初始化/打开期间使用它。 如果您在 init() 中使用 kmalloc 但从不使用该设备,那么分配的内存就是浪费。 如果在 open() 中使用 kmalloc,则实际使用分配的内存,因为只有在使用设备时才分配内存。

    另外,请注意,如果您不需要物理上连续的内存分配,您可以在内核中使用 vmalloc()。

    【讨论】:

      【解决方案2】:

      这取决于您何时需要它。没有硬性规定。

      例如,在linux kernel 中的i2c 驱动程序中,有两个kmalloc 调用,而在初始化或任何特定函数中都没有调用。

      是的,它的作用类似于用户空间malloc 调用并动态分配内存。

      【讨论】:

        猜你喜欢
        • 2016-08-14
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 2015-09-27
        • 1970-01-01
        相关资源
        最近更新 更多