头文件:
#include<linux/slab.h>
原型:
void *kmalloc(size_t size, int flags);
@param size:要分配内存的大小. 以字节为单位.
@param flags:要分配内存的类型。
作用:在设备驱动程序或者内核模块中动态开辟内存
说明:
>在驱动程序和内核模块中不是用malloc(应用层代码可以用于动态分配内存),而是kmalloc ,vmalloc,或者用get_free_pages直接申请页。
>释放内存用的是kfree,vfree,或free_pages.
>kmalloc函数返回的是虚拟地址(线性地址). kmalloc特殊之处在于它分配的内存是物理上连续的,这对于要进行DMA的设备十分重要. 而用vmalloc分配的内存只是线性地址连续,物理地址不一定连续,不能直接用于DMA。
>kmalloc最大只能开辟128k-16,16个字节是被页描述符结构占用了。
>内存映射的I/O口,寄存器或者是硬件设备的RAM(如显存)一般占用F0000000以上的地址空间,在驱动程序中不能直接访问,要通过kernel函数vremap获得重新映射以后的地址。