Всё что здесь написано вы делаете на свой страх и риск
Доброго времени суток. Имея бук с NVIDIA GT525M видеокартой на борту на ядре 5.10.3 столкнулся я с такой проблемой, в качестве видеодрайвера я использовал Nvidia Nouveau:
некорректное отображение экрана при просмотре Youtube в режиме “полный экран” через браузер Chromium. При разворачивании внизу или вверху экрана появлялась полоса с приложением развёрнутым на весь экран под окном браузера. После очередного обновления проблема усугубилась, экран стал мерцать.
Решил поставить проприетарные драйвера и установка мне не удалась, был warning: “CONFIG_I2C_NVIDIA_GPU: should not be set. But it is.”. Я решил что проблема в этом, нашёл статью Config_i2c_nvidia_gpu предупреждение при установке nvidia где люди отключали поддержку I2C_NVIDIA_GPU, но мою проблему это не решило.
Я стал обладателем ошибки: x11-drivers/nvidia-drivers-390.138-r1 with linux kernel 5.8.0 - FATAL: modpost: GPL-incompatible module nvidia-uvm.ko uses GPL-only symbol ‘radix_tree_preloads’ и вдруг понял что мне предстоит процедура “Сборка ядра со своей конфигурацией”.
Перед началом рекомендую установить ccache: sudo emerge -a dev-util/ccache может значительно ускорить сборку ядра. Дальше все действия делал от пользователя root.
- Скопировал исходный код ядра:
USE=“-minimal -vmlinuz” emerge -a sys-kernel/calculate-sources - Нашёл библиотеку radix-tree.c которая экспортирует символ radix_tree_preloads благодаря статье [PATCH 1/1] radix-tree: do not export radix_tree_preloads as GPL — Linux Filesystem Development
- Скопировал библиотеку из исходных кодов ядра в заранее подготовленную папку для формирования патча:
cp /usr/src/linux/lib/radix-tree.c /make/radix-tree.c - Сделал копию этого файла для внесения изменений:
cp /make/radix-tree.c /make/radix-tree.c.copy - Использовал редактор для изменение строк:
sed -i ‘s_EXPORT_PER_CPU_SYMBOL_GPL(radix_tree_preloads);EXPORT_PER_CPU_SYMBOL(radix_tree_preloads);’ /make/radix-tree.c.copy - Создал патч файл:
diff -u /make/radix-tree.c /make/radix-tree.c.copy > patchfile - Изменил строки связанные с путём на пути необходимые при компиляции ядра:
sed -i ‘s_— /make_— a/lib_’ /make/patchfile && sed -i ‘s_+++ /make_+++ b/lib_’ /make/patchfile - Скопировал файл patchfile согласно инструкции https://wiki.calculate-linux.org/ru/kernel в директорию с шаблонами и добавил строку :
echo ‘# Calculate format=diff env=install ac_install_patch==on&&merge(sys-kernel/calculate-sources)>=5.8’ | cat - /make/patchfile > /var/calculate/templates/nvidia_patch - Устанавливаем исходный код ядра, в логе можно будет увидеть успешное применение патча:
USE=“-vmlinuz -minimal” emerge -a --jobs=1 sys-kernel/calculate-sources - Запускаем сборку ядра, при этом если окно терминала будет маленьким окно изменения настроек ядра не выскочит:
cl-kernel
10.1 В конце сборки необходимо обновить модули:
emerge @module-rebuild
10.2 Чтобы использовать новые версии ядер с нашим патчем, нужно пересобирать ядро. Для этого добавляем строку:
echo “sys-kernel/calculate-sources -minimal” >> /etc/portage/package.use/custom - После нескольких минут ожидания в случае успешной сборки перегружаем машину и пробуем устанавливать драйвера:
emerge -av nvidia-drivers - Устанавливаем драйвер по умолчанию и перегружаемся:
cl-setup-video --video nvidia
Спасибо большое пользователям телеграмм канала поддержки Calculate @RodionD и @etoyaslavochka.
Мне помогли следующие статьи:
https://bugs.gentoo.org/736513