我有一个加载内核模块的问题,有一个大数据结构,大小约为2GB的内存 - 无论我是否预分配表格(使其在执行
我尝试在用户模式linux上调试该问题,但我得到了一堆段错误(可以在gdb中继续,但最终会出现控制台消息
因此,问题如下:
如果存在此类限制,可以解决此限制的方法将获得额外的奖励 :)
size -A module.ko
时显示在.bss中)或尝试在加载时使用vmalloc()
,都会出现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限制?
- 在用户模式linux中,内核模块是否存在2G限制(我想我曾经注意到,一个大的内核模块需要一个干净、连续的内存块……)?
- 我可以为内核模块指定
-mcmodel=large
并期望它能正常工作吗?
如果存在此类限制,可以解决此限制的方法将获得额外的奖励 :)
mmap
映射你的数据,而不是编译它呢? - user405725