Linux内核模块是否有内存限制?

bin*_*inW 1 linux-device-driver linux-kernel

Linux内核模块对内存使用有任何限制,即代码段大小或全局内存量或任何内容.

Bjo*_*rnD 5

  • 在2.6.35中,如果要加载的模块的长度超过64 MB,load_module()将退出:http://lxr.linux.no/#linux+v2.6.35/kernel/module.c#L2118
  • vmalloc()用于为模块分配空间 - 如果您尝试分配的内容多于物理内存中可用的页面,则会失败(这反过来可能只是内存较低的嵌入式内容的问题)
  • 此外,使用kzalloc()(以及kmalloc()).根据使用的分配器(SLAB,SLOB,SLUB),也可能存在限制.SLAB定义了一个KMALLOC_MAX_SIZE,它定义了通过单次调用kmalloc()可以分配的最大字节数.