malloc

kernel malloc

在应用程序中获取内存通常使用函数malloc(),但在设备驱动程序中动态开辟内存可以以字节或页面为单位。其中,以字节为单位分配内存的函数有kmalloc(),注意的是,kmalloc()函数返回的是物理地址,而malloc()等返回的是线性虚拟地址,因此在驱动程序中不能使用malloc()函数。与malloc()不同,kmalloc()申请空间有大小限制。长度是2的整次方,并且不会对所获取的内存空间清零。
以页为单位分配内存的函数如下所示:

get_zeroed_page():获得一个已清零页面。
get_free_page():获得一个或几个连续页面。
get_dma_pages():获得用于DMA传输的页面。

与之相对应的释放内存用也有kfree()或free_page函数族。

头文件 #include
函数原型 void* kmalloc(unsigned int len,int flags)
len 希望申请的字节数
flags GFP_KERNEL 内核内存通常的分配方法,会引发睡眠
返回值 成功写入的数据长度,失败返回 -EFAULT

malloc 和 slab 的关联

:)