[SOLVED] UEFI против radeondrmfb или иного open-source драйвера с KMS
Собственно, товарищи, кто-нибудь заводил связку из opensource драйвера с включенным KMS и загрузкой с UEFI?
На данный момент у меня ситуация такая:
1. Если включить EFI Framebuffer, выключить radeondrmfb (включить модулем и поставить в blacklist, например) - работает, консоль видна.
2. Если выключить EFI Framebuffer, включить radeondrmfb - работает, но консоль чёрная.
3. Если включить оба, то не работает - вешается на fb conflicting hw.
Интернет полон различных советов от отключения KMS (что глупо), то пинков в сторону grub2 - де это он всё виноват. Некоторые же наоборот утверждают, что де в UEFI режиме видеокарта не инициализируется и потому даже в i915 специальную опцию сделали.
Вопрос - что делать, как лечить? Иксы конечно работать заставить можно, но без консоли жить как-то не хорошо. Хочется и того, и того и можно без хлеба (EFI framebuffer). Пробовал кто-нибудь грузить не с grub2, а с других?
Update:
Собственно история солюшена такая:
Начитавшись, что во всём виноват груб, я решил попробовать грузить ядро самостоятельно (через EFI stub). Однако у моего мышкокликательного биоса встроенная консоль оказалась настолько убогая, что пришлось ставить rEFInd [1]
Лирическое отступление про refind
refind - это такое efi приложение (можно скачать с сайта, запихнуть в ESP и всё, в ОС оно не имеет отношения), которое соотносится с обычным bootloader'ом, например grub или lilo (не grub2), примерно как обычный биос с мышкокликательным. Т.е. вроде как делает тоже самое, но рюшечек обвешано до дури. Хотя у refind оказался весьма симпотичный textonly режим, да и по логике своей он проще и понятнее чем grub2.
Однако привыкнув за <
Конец лирического отступления про refind
Поставив рефайнд и получив одно efi-stub ядро, которое загружалось и показывало консоль (через efi-fb с отключенным radeon-drm) я начал пробовать различные конфигурации:
1. Включить оба - приводило к зависанию, как и раньше.
2. Включить только radeon-drm, выключить efi-fb - чорный экран.
Сосредоточившись на варианте 2, я начал пробовать разные настройки рефайнда - включить графику, выключить графику, textonly/не-textonly...
В процессе испытаний я вдруг заметил, что ядро-то грузится (не виснет), но некоторое время, секунд 30, не реагирует на ctrl+alt+del, после чего начинает реагировать.
Тут у меня появились некоторые подозрения. Дождавшись очередной такой загрузки и перезагрузил ядро в рабочее через ctrl+alt+del и начал смотреть /var/log/messages на предмет загрузки предыдущей попытки. И, естественно, я там обнаружил:
si_cp: Failed to load firmware "radeon/TAHITI_pfp.bin"
Очнувшись минут через пять (сильно болели лоб и ладонь), я таки поставил radeon-ucode (в стандартном ядре этой фирмвари нету, что меня и подвело - а то так dracut их копирует все) и сделал новое ядро с ним. Ну и через пару попыток (забыл примонтировать /boot, забыл перезаписать конфиг и т.п.) я таки загрузил ядро - с графикой и со всеми остальными рюшечками.
Затем я начал "чистить лишнее" - netconsole, kernel level autoconfiguration/dhcp и прочие радости жизни. Закончив очистки, я попытался загрузить груб - (загрузив его из refind - дикие цепочки загрузок такие дикие) и, что вы думаете? Да, он тоже нормально загрузил это ядро. Разве что grub2-mkconfig'у сильно не нравился суффикс .efi и он отказывался находить initramfs рядом.
Причём грузился он (grub2) как с TERMINAL=console, так и TERMINAL=gfxterm.
Итого, для загрузки оказалось достаточно отключить efifb в ядре целиком (video=efidb:off или аналоги его не впечатляют, ровно как и video=radeondrmfb) и включить radeondrmfb.
Ну и лог прочитать =)
Сижу теперь с двумя лоадерами, думаю какой оставить.
[1] http://www.rodsbooks.com/refind/
[2]
options="root=/dev/nord/root quiet fastboot console=tty1 splash=silent,theme:natural_gentoo" #options="root=/dev/nord/root verbose drm.debug=14 netconsole=@/,12345@192.168.1.12/" make_entry() { cat <<EOF menuentry "$1" { icon EFI/refind/icons/os_gentoo.icns volume boot loader $2 initrd $3 options "$options" enabled } EOF } test -e /boot/efi || mount /boot test -e /boot/efi/EFI/refind || mount /boot/efi ( cat /boot/efi/EFI/refind/refind.conf.head echo echo "## AUTOGENERATED BEGIN ##" echo for kernel in `ls -1 /boot/kernel-*.efi | sort -r`; do loader=`basename "$kernel"` version=`echo ${kernel} | sed 's/^[^-]*-//; s/\.efi$//'` name="Gentoo GNU/Linux [$version]" initrd="initramfs-$version.img" make_entry "$name" "$loader" "$initrd" echo done echo echo "## AUTOGENERATED END ##" echo cat /boot/efi/EFI/refind/refind.conf.tail ) > /boot/efi/EFI/refind/refind.conf
- Для комментирования войдите или зарегистрируйтесь
.
Ситуация аналогична (с nvidia и nouveau) - показывает только EFI_FB. На хостах, где имеется UEFI, гружусь вообще без бутлодеров (EFISTUB - конфигурируется очень просто посредством efibootmgr, но на одном для мультизагрузки используется rEFInd)
Мы тоже не всего читали Шнитке!.. © В. Вишневский