【发布时间】:2014-03-22 06:54:54
【问题描述】:
我如何知道应该在设备驱动程序中使用 kmalloc() 为设备分配内存的确切位置或时间点?
是在初始化期间还是在打开期间?和malloc一样,kmalloc会动态分配内存吗?
【问题讨论】:
标签: linux-kernel linux-device-driver device-driver
我如何知道应该在设备驱动程序中使用 kmalloc() 为设备分配内存的确切位置或时间点?
是在初始化期间还是在打开期间?和malloc一样,kmalloc会动态分配内存吗?
【问题讨论】:
标签: linux-kernel linux-device-driver device-driver
一般来说,当您需要内核空间中物理上连续的内存时,您可以使用 kmalloc()。 您可以根据您的用例在初始化/打开期间使用它。 如果您在 init() 中使用 kmalloc 但从不使用该设备,那么分配的内存就是浪费。 如果在 open() 中使用 kmalloc,则实际使用分配的内存,因为只有在使用设备时才分配内存。
另外,请注意,如果您不需要物理上连续的内存分配,您可以在内核中使用 vmalloc()。
【讨论】:
这取决于您何时需要它。没有硬性规定。
例如,在linux kernel 中的i2c 驱动程序中,有两个kmalloc 调用,而在初始化或任何特定函数中都没有调用。
是的,它的作用类似于用户空间malloc 调用并动态分配内存。
【讨论】: