Bug 41305

Summary: Нет вывода графики на UEFI, пока не загрузится drm модуль
Product: Sisyphus Reporter: Антон Мидюков <antohami>
Component: kernel-image-un-defAssignee: Vitaly Chikunov <vt>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P5 CC: aen, asheplyakov, kernelbot, nickel, placeholder, vt
Version: unstable   
Hardware: all   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=40232
https://bugzilla.altlinux.org/show_bug.cgi?id=42057
Bug Depends on:    
Bug Blocks: 33000, 40561    

Description Антон Мидюков 2021-11-09 10:48:21 MSK
Как оказалось проблема с отсутствующим framebuffer у virtualbox (bug 40232) - это вершина айсберга. У ядра un-def при загрузке в UEFI теперь нет вывода графики, пока drm модуль не загрузится. Так что без установленного пакета kernel-image-drm-un-def графики теперь вовсе нет. А в virtualbox drm модуль, видимо, не предоставляет framebuffer.

Проблему можно воспроизвести в qemu, virtualbox, на любом железе с UEFI.
Comment 1 Антон Мидюков 2021-11-09 11:39:36 MSK
У ядра std-def CONFIG_FB_SIMPLE=y, а у un-def CONFIG_FB_SIMPLE=m.
Добавление в /etc/initrd.mk:
MODULES_PRELOAD = simplefb
и перегенерация initrd проблему решает.
Comment 2 Антон Мидюков 2021-11-10 06:20:51 MSK
(Ответ для Антон Мидюков на комментарий #1)
> У ядра std-def CONFIG_FB_SIMPLE=y, а у un-def CONFIG_FB_SIMPLE=m.

Это изменение произошло в 5.14.13-alt1. В архивном ядре 5.14.11-alt1 ещё y, а в 5.14.13-alt1 уже m. Похоже, причина в коммите:
http://git.altlinux.org/gears/k/kernel-image-un-def.git?p=kernel-image-un-def.git;a=commit;h=b0ee6190e85604cfa7848f002b300c95628f1ee4

CONFIG_DRM_SIMPLEDRM=m не позволяет CONFIG_FB_SIMPLE=y. Т.е. для встраивания одного из них в ядро нужно отключать сборку другого. Вопрос только в том, оставить ли CONFIG_FB_SIMPLE или же попробовать перейти на новый CONFIG_DRM_SIMPLEDRM.
Comment 3 Антон Мидюков 2021-11-10 10:28:49 MSK
(Ответ для Антон Мидюков на комментарий #2)
> (Ответ для Антон Мидюков на комментарий #1)
> > У ядра std-def CONFIG_FB_SIMPLE=y, а у un-def CONFIG_FB_SIMPLE=m.
> 
> Это изменение произошло в 5.14.13-alt1. В архивном ядре 5.14.11-alt1 ещё y,
> а в 5.14.13-alt1 уже m. Похоже, причина в коммите:
> http://git.altlinux.org/gears/k/kernel-image-un-def.git?p=kernel-image-un-
> def.git;a=commit;h=b0ee6190e85604cfa7848f002b300c95628f1ee4
> 
> CONFIG_DRM_SIMPLEDRM=m не позволяет CONFIG_FB_SIMPLE=y. Т.е. для встраивания
> одного из них в ядро нужно отключать сборку другого. Вопрос только в том,
> оставить ли CONFIG_FB_SIMPLE или же попробовать перейти на новый
> CONFIG_DRM_SIMPLEDRM.

Делать CONFIG_DRM_SIMPLEDRM=y нельзя, так как он за собой тянет drm.ko, drm_helper.ko, cec.ko из пакета kernel-modules-drm-un-def. Да и сам он оттуда.

Вообще проблема сборки в виде модуля для обоих конфигов видится в том, что ни один, ни другой правилами udev в качестве некоего fallback не загружается.

Также выяснил, что проблему с framebuffer в virtualbox решает загрузка модуля simpledrm.ko. Так что, возможно, стоит грузить модуль simpledrm.ko в initrd.
Comment 4 Anton V. Boyarshinov 2021-11-10 11:27:49 MSK
> Вообще проблема сборки в виде модуля для обоих конфигов видится в том, что
> ни один, ни другой правилами udev в качестве некоего fallback не загружается.

Согласен. Из этого следует вопрос -- возможно ли и нужно ли такое правило udev написать?
Comment 5 Антон Мидюков 2021-11-11 08:10:43 MSK
(Ответ для Anton V. Boyarshinov на комментарий #4)
> > Вообще проблема сборки в виде модуля для обоих конфигов видится в том, что
> > ни один, ни другой правилами udev в качестве некоего fallback не загружается.
> 
> Согласен. Из этого следует вопрос -- возможно ли и нужно ли такое правило
> udev написать?

На данный момент выяснил, что simpledrm работает нормально не везде. И действительно полезен только в virtualbox с VMware SVGA II Adapter в режиме UEFI.
Загрузку simpledrm.ko, видимо, можно загружать при появлении этого видеоадаптера.
А вот simplefb нужно загружать во всех остальных случаях.
Но проблема в том, что simplefb можно загрузить, а выгрузить не получится.
Кажется сомнительным, что условие "если есть VMware SVGA II Adapter, то грузим simpledrm, а если нет, то грузим simplefb" будет работать, как надо. Может же быть, что на момент запуска udev VMware SVGA II Adapter не доступен. А после загрузки simplefb уже будет поздно это проверять.
Comment 6 Антон Мидюков 2021-12-15 14:39:08 MSK
Я не вижу хорошего решения, как грузить модуль simplefb.ko
Учитывая, что модуль невыгружаемый, то делать его модулем смысла особо нет.
Единственный случай, когда помогает загрузка simpledrm.ko вместо simplefb.ko, это virtualbox в режиме EFI с графикой vmsvga. По-моему, этим вполне можно пожертвовать. Пользователи элементарно могут подумать, что система не грузится, хотя дело не дошло ещё и до initrd. А если kernel panic, то и вовсе увидишь лишь перезагрузку.

Предлагаю отключить CONFIG_DRM_SIMPLEDRM, чтобы simplefb был в ядре, как раньше. Напомню, что сейчас CONFIG_FB_SIMPLE=y, но так как CONFIG_DRM_SIMPLEDRM=m, то происходит замена на CONFIG_FB_SIMPLE=m. Т.е. приведём в соответствие исходный и итоговый конфиги ядра.
Comment 7 Sergey V Turchin 2021-12-17 13:39:39 MSK
Подтверждаю для беты K. После установки пришлось переключиться на VBoxSVGA, тогда загрузка пошла.
Comment 8 Sergey V Turchin 2021-12-17 20:11:45 MSK
А может посмотреть, как у соседей с этими модулями?
Comment 9 Anton V. Boyarshinov 2021-12-20 12:35:42 MSK
(Ответ для Антон Мидюков на комментарий #6)
> Я не вижу хорошего решения, как грузить модуль simplefb.ko
> Учитывая, что модуль невыгружаемый, то делать его модулем смысла особо нет.
> Единственный случай, когда помогает загрузка simpledrm.ko вместо
> simplefb.ko, это virtualbox в режиме EFI с графикой vmsvga. По-моему, этим
> вполне можно пожертвовать. Пользователи элементарно могут подумать, что
> система не грузится, хотя дело не дошло ещё и до initrd. А если kernel
> panic, то и вовсе увидишь лишь перезагрузку.
> 
> Предлагаю отключить CONFIG_DRM_SIMPLEDRM, чтобы simplefb был в ядре, как
> раньше. Напомню, что сейчас CONFIG_FB_SIMPLE=y, но так как
> CONFIG_DRM_SIMPLEDRM=m, то происходит замена на CONFIG_FB_SIMPLE=m. Т.е.
> приведём в соответствие исходный и итоговый конфиги ядра.

Я сделал соответствующие изменения, будет в следующей сборке.
Comment 10 Alexey Sheplyakov 2021-12-22 17:59:40 MSK
(In reply to Антон Мидюков from comment #3)
> (Ответ для Антон Мидюков на комментарий #2)
> > (Ответ для Антон Мидюков на комментарий #1)
> > > У ядра std-def CONFIG_FB_SIMPLE=y, а у un-def CONFIG_FB_SIMPLE=m.
> > 
> > Это изменение произошло в 5.14.13-alt1. В архивном ядре 5.14.11-alt1 ещё y,
> > а в 5.14.13-alt1 уже m. Похоже, причина в коммите:
> > http://git.altlinux.org/gears/k/kernel-image-un-def.git?p=kernel-image-un-
> > def.git;a=commit;h=b0ee6190e85604cfa7848f002b300c95628f1ee4
> > 
> > CONFIG_DRM_SIMPLEDRM=m не позволяет CONFIG_FB_SIMPLE=y. Т.е. для встраивания
> > одного из них в ядро нужно отключать сборку другого. Вопрос только в том,
> > оставить ли CONFIG_FB_SIMPLE или же попробовать перейти на новый
> > CONFIG_DRM_SIMPLEDRM.
> 
> Делать CONFIG_DRM_SIMPLEDRM=y нельзя

А придётся. Дело в том, что не-DRM fbdev драйверы скоро выпилят.
Так что графическая консоль до загрузки initramfs будет только при


CONFIG_DRM=y
CONFIG_DRM_SIMPLEDRM=y

Напоминаю, что другой консоли (кроме графической) зачастую и нет.
Так что в не столь отдалённой перспективе придётся либо мириться с этим багом, ...

> так как он за собой тянет drm.ko,
> drm_helper.ko, cec.ko из пакета kernel-modules-drm-un-def. Да и сам он
> оттуда.

... либо 

а) таки сделать CONFIG_DRM=y, CONSIG_DRM_SIMPLEDRM=y
б) упразднить пакет modules-drm, drm драйверы паковать в kernel-image
в) drm-ненавистникам выдать по ведру настойки пустырника
Comment 11 Антон Мидюков 2021-12-22 18:03:16 MSK
(Ответ для Alexey Sheplyakov на комментарий #10)
> (In reply to Антон Мидюков from comment #3)
> > (Ответ для Антон Мидюков на комментарий #2)
> > > (Ответ для Антон Мидюков на комментарий #1)
> > > > У ядра std-def CONFIG_FB_SIMPLE=y, а у un-def CONFIG_FB_SIMPLE=m.
> > > 
> > > Это изменение произошло в 5.14.13-alt1. В архивном ядре 5.14.11-alt1 ещё y,
> > > а в 5.14.13-alt1 уже m. Похоже, причина в коммите:
> > > http://git.altlinux.org/gears/k/kernel-image-un-def.git?p=kernel-image-un-
> > > def.git;a=commit;h=b0ee6190e85604cfa7848f002b300c95628f1ee4
> > > 
> > > CONFIG_DRM_SIMPLEDRM=m не позволяет CONFIG_FB_SIMPLE=y. Т.е. для встраивания
> > > одного из них в ядро нужно отключать сборку другого. Вопрос только в том,
> > > оставить ли CONFIG_FB_SIMPLE или же попробовать перейти на новый
> > > CONFIG_DRM_SIMPLEDRM.
> > 
> > Делать CONFIG_DRM_SIMPLEDRM=y нельзя
> 
> А придётся. Дело в том, что не-DRM fbdev драйверы скоро выпилят.
> Так что графическая консоль до загрузки initramfs будет только при
> 
> 
> CONFIG_DRM=y
> CONFIG_DRM_SIMPLEDRM=y
> 
> Напоминаю, что другой консоли (кроме графической) зачастую и нет.
> Так что в не столь отдалённой перспективе придётся либо мириться с этим
> багом, ...
> 
> > так как он за собой тянет drm.ko,
> > drm_helper.ko, cec.ko из пакета kernel-modules-drm-un-def. Да и сам он
> > оттуда.
> 
> ... либо 
> 
> а) таки сделать CONFIG_DRM=y, CONSIG_DRM_SIMPLEDRM=y
> б) упразднить пакет modules-drm, drm драйверы паковать в kernel-image
> в) drm-ненавистникам выдать по ведру настойки пустырника

Вот как выпилят, так так и сделаем. Зачем торопить события?
Comment 12 Alexey Sheplyakov 2021-12-22 18:04:40 MSK
(In reply to Антон Мидюков from comment #5)
> (Ответ для Anton V. Boyarshinov на комментарий #4)
> > > Вообще проблема сборки в виде модуля для обоих конфигов видится в том, что
> > > ни один, ни другой правилами udev в качестве некоего fallback не загружается.
> > 
> > Согласен. Из этого следует вопрос -- возможно ли и нужно ли такое правило
> > udev написать?
> 
> На данный момент выяснил, что simpledrm работает нормально не везде.

Где конкретно?

> И действительно полезен только в virtualbox с VMware SVGA II Adapter в режиме UEFI.

Утверждение не соответствует действительности. simpledrmfb полезен на любых UEFI
системах (x86, arm64), arm/arm64 одноплатниках (включая raspberry pi 2/3/4).
Comment 13 Alexey Sheplyakov 2021-12-22 18:12:32 MSK
(In reply to Антон Мидюков from comment #11)
> (Ответ для Alexey Sheplyakov на комментарий #10)
> > (In reply to Антон Мидюков from comment #3)
> > > (Ответ для Антон Мидюков на комментарий #2)
> > > > (Ответ для Антон Мидюков на комментарий #1)
> > > > > У ядра std-def CONFIG_FB_SIMPLE=y, а у un-def CONFIG_FB_SIMPLE=m.
> > > > 
> > > > Это изменение произошло в 5.14.13-alt1. В архивном ядре 5.14.11-alt1 ещё y,
> > > > а в 5.14.13-alt1 уже m. Похоже, причина в коммите:
> > > > http://git.altlinux.org/gears/k/kernel-image-un-def.git?p=kernel-image-un-
> > > > def.git;a=commit;h=b0ee6190e85604cfa7848f002b300c95628f1ee4
> > > > 
> > > > CONFIG_DRM_SIMPLEDRM=m не позволяет CONFIG_FB_SIMPLE=y. Т.е. для встраивания
> > > > одного из них в ядро нужно отключать сборку другого. Вопрос только в том,
> > > > оставить ли CONFIG_FB_SIMPLE или же попробовать перейти на новый
> > > > CONFIG_DRM_SIMPLEDRM.
> > > 
> > > Делать CONFIG_DRM_SIMPLEDRM=y нельзя
> > 
> > А придётся. Дело в том, что не-DRM fbdev драйверы скоро выпилят.
> > Так что графическая консоль до загрузки initramfs будет только при
> > 
> > 
> > CONFIG_DRM=y
> > CONFIG_DRM_SIMPLEDRM=y
> > 
> > Напоминаю, что другой консоли (кроме графической) зачастую и нет.
> > Так что в не столь отдалённой перспективе придётся либо мириться с этим
> > багом, ...
> > 
> > > так как он за собой тянет drm.ko,
> > > drm_helper.ko, cec.ko из пакета kernel-modules-drm-un-def. Да и сам он
> > > оттуда.
> > 
> > ... либо 
> > 
> > а) таки сделать CONFIG_DRM=y, CONSIG_DRM_SIMPLEDRM=y
> > б) упразднить пакет modules-drm, drm драйверы паковать в kernel-image
> > в) drm-ненавистникам выдать по ведру настойки пустырника
> 
> Вот как выпилят, так так и сделаем. 

Пока гром не грянет, мужик не перекрестится, ага.

> Зачем торопить события?

Чтобы было время спокойно выяснить, что сломалось, и столь же спокойно починить.
Comment 14 Sergey V Turchin 2021-12-22 18:22:44 MSK
(In reply to Alexey Sheplyakov from comment #13)
> > Вот как выпилят, так так и сделаем. 
> Пока гром не грянет, мужик не перекрестится, ага.
А при выпиливании не может появиться ещё каких-то изменений, с этим связаных?
Comment 15 Антон Мидюков 2021-12-22 18:40:42 MSK
(Ответ для Alexey Sheplyakov на комментарий #12)
> (In reply to Антон Мидюков from comment #5)
> > (Ответ для Anton V. Boyarshinov на комментарий #4)
> > > > Вообще проблема сборки в виде модуля для обоих конфигов видится в том, что
> > > > ни один, ни другой правилами udev в качестве некоего fallback не загружается.
> > > 
> > > Согласен. Из этого следует вопрос -- возможно ли и нужно ли такое правило
> > > udev написать?
> > 
> > На данный момент выяснил, что simpledrm работает нормально не везде.
> 
> Где конкретно?
> 

На RPi4 изображение отвалилось в режиме UEFI (u-boot). Вполне возможно, что ещё где-то выстрелит на кривом UEFI.

> > И действительно полезен только в virtualbox с VMware SVGA II Adapter в режиме UEFI.
> 
> Утверждение не соответствует действительности. simpledrmfb полезен на любых
> UEFI
> системах (x86, arm64), arm/arm64 одноплатниках (включая raspberry pi 2/3/4).

simplefb где-то не работает?

>Чтобы было время спокойно выяснить, что сломалось, и столь же спокойно починить.

Можно с 5.16 к примеру начать. А в p10 simplefb проверенный пусть будет пока. Но это пусть решает мантейнер ядра.
Comment 16 Антон Мидюков 2022-03-02 15:27:41 MSK
Проблема была решена отключением CONFIG_DRM_SIMPLEDRM.