内核模块中分配内存有很多方法和函数:
1、kmalloc(),这是最常使用的函数,速度快且分配的内存在物理上是连续的,但一般情况下它所能分配的最大内存大小为128k字节。
2、__get_free_pages(),分配指定连续页的内存,性质同kmalloc()但却可以分配更多的连续的物理内存,当然,和kmalloc一样,其返回值也是内核虚拟地址。
3、vmalloc(),该函数分配的内存在物理上可能不连续,其分配的内存不但使用起来稍微低效而且无法被外部设备作为DMA传输使用,不推荐在内核模块中使用,只有当需要分配一个大的且只在软件中使用的缓冲时才建议考虑。vmalloc()还无法在原子上下文中使用。