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

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

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

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

  • Включить поддержку модулей
    [*] Enable loadable module support --->
  • Включить MTRR
    Processor type and features --->
        [*] MTRR (Memory Type Range Register) supportProcessor type and features --->
        [*] MTRR (Memory Type Range Register) support
  • Отключить встроенные драйверы ядра для фреймбуфера на видеокартах NVIDIA
    Device Drivers --->
        Graphics support --->
            Frame buffer Devices --->
                <*> Support for frame buffer devices --->
                < >   nVidia Framebuffer Support
                < >   nVidia Riva support
  • Собрать DRM модулем или вовсе выключить его в ядре (NVIDIA использует свой DRM)
    Device drivers --->
        Graphics support --->
            < > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
    

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

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

Device Drivers  --->
    <*> Connector - unified userspace <-> kernelspace linker  --->
    Graphics support  --->
        [*] Support for frame buffer devices  --->
            [*]   Enable firmware EDID
            <M>   Userspace VESA VGA graphics support
            [*]   Simple framebuffer support

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

emerge -aq v86d

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

# ...
modules="uvesafb"
# ...
module_uvesafb_args="mode_option=1920x1080-24 mtrr=2 scroll=ywrap"

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

options uvesafb mode_option=1920x1080-24 mtrr=2 scroll=ywrap

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

  • mode_option — разрешение и глубина цвета (также можно указать частоту обновления в виде 1920×[email protected] , но лучше оставить автоматическое значение)
  • mtrr — доступный режим MTRR. Узнать, какие режимы доступны можно в файле /proc/mtrr. Таблица соответствия выглядит так:
    0 - Disabled (equivalent to nomtrr) (default)
    1 - Uncacheable
    2 - Write-back
    3 - Write-combining
    4 - Write-through
  • scroll — режим прокрутки. Типичное значение — ywrap. Посмотреть подробнее можно в документации.

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

rm -rf /lib64/modules/`uname -r`

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

make -j4 && make modules_install && make install

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

# ...
GRUB_GFXMODE=1920x1080
# ...
GRUB_GFXPAYLOAD_LINUX=keep

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

grub2-mkconfig -o /boot/grub/grub.cfg

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

emerge -aq nvidia-drivers

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

Gentoo uvesafb
Gentoo uvesafb

Удачи!

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

Leave a Comment

Your email address will not be published.