Загрузка модулей ядра, которые были скомпилированы для другого ядра, не удалась

Я хочу загрузить модули ядра, ip_gre.ko и gre.ko , на встроенное устройство с встроенным linux, чтобы заставить это устройство поддерживать протокол GRE. Поскольку я не хочу менять ядро ​​устройства Embedded-linux, я пытаюсь загрузить модули ядра вместо повторной установки ядра устройства.

К счастью, у меня есть исходный код ядра этого устройства, поэтому я могу скомпилировать ip_gre.ko и gre.ko Однако загрузка модулей с использованием insmod на устройстве завершилась неудачей со следующими сообщениями:

 $ insmod gre.ko insmod: can't insert 'gre.ko': Resource temporarily unavailable $ insmod ip_gre.ko ip_gre: Unknown symbol gre_del_protocol ip_gre: Unknown symbol gre_add_protocol insmod: can't insert 'ip_gre.ko': unknown symbol in module, or unknown parameter $ dmesg GRE over IPv4 demultiplexor drvier gre: can't add protocol ip_gre: Unknown symbol gre_del_protocol ip_gre: Unknown symbol gre_add_protocol 

У моего устройства достаточно памяти для загрузки модулей ( free показаны 190700/239760 бесплатно).

Не могли бы вы сообщить мне, почему это происходит и какие возможные решения?

ОБНОВИТЬ:

Это различия между .config запуска ядра (на устройстве) и ядра, скомпилированного для двух вышеперечисленных модулей.

 $ diff config_for_running_kernel config_for_kernel_compiled_for_modules 299c299, 301 < # CONFIG_NET_IPGRE_DEMUX is not set --- > CONFIG_NET_IPGRE_DEMUX=m > CONFIG_NET_IPGRE=m > CONFIG_NET_IPGRE_BROADCAST=y 963c965 < CONFIG_PPTP=y --- > CONFIG_PPTP=m 

Поскольку CONFIG_PPTP зависит от CONFIG_NET_IPGRE_DEMUX , я должен был сделать это как модуль для компиляции ядра без сообщения об ошибке.

Различия вызывают сообщения об ошибках? Если да, не могли бы вы дать мне знать, как я могу ее решить …? (и если у вас есть дополнительные ссылки, которые могут научить меня об этих проблемах и решениях, я был бы очень благодарен)

Я решил проблему, проанализировав и модифицировав модуль ядра. Анализ исходного кода модуля ядра указывает на то, что совместимые параметры ядра должны быть связаны с загрузкой модулей ядра, как комментировал Жиль. gre проблема вызвала IPGRE_PROTO модуля IPGRE_PROTO , поскольку существующий модуль pptp использует идентификатор протокола IPGRE_PROTO который равен идентификатору протокола gre . Ядро без модуля gre использует IPGRE_PROTO как идентификатор протокола pptp .