当前位置: 技术问答>linux和unix
在内核模块中想使用一个超过3M的大全局数据,可以吗?
来源: 互联网 发布时间:2016-09-25
本文导语: 如题。 | 4M, 想办法隔断,或者不要使用模块了。 | 是可以的, 在启动参数里首先声明可用内存大小 cmdline=... mem=XXM: void* alloc_bootmem(unsigned long size) 可以在Linux内核引...
如题。
|
4M, 想办法隔断,或者不要使用模块了。
|
是可以的, 在启动参数里首先声明可用内存大小 cmdline=... mem=XXM:
void* alloc_bootmem(unsigned long size)
可以在Linux内核引导过程中绕过伙伴系统来分配大块内存。使用方法是在Linux内核引导时,调用mem_init函数之前 用alloc_bootmem函数申请指定大小的内存。如果需要在其他地方调用这块内存,可以将alloc_bootmem返回的内存首地址通过EXPORT_SYMBOL导 出,然后就可以使用这块内存了。这种内存分配方式的缺点是,申请内存的代码必须在链接到内核中的代码里才能使用,因此必须重新编译内核,而且内存管理系统 看不到这部分内存,需要用户自行管理。测试结果表明,重新编译内核后重启,能够访问引导时分配的内存块。
void* alloc_bootmem(unsigned long size)
可以在Linux内核引导过程中绕过伙伴系统来分配大块内存。使用方法是在Linux内核引导时,调用mem_init函数之前 用alloc_bootmem函数申请指定大小的内存。如果需要在其他地方调用这块内存,可以将alloc_bootmem返回的内存首地址通过EXPORT_SYMBOL导 出,然后就可以使用这块内存了。这种内存分配方式的缺点是,申请内存的代码必须在链接到内核中的代码里才能使用,因此必须重新编译内核,而且内存管理系统 看不到这部分内存,需要用户自行管理。测试结果表明,重新编译内核后重启,能够访问引导时分配的内存块。
|
可以阿,为什么不可以呢?
|
全局数据又不在栈中 有什么不可以。
|
记得如果是静态编译内核大小应该控制在8M以内???是否
|
可以啊,不过似乎这么大的数据不能是在栈空间。