Ошибка версии модулей Linux Неверный формат модуля

Я сделал внешний модуль Linux, и поскольку моему модулю нужен символ ядра Linux,

Я установил конфиг Modversion и сделал его. (Также сделал modules_install)

Мой модуль был сделан именно в lib/modules/(мой linux)/extra/

Но когда я вставляю свой модуль, оболочка выводит сообщение об ошибке

insmod: ERROR: could not insert module oxen_aggregator_module.ko: Invalid module format

Это содержимое dmesg

[  341.458351] oxen_aggregator_module: version magic '3.17.8-gentoo-r1 SMP mod_unload modversions ' should be '3.17.8-gentoo-r1 SMP mod_unload '

Но мне нужен флаг modversions, потому что, если бы я не установил этот флаг, у Module.symvers было бы только 0x00000000 адресов.

Не могли бы вы помочь мне? Как я могу решить?

Мой файл Make

SRCS    = oxen_aggregator_module.c
OBJS    = $(SRCS:.c=.o)

obj-m += $(OBJS)

KBUILD_EXTRA_SYMBOLS={/usr/src/linux-$(shell unamr -r)/Module.symvers}
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules_install
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    $(RM) Module.markers modules.order

person nicelhc13    schedule 20.05.2015    source источник
comment
Обычно после смены версии нужно пересобирать все ядро ​​(make, make modules_install, make install в каталоге с исходным кодом).   -  person Tsyvarev    schedule 20.05.2015
comment
@Tsyvarev Я сделал то же самое, но не решил. любые другие разрешения?   -  person nicelhc13    schedule 01.06.2015
comment
Разделите Makefile, как описано здесь stackoverflow.com/a/30332639/3440745, и удалите директиву KBUILD_EXTRA_SYMBOLS: файл Module.symvers ядра используется автоматически. Затем, после очистки каталога вашего модуля, попробуйте пересобрать модуль. Кстати, ваш модуль не размещен в дереве ядра, не так ли?   -  person Tsyvarev    schedule 01.06.2015
comment
Да, мой модуль не размещен в дереве ядра, но мне нужно использовать функцию ядра, поэтому я хочу сослаться на таблицу символов ядра! @Цыварев   -  person nicelhc13    schedule 01.06.2015
comment
Опять же, KBUILD_EXTRA_SYMBOLS нужно использовать только для символов из других модулей вне ядра. Вам не потребуются специальные средства для использования символов из ядра ядра и поставляемых с ним модулей.   -  person Tsyvarev    schedule 01.06.2015
comment
@Tsyvarev Спасибо за объяснение. Я удалил KBUILD_EXTRA_SYMBOLS, но проблема не решена... Всегда печатает "Недопустимый формат модуля". Я думаю, что эта проблема возникла из-за конфигурации версии режима. Но я боюсь, что я не могу ссылаться на экспортированный символ ядра. (Я уже спрашивал об этой проблеме.) Вы сказали, что по умолчанию ссылаются на символы ядра из моего модуля, но я не мог раньше, Вот почему я использовал Ключевое слово KBUILD_EXTRA_SYMBOLS и конфигурация Modeversioning. Могу ли я отключить конфигурацию «modversioning»? и как мне решить мою проблему? С наилучшими пожеланиями.   -  person nicelhc13    schedule 01.06.2015


Ответы (1)


Вы пытаетесь загрузить модуль в ядро, для которого он (модуль) не был собран. Или вы собираете модуль для одного ядра, но используете KBUILD_EXTRA_SYMBOLS с Module.symvers файлом, созданным для другого ядра.

Если вам нужно использовать KBUILD_EXTRA_SYMBOLS с ядром Module.symvers file, то это определенно где-то путаница с разными ядрами.

person Tsyvarev    schedule 01.06.2015
comment
Итак, как я могу вставить свой модуль в дерево ядра извне, чтобы использовать экспортированный символ ядра? или есть какие-либо пояснения по программированию внешнего модуля? Спасибо - person nicelhc13; 02.06.2015
comment
Просто скомпилируйте модуль, используя Makefile без KBUILD_EXTRA_SYMBOLS. Набор символов ядра, доступных для внешних модулей, не зависит от конфига версии мода. - person Tsyvarev; 02.06.2015