Ports/aarch64/RaspberryPi4andU-Boot: различия между версиями
Jqt4 (обсуждение | вклад) Нет описания правки |
|||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
== Загрузка Альт на Raspberry Pi 4 с помощью u-boot == | == Загрузка Альт на Raspberry Pi 4 с помощью u-boot == | ||
В Альт, при использовании u-boot в качестве загрузчика, происходит запуск EFI-приложения GRUB, которое загружает систему, или загрузка в память | |||
файлов ядра Linux, dtb, initrd, прописанных в /boot/extlinux/extlinux.conf и передача управления ядру из u-boot. | |||
В Альт, при использовании u-boot в качестве загрузчика, происходит загрузка в память | |||
файлов ядра Linux, dtb, initrd, прописанных в /boot/extlinux/extlinux.conf и передача управления ядру. | |||
Загрузчик Raspberry Pi 4 (находится в файле start4.elf <ref>https://www.raspberrypi.org/documentation/configuration/boot_folder.md</ref>) при загрузке модифицирует файл dtb, | Загрузчик Raspberry Pi 4 (находится в файле start4.elf <ref>https://www.raspberrypi.org/documentation/configuration/boot_folder.md</ref>) при загрузке модифицирует файл dtb, | ||
в зависимости от параметров в config.txt и установленных плат расширения <ref>https://www.raspberrypi.org/documentation/configuration/device-tree.md</ref>. | в зависимости от параметров в config.txt и установленных плат расширения <ref>https://www.raspberrypi.org/documentation/configuration/device-tree.md</ref>. | ||
U-boot и GRUB не делают такой модификации. | |||
Следовательно, настройки в config.txt работают только в режимах, когда firmware загружает dtb. | |||
=== Загрузка Raspberry Pi 4 === | === Загрузка Raspberry Pi 4 === | ||
Строка 38: | Строка 21: | ||
ядра, загрузка и модификация dtb <ref>https://www.raspberrypi.org/documentation/configuration/device-tree.md</ref>, а при необходимости и загрузка inintrd с FAT раздела SD карты. | ядра, загрузка и модификация dtb <ref>https://www.raspberrypi.org/documentation/configuration/device-tree.md</ref>, а при необходимости и загрузка inintrd с FAT раздела SD карты. | ||
Вместо ядра Linux может быть загружен исполняемый файл u-boot. | |||
Вместо ядра Linux | |||
=== Скрипты для переключения вариантов загрузки === | === Скрипты для переключения вариантов загрузки === | ||
Нужно | Нужно иметь возможность использовать различные способы загрузки, при этом не потеряв | ||
возможности обновления ядер. | возможности обновления ядер. | ||
Строка 78: | Строка 32: | ||
после обновления: | после обновления: | ||
* '''rpi4-boot-nouboot''': firmware загружает ядро, dtb и initrd | * '''rpi4-boot-nouboot''': firmware загружает ядро, dtb и initrd. U-boot не используется. | ||
* '''rpi4-boot-uboot-fw''': firmware загружает dtb. U-boot загружает ядро и initrd. | * '''rpi4-boot-uboot-fw''': firmware загружает dtb. U-boot загружает ядро и initrd. | ||
* '''rpi4-boot-uboot''': u-boot загружает ядро, dtb и initrd. | * '''rpi4-boot-uboot''': u-boot пытается загрузить grub-efi. Если это не удалось u-boot загружает ядро, dtb и initrd. | ||
Эти скрипты могут принимать flavour ядра в качестве аргумента. | Эти скрипты могут принимать flavour ядра в качестве аргумента. <ref>Начиная с версии rpi4-boot-switch-0.13-alt1 команда rpi4-boot-uboot не принимает flavour ядра в качестве аргумента ({{altbug|43007}}). Вместо этого можно выбрать требуемое ядро при загрузке в меню grub-efi (флаг "загрузочный" у раздела c EFI) или u-boot (флаг "загрузочный" у раздела с rootfs)</ref> | ||
В результате кроме изменения (или не изменения) варианта загрузки будет изменен и flavour | В результате кроме изменения (или не изменения) варианта загрузки будет изменен и flavour | ||
Строка 93: | Строка 47: | ||
Таким образом, если после обновления ядра update-kernel запустить скрипт, соответствующий | Таким образом, если после обновления ядра update-kernel запустить скрипт, соответствующий | ||
требуемому варианту загрузки то будет настроена загрузка с новым ядром. | требуемому варианту загрузки то будет настроена загрузка с новым ядром. | ||
Дополнительные возможности - автоматическое обновление: | |||
* ядра на FAT разделе при обновлении ядра в системе | |||
* firmware и u-boot на FAT разделе при обновлении firmware или u-boot в системе | |||
Скрипты находятся в пакете [https://packages.altlinux.org/ru/sisyphus/specfiles/rpi4-boot-switch rpi4-boot-switch ] | Скрипты находятся в пакете [https://packages.altlinux.org/ru/sisyphus/specfiles/rpi4-boot-switch rpi4-boot-switch ] | ||
Текущая версия от 11:18, 21 декабря 2022
Загрузка Альт на Raspberry Pi 4 с помощью u-boot
В Альт, при использовании u-boot в качестве загрузчика, происходит запуск EFI-приложения GRUB, которое загружает систему, или загрузка в память файлов ядра Linux, dtb, initrd, прописанных в /boot/extlinux/extlinux.conf и передача управления ядру из u-boot.
Загрузчик Raspberry Pi 4 (находится в файле start4.elf [1]) при загрузке модифицирует файл dtb, в зависимости от параметров в config.txt и установленных плат расширения [2].
U-boot и GRUB не делают такой модификации.
Следовательно, настройки в config.txt работают только в режимах, когда firmware загружает dtb.
Загрузка Raspberry Pi 4
На SD карте, установленной в Raspberry Pi 4 должен быть FAT раздел, на котором находятся файлы, необходимые для загрузки.
Начальный загрузчик Raspberry Pi 4 находится не на SD карте, а на подключенной по SPI интерфейсу микросхеме EEPROM [3] Он загружает файл start4.elf в GPU VideoCore [4] после чего производится загрузка ядра, загрузка и модификация dtb [5], а при необходимости и загрузка inintrd с FAT раздела SD карты.
Вместо ядра Linux может быть загружен исполняемый файл u-boot.
Скрипты для переключения вариантов загрузки
Нужно иметь возможность использовать различные способы загрузки, при этом не потеряв возможности обновления ядер.
Был создан набор скриптов, модифицирующих конфигурационные файлы для настройки режима загрузки, изменения flavour загружаемого ядра, изменения версии загружаемого ядра после обновления:
- rpi4-boot-nouboot: firmware загружает ядро, dtb и initrd. U-boot не используется.
- rpi4-boot-uboot-fw: firmware загружает dtb. U-boot загружает ядро и initrd.
- rpi4-boot-uboot: u-boot пытается загрузить grub-efi. Если это не удалось u-boot загружает ядро, dtb и initrd.
Эти скрипты могут принимать flavour ядра в качестве аргумента. [6]
В результате кроме изменения (или не изменения) варианта загрузки будет изменен и flavour загружаемого ядра.
Если flavour не указан, то используется flavour ядра, работающего в данный момент.
Скрипты ищут самое свежее ядро с требуемым flavour, установленное в системе.
Таким образом, если после обновления ядра update-kernel запустить скрипт, соответствующий требуемому варианту загрузки то будет настроена загрузка с новым ядром.
Дополнительные возможности - автоматическое обновление:
- ядра на FAT разделе при обновлении ядра в системе
- firmware и u-boot на FAT разделе при обновлении firmware или u-boot в системе
Скрипты находятся в пакете rpi4-boot-switch
- ↑ https://www.raspberrypi.org/documentation/configuration/boot_folder.md
- ↑ https://www.raspberrypi.org/documentation/configuration/device-tree.md
- ↑ https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md
- ↑ https://www.raspberrypi.org/documentation/configuration/boot_folder.md
- ↑ https://www.raspberrypi.org/documentation/configuration/device-tree.md
- ↑ Начиная с версии rpi4-boot-switch-0.13-alt1 команда rpi4-boot-uboot не принимает flavour ядра в качестве аргумента (altbug #43007). Вместо этого можно выбрать требуемое ядро при загрузке в меню grub-efi (флаг "загрузочный" у раздела c EFI) или u-boot (флаг "загрузочный" у раздела с rootfs)