gpt4 book ai didi

linux-kernel - linux中的内核模块有大小限制吗?

转载 作者:行者123 更新时间:2023-12-04 07:43:59 27 4
gpt4 key购买 nike

我在加载内核模块时遇到问题,有一个大数据结构,大约 2Gb 的内存大小 - 我是否预先分配表(以便它在我执行 size -A module.ko 或尝试 vmalloc() 时显示在 .bss 中在加载时,模块加载失败并显示 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 内存和 4G 内存的 uml 中的 2.6.32 上尝试过这个,所以这应该 不是 是一个普通的内存不足问题。

    如果存在这样的限制,则可以在限制范围内工作的额外信用:)

    最佳答案

    至于您的第一个问题 - 模块本身的限制是 64 兆字节。模块加载器将拒绝加载超过此大小的模块。来自 kernel/module.c :

    if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL)
    return ERR_PTR(-ENOMEM);

    这对于 2.6.32 和较新的内核(最高 3.3)都是如此。

    编辑:在内核版本 3.4 中,64 Mb 限制 was removed .现在实际的限制只取决于有多少内存 vmalloc()可以分配。

    关于linux-kernel - linux中的内核模块有大小限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6306192/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com