我们如何在linux驱动程序代码中使用kmalloc

时间:2014-03-19 06:47:40

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

通常,当您需要内核空间中的物理内存时,可以使用kmalloc()。 您可以在init / open期间使用它,具体取决于您的使用案例。 如果您在init()中使用kmalloc但从不使用该设备,那么分配的内存就是浪费。 如果在open()中使用kmalloc,则实际使用分配的内存,因为仅在使用设备时才分配内存。

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