Фреймбуфер в Gentoo с uvesafb и nvidia-drivers без initrd

Как известно, при работе с проприетарным драйвером nvidia-drivers , невозможно использовать фреймбуфер через nouveau  или доступный в ядре фреймбуфер для NVIDIA, так как они конфликтуют с драйвером, который используется в X-сервере. Добиться работы фреймбуфера в консоли без костылей типа выгрузки nouveau перед запуском X-сервера можно только используя uvesafb .

Однако, подавляющее большинство инструкций описывают настройку uvesafb в сочетании с initrd, что бесполезно, если ядро собрано без его поддержки.

Само собой, необходимо выполнить все инструкции, которые необходимы для работы драйверов от NVIDIA без конфликтов:

  • Включить поддержку модулей
  • Включить MTRR
  • Отключить встроенные драйверы ядра для фреймбуфера на видеокартах NVIDIA
  • Собрать DRM модулем или вовсе выключить его в ядре (NVIDIA использует свой DRM)

    У меня при встроенном модуле DRM в dmesg  можно было наблюдать ошибки и конфликт с драйвером nvidia , но как ни странно, в итоге всё работало. Когда я убрал модуль, вместе с ним пропали и ошибки.

Здесь путь с обычной инструкцией расходится, так как мы не используем initrd при загрузке. В ядре нужно включить поддержку uvesafb в виде модуля:

И собрать нужные для uvesafb пакеты:

Теперь прописываем загрузку модуля uvesafb с параметрами:

Альтернативой module_uvesafb_args  может быть создание конфига в /etc/modprobe.d/  c такими же параметрами:

Здесь важно задать параметры, подходящие под вашу текущую конфигурацию системы:

  • mode_option — разрешение и глубина цвета (также можно указать частоту обновления в виде 1920x1080-24@60 , но лучше оставить автоматическое значение)
  • mtrr — доступный режим MTRR. Узнать, какие режимы доступны можно в файле  /proc/mtrr. Таблица соответствия выглядит так:
  • scroll — режим прокрутки. Типичное значение — ywrap. Посмотреть подробнее можно в документации.

Можно собирать ядро и устанавливать его. Если у вас используется отдельный раздел под /boot , то нужно сначала смонтировать его:  mount /boot. Также, если были убраны какие-то модули, а версия ядра не менялась, не лишним может быть и удаление установленных в данный момент модулей из /lib64/modules/. Сделать это можно, например, так:

В /usr/src/linux выполняем:

Теперь подправим конфиг GRUB2 (для GRUB первой версии настройки будут другими):

Кстати, здесь мы заодно и в GRUB2 выставили высокое разрешение первым параметром. Остаётся сгенерировать новый конфиг для GRUB2:

Не стоит забывать и о том, что не лишним будет пересобрать драйвера — особенно, если изменилась версия ядра:

Отмонтируем /boot  и перезагружаемся, чтобы проверить.

Gentoo uvesafb
Gentoo uvesafb

Удачи!

Полезная информация:

Leave a Comment

Your email address will not be published.

Яндекс.Метрика Лицензия Creative Commons