Вопрос или проблема
Я работаю в RHEL 7 и мне нужно установить Nvidia драйвер для моей видеокарты. Я знаю, что я скачал правильный драйвер с сайта Nvidia. Я также установил пакеты ядра Linux, которые расположены в /usr
, как в /usr/include/linux/kernel.h
Мне стало ясно, что драйвер Nvidia использует путь, а затем добавляет к нему свой собственный путь, чтобы найти файл ядра. Если я запускаю установку драйвера с:
NVIDIA-Linux-x86_64-418.126.02.run --kernel-source-path /usr/include
Nvidia говорит, что /usr/include/include/linux/kernel.h
— это недопустимый путь (обратите внимание на лишний include
, это та часть, которую добавляет Nvidia). Хорошо, нет проблем, тогда я запускаю
NVIDIA-Linux-x86_64-418.126.02.run --kernel-source-path /usr/
И это сообщает мне, что /usr/
не является допустимым значением для этого параметра.
Я зашел в тупик и не знаю, что делать дальше. Можно ли переместить файлы в другой каталог? Или это известная проблема с Nvidia? Поисковые запросы в Google ничего не дали по этой конкретной проблеме.
/usr/include
— это путь для файлов include для пользовательских программ. Место, где RHEL kernel-devel
RPM помещает заголовки для компиляции модулей ядра, на самом деле /usr/src/kernels/$(uname -r)
.
Установщик Nvidia на самом деле должен уметь автоматически обнаруживать это, так как там должен быть символическая ссылка на /lib/modules/$(uname -r)/build
, указывающая туда.
Так что, убедитесь, что kernel-devel
RPM, соответствующий точной версии ядра, который вы используете, установлен, затем попробуйте это:
NVIDIA-Linux-x86_64-418.126.02.run --kernel-source-path /usr/src/kernels/$(uname -r)
Или просто опустите опцию --kernel-source-path
совсем.
Как подсказывает название опции, она должна указывать на иерархию каталогов, структура которых соответствует корневому каталогу стандартного дерева исходников ядра Linux. У него должен быть собственный подкаталог include
, точно так, как ожидает установщик.
Нет. Прошло 4 года, и те же проблемы все еще существуют в драйверах NVIDIA для Linux. Только что скачал их драйвер и та же ситуация через 4 года. Я просто скопировал код в “двойной” каталог и запустил оттуда, но проблема в том, что их сборка также имеет ошибки и ищет конфигурационные файлы, которых нет в Linux.
И нет, telcoM ошибается, в Linux больше нет такого каталога: /usr/src/kernels/
Ответ или решение
Установка драйверов Nvidia на операционных системах семейства RHEL может представлять собой определённую трудность из-за необходимости корректной настройки пути к исходным файлам ядра. Давайте разберёмся с вашей проблемой, используя методику TEA (Theory, Example, Application), и предложим пошаговое руководство.
Теория
Для успешной компиляции модуля ядра, необходимого для работы Nvidia, требуется предоставить правильный путь к исходным файлам сердцевины операционной системы. В RHEL и подобных дистрибутивах Linux, такие файлы развёртываются с помощью пакетов kernel-devel
, которые создают нужную структуру каталогов для сборки модулей.
Однако, допускается недопонимание структуры файловой системы: файл kernel.h
, находящийся в /usr/include
, предназначен для пользовательских программ и не используется при сборке модулей ядра. Сами файлы ядра, которые нужны для этой задачи, находятся в /usr/src/kernels/$(uname -r)
. Переменная $(uname -r)
в данном случае возвращает текущую версию ядра, что позволяет уверенно указать на необходимый каталог.
Пример
Вопрос, возникший у вас, касается ситуации, когда Nvidia установщик автоматически не может определить путь к исходным файлам ядра и требует ручного указания с помощью параметра --kernel-source-path
. Как вы уже отметили, указание /usr/include
приводит к ошибке, так как структура и ожидаемые файлы различаются. Аналогичную ошибку можно получить, если указать корневой каталог неверно. Вот пример, который может помочь:
# Убедитесь, что установлен kernel-devel для текущей версии ядра
sudo yum install kernel-devel-$(uname -r)
# Проверьте, что символическая ссылка присутствует
ls -l /lib/modules/$(uname -r)/build
# Запустите установку драйвера Nvidia
NVIDIA-Linux-x86_64-418.126.02.run --kernel-source-path /usr/src/kernels/$(uname -r)
Применение
Теперь, рассмотрим как применить данную теорию и примеры в вашей ситуации.
-
Проверьте версию ядра: Используйте команду
uname -r
, чтобы подтвердить, какая версия ядра в данный момент используется в системе. Это позволит корректно задать параметры для установки. -
Установите необходимые пакеты разработки ядра: Установите
kernel-devel
, если он ещё не установлен, командойsudo yum install kernel-devel-$(uname -r)
. Этот пакет содержит все необходимые заголовочные файлы и другие компоненты для компиляции модулей ядра. -
Проверьте символическую ссылку: Убедитесь, что символическая ссылка в
/lib/modules/$(uname -r)/build
действительно указывает на /usr/src/kernels/$(uname -r). Это критически важная часть процесса, так как Nvidia установщик требует ее для автоматического определения пути. -
Запуск установки: Теперь, когда всё настроено, вы можете запустить установочный скрипт Nvidia. Используйте путь
/usr/src/kernels/$(uname -r)
как параметр, если автоматическое определение пути не срабатывает. Обратите внимание, что в некоторых случаях установка может пройти успешно и без явного указания этого параметра. -
Устранение неисправностей: Если установка по-прежнему не проходит успешно, возможно, проблема заключается в других конфликтующих драйверах или же в конкретной версии драйвера Nvidia. В таком случае, рекомендуется проверить последние версии драйверов на сайте Nvidia или обратиться к документации по установке для RHEL.
-
Обновление системы: Убедитесь, что ваша система и все её компоненты, в том числе ядро, обновлены до последних версий. Это может существенно повлиять на успешную установку драйверов.
В случае, если ни одно из вышеуказанных решений не работает, настоятельно рекомендуется обратиться к сообществу пользователей или технической поддержке Nvidia, предоставив им детализированные логи ошибок. Данный подход обеспечит необходимый уровень поддержки и поможет выявить специфические проблемы, которые могут возникать в редких случаях.