【发布时间】:2011-09-12 11:13:07
【问题描述】:
我在加载内核模块时遇到问题,有一个大数据结构,大约 2Gb 的内存大小 - 我是否预先分配表(以便在我执行 size -A module.ko 或尝试 @ 时它显示在 .bss 中987654322@它在加载时,模块加载失败insmod: error inserting 'module.ko': -1 Cannot allocate memory。
我尝试在用户模式 linux 上调试问题,但我得到了一堆段错误(可以在 gdb 中继续,但最终会出现控制台消息 overflow in relocation type 10 val <value in the ball park of 6G> 和 'module' likely not compiled with -mcmodel=kernel。我假设使用 Kbuild -mcmodel应该是对的吧?
所以问题是:
- Linux 内核模块大小是否有通用的 2G 限制?
- usernode linux 中的内核模块是否有特定的 2G 限制(我认为过去我注意到大型内核模块需要干净、连续的内存块...)
- 我可以为内核模块指定
-mcmodel=large并期望它工作吗?
我已经在 64 位 2.6.32-5-amd64(主机)和 8Gb 内存和 2.6.32 在 uml 中用 4G 内存尝试过这个,所以这应该不 是一个普通的内存不足问题。
解决限制的额外功劳,如果存在这样的限制:)
【问题讨论】:
-
2GB代码+数据段?你开玩笑的吧!你不能只
mmap你的数据而不编译它吗? -
很遗憾,我没有骗你。
标签: linux-kernel kernel-module vmalloc