Bug 42039 - Запускать install-kernel с опцией --u-boot при наличии /sys/firmware/devicetree
Summary: Запускать install-kernel с опцией --u-boot при наличии /sys/firmware/devicetree
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: bootloader-utils (show other bugs)
Version: unstable
Hardware: all Linux
: P5 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-02-25 21:34 MSK by Антон Мидюков
Modified: 2022-05-12 17:56 MSK (History)
13 users (show)

See Also:


Attachments
Патч для kernel.filetrigger (1.07 KB, patch)
2022-02-25 21:34 MSK, Антон Мидюков
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Антон Мидюков 2022-02-25 21:34:13 MSK
Created attachment 10342 [details]
Патч для kernel.filetrigger

Предлагаю запускать install-kernel с опцией --u-boot при наличии /sys/firmware/devicetree.
u-boot также имеет возможность загружаться в режиме EFI, так что наличие EFI не является достаточным признаком, что это не u-boot. u-boot в режиме EFI может загружать dtb из /boot/dtb на ext4 разделе, если его пропатчить. Поэтому есть необходимость, чтобы симлинк /boot/dtb создавался. u-boot'ы для riscv64 были пропатчены так. Но на riscv64 возникла проблема после установки с iso. Симлинка /boot/dtb после установки нет, ядро не грузится без dtb.
Ещё один резон этой опции состоит в том, чтобы обновлялся при наличии extlinux.conf у системы, находящейся в режиме EFI. Система может быть переносной  и втыкаться из одного одноплатника в другой. Один будет грузиться через EFI, другой через extlinux.conf. Будем считать, что раз в системе есть extlinux.conf, то его стоит актуализировать.
Разумеется, если система EFI с ACPI, то опцию u-boot включать не нужно.
Но есть ещё Байкал М, у которого не u-boot, а полноценный EFI, но с devicetree. Думаю, что ничего страшного не случится, если на Байкал М появится симлинк /boot/dtb.
Comment 1 Alexey Sheplyakov 2022-05-12 16:19:26 MSK
Ниоткуда не следует, что при наличии device tree 

1) система *может* загрузиться при помощи u-boot, примеры: платы на
   Байкал-М, TaiShan, и прочие SBBR [1] ARM системы.
2) пользователь/администратор *хочет*, чтобы система грузилась при
   помощи u-boot (а не UEFI или иного загрузчика, встроенного в плату)
Comment 2 Антон Мидюков 2022-05-12 16:33:47 MSK
(Ответ для Alexey Sheplyakov на комментарий #1)
> Ниоткуда не следует, что при наличии device tree 
> 
> 1) система *может* загрузиться при помощи u-boot, примеры: платы на
>    Байкал-М, TaiShan, и прочие SBBR [1] ARM системы.
> 2) пользователь/администратор *хочет*, чтобы система грузилась при
>    помощи u-boot (а не UEFI или иного загрузчика, встроенного в плату)

Опция --u-boot дополняет, но не ограничивает другие типы загрузки.
Сейчас она будет создавать только симлинк /boot/dtb. Если существует /boot/extlinux/extlinux.conf, то обновит его. Если его нет, его не создаст.
Но можно ещё подумать, как сделать иначе...
Comment 3 Alexey Sheplyakov 2022-05-12 17:15:14 MSK
(In reply to Антон Мидюков from comment #0)

> Предлагаю запускать install-kernel с опцией --u-boot при наличии
> /sys/firmware/devicetree.
> u-boot также имеет возможность загружаться в режиме EFI, так что наличие EFI
> не является достаточным признаком, что это не u-boot.

Наличие device tree не является достаточным признаком того, что это u-boot,
это вполне может быть UEFI без ACPI (что весьма распространено на arm)

> Система может быть переносной  и втыкаться из одного одноплатника в другой.

К сожалению, не может, потому что у каждого одноплатника свои представления о том,
где (и какой) должен быть загрузчик. Например, rock pi 4 тупо считывает с 32 КБ,
начиная со второго (512-байтного) блока SD карты, и запускает это.

А поэтому: пожалуйста, не надо.
Comment 4 Антон Мидюков 2022-05-12 17:19:15 MSK
(Ответ для Alexey Sheplyakov на комментарий #3)
> (In reply to Антон Мидюков from comment #0)
> 
> К сожалению, не может, потому что у каждого одноплатника свои представления
> о том,
> где (и какой) должен быть загрузчик. Например, rock pi 4 тупо считывает с 32
> КБ,
> начиная со второго (512-байтного) блока SD карты, и запускает это.
> 
> А поэтому: пожалуйста, не надо.

installkernel не устанавливает u-boot.
Comment 5 Alexey Sheplyakov 2022-05-12 17:32:38 MSK
(In reply to Антон Мидюков from comment #4)
> (Ответ для Alexey Sheplyakov на комментарий #3)
> > (In reply to Антон Мидюков from comment #0)
> > 
> > К сожалению, не может, потому что у каждого одноплатника свои представления
> > о том,
> > где (и какой) должен быть загрузчик. Например, rock pi 4 тупо считывает с 32
> > КБ,
> > начиная со второго (512-байтного) блока SD карты, и запускает это.
> > 
> > А поэтому: пожалуйста, не надо.
> 
> installkernel не устанавливает u-boot.

а) Из названия опции это никак не следует, из-за чего возникают неожиданности двух типов
   1) Караул, мне тут насильно u-boot ставят! (мой случай)
   2) А я запустил installkernel --u-boot, а загрузчик не установился!
б) *Пока* не устанавливает.
Comment 6 Антон Мидюков 2022-05-12 17:36:27 MSK
(Ответ для Alexey Sheplyakov на комментарий #5)
> (In reply to Антон Мидюков from comment #4)
> > (Ответ для Alexey Sheplyakov на комментарий #3)
> > > (In reply to Антон Мидюков from comment #0)
> > > 
> > > К сожалению, не может, потому что у каждого одноплатника свои представления
> > > о том,
> > > где (и какой) должен быть загрузчик. Например, rock pi 4 тупо считывает с 32
> > > КБ,
> > > начиная со второго (512-байтного) блока SD карты, и запускает это.
> > > 
> > > А поэтому: пожалуйста, не надо.
> > 
> > installkernel не устанавливает u-boot.
> 
> а) Из названия опции это никак не следует, из-за чего возникают
> неожиданности двух типов
>    1) Караул, мне тут насильно u-boot ставят! (мой случай)
>    2) А я запустил installkernel --u-boot, а загрузчик не установился!
> б) *Пока* не устанавливает.

Резонно. Хорошо, буду иначе решать проблему.
Comment 7 Alexey Sheplyakov 2022-05-12 17:46:51 MSK
(In reply to Антон Мидюков from comment #2)
> (Ответ для Alexey Sheplyakov на комментарий #1)
> > Ниоткуда не следует, что при наличии device tree 
> > 
> > 1) система *может* загрузиться при помощи u-boot, примеры: платы на
> >    Байкал-М, TaiShan, и прочие SBBR [1] ARM системы.
> > 2) пользователь/администратор *хочет*, чтобы система грузилась при
> >    помощи u-boot (а не UEFI или иного загрузчика, встроенного в плату)
> 
> Опция --u-boot дополняет, но не ограничивает другие типы загрузки.
> Сейчас она будет создавать только симлинк /boot/dtb. Если существует
> /boot/extlinux/extlinux.conf, то обновит его. Если его нет, его не создаст.
> Но можно ещё подумать, как сделать иначе...


1) Добавить опции (и в командную строку, и в /etc/sysconfig/installkernel) для явного включения/отключения обновления /boot/dtb (по аналогии с --noflavour --nodefault)
2) Аналогично для обновления/создания /boot/extlinux.conf
3) Использовать более явные и понятные названия опций, например --update-dtb-symlink/--no-update-dtb-symlink
Comment 8 Антон Мидюков 2022-05-12 17:56:33 MSK
(Ответ для Alexey Sheplyakov на комментарий #7)
> (In reply to Антон Мидюков from comment #2)
> > (Ответ для Alexey Sheplyakov на комментарий #1)
> > > Ниоткуда не следует, что при наличии device tree 
> > > 
> > > 1) система *может* загрузиться при помощи u-boot, примеры: платы на
> > >    Байкал-М, TaiShan, и прочие SBBR [1] ARM системы.
> > > 2) пользователь/администратор *хочет*, чтобы система грузилась при
> > >    помощи u-boot (а не UEFI или иного загрузчика, встроенного в плату)
> > 
> > Опция --u-boot дополняет, но не ограничивает другие типы загрузки.
> > Сейчас она будет создавать только симлинк /boot/dtb. Если существует
> > /boot/extlinux/extlinux.conf, то обновит его. Если его нет, его не создаст.
> > Но можно ещё подумать, как сделать иначе...
> 
> 
> 1) Добавить опции (и в командную строку, и в /etc/sysconfig/installkernel)
> для явного включения/отключения обновления /boot/dtb (по аналогии с
> --noflavour --nodefault)
> 2) Аналогично для обновления/создания /boot/extlinux.conf
> 3) Использовать более явные и понятные названия опций, например
> --update-dtb-symlink/--no-update-dtb-symlink

1) Я думаю, что ничего плохого в обновлении симлинка нет при наличии devicetree у ядра.
2) Если есть /boot/extlinux/extlinux.conf то почему бы его не обновлять, невзирая на опцию --u-boot? exlinux.conf может использоваться загрузчиком extlinux.