У меня проблема с загрузкой модуля ядра, существует большая структура данных, размером около 2 ГБ памяти - я предварительно выделяю таблицу (чтобы она отображалась в .bss, когда я делаю size -A module.ko
или пытаюсь vmalloc()
это во время загрузки, загрузка модуля завершается неудачно с insmod: error inserting 'module.ko': -1 Cannot allocate memory
.
Я попытался отладить проблему на usermode linux, но я получаю кучу ошибок (это можно продолжить в gdb, но в итогеконсольное сообщение overflow in relocation type 10 val <value in the ball park of 6G>
и 'module' likely not compiled with -mcmodel=kernel
. Я предполагаю, что с Kbuild
значение -mcmodel
должно быть правильным, верно?
Итак, вопросы:
- Есть лиобщий предел 2G для размера модуля ядра Linux?
- Существует ли конкретный предел 2G для модулей ядра в linux usernode (я думаю , что в прошлом я заметил, что большой модуль ядра нуждается вчистый, непрерывный блок памяти ...)
- Можно ли указать
-mcmodel=large
для модуля ядра и ожидать, что он будет работать?
Я пробовал это на debian squeeze, 64-битная, 2.6.32-5-amd64 (хост) с 8 ГБ памяти и 2.6.32в UML с памятью 4G, поэтому , а не должно быть обычной проблемой нехватки памяти.
Дополнительный кредит для работы вокруг предела, если такой предел существует:)