Неспособный к загрузочному модулю: Не соглашается о версии символа module_layout

Взгляните на rvm. Это позволяет Вам легко устанавливать хорошую рубиновую установку в свой корневой каталог. (В этом случае устаревшие системные рубины больше не нужны.)

12
22.08.2014, 00:45
1 ответ

Ядро Linux содержит структуры данных, расположение которых меняется не только от версии к версии, но и в зависимости от опций компиляции. Как следствие, при компиляции модуля ядра необходимо иметь не только заголовочные файлы из исходного кода ядра, но и некоторые заголовочные файлы, которые генерируются в процессе компиляции ядра. Простой распаковки исходного кода ядра недостаточно.

В ядрах, собранных с помощью CONFIG_MODVERSIONS, номер версии может отличаться, но расположение структур данных должно быть одинаковым. Эта опция активирована в ядрах Ubuntu. С этой опцией, помимо заголовков, модули должны быть скомпилированы с соответствующим Module.symvers файлом. Ubuntu, как и большинство дистрибутивов, включает этот файл в тот же пакет, что и заголовки ядра, полученные в результате компиляции. Пакет заголовков ядра Ubuntu называется linux-headers-VERSION-VARIANT, например, linux-headers-3.8.0-38-generic.

В ядрах, собранных без CONFIG_MODVERSIONS (что может быть в случае, если вы скомпилировали собственное ядро), проверка при загрузке модуля - это простая проверка версии. Вы можете взять распакованный исходник ядра, скопировать .config, который использовался при компиляции вашего работающего ядра, и запустить make modules_prepare. Вы должны убедиться, что любое исправление, внесенное вами в ядро, не влияет на бинарную совместимость.

13
27.01.2020, 19:56

Теги

Похожие вопросы