Ports/riscv64/U-Boot: различия между версиями
Строка 11: | Строка 11: | ||
=== OpenSBI === | === OpenSBI === | ||
RISC-V Supervisor Binary Interface (SBI) -- это [https://github.com/riscv/riscv-sbi-doc спецификация] | RISC-V Supervisor Binary Interface (SBI) -- это [https://github.com/riscv/riscv-sbi-doc спецификация] интерфейса между платформенно-специфичной прошивкой (firmware) и операционной системой (или гипервизором). Firmware работает в machine mode, в котором имеется полный доступ к железу. Операционная система (ядро linux например) работает в supervisor mode, в котором прямого доступа к железу меньше, и может взаимодействовать с firmware при помощи интерфейса, похожего на системные вызовы. | ||
TBD: | OpenSBI -- самая известная реализация такого firmware. | ||
TBD: generic platform and device trees; как оно раскидано по пакетам | |||
Таким образом, чтобы свежий OpenSBI добрался до конкретной платы, необходимо | Таким образом, чтобы свежий OpenSBI добрался до конкретной платы, необходимо |
Версия от 12:15, 11 ноября 2022
U-Boot на riscv64
Здесь будет что-нибудь написано.
SPL
TBD.
OpenSBI
RISC-V Supervisor Binary Interface (SBI) -- это спецификация интерфейса между платформенно-специфичной прошивкой (firmware) и операционной системой (или гипервизором). Firmware работает в machine mode, в котором имеется полный доступ к железу. Операционная система (ядро linux например) работает в supervisor mode, в котором прямого доступа к железу меньше, и может взаимодействовать с firmware при помощи интерфейса, похожего на системные вызовы.
OpenSBI -- самая известная реализация такого firmware.
TBD: generic platform and device trees; как оно раскидано по пакетам
Таким образом, чтобы свежий OpenSBI добрался до конкретной платы, необходимо
- собрать в репозиторий этот свежий OpenSBI
- собрать с ним U-Boot
- обновить пакет u-boot на машине
- (чаще всего) вручную прописать новые сборки u-boot так, чтобы они использовались (см. например HiFive_Unmatched#Запишем_u-boot).
EFI и grub
U-Boot реализует EFI, что позволяет тестировать работу EFI на поддерживаемых платах (например, Unmatched). Ядра в репозитории не собираются как EFI app, поэтому проще оказывается использовать связку U-Boot -(EFI)-> GRUB -> Linux. По такой схеме загружаются например live iso сборок ALT.
Теоретически такая схема позволяет делать универсальные установочные образы, и использовать их, например, на Unmatched, просто прописав U-Boot на SPI flash. На практике оно пока не очень стабильно работает (а точнее, достаточно часто виснет).
Тестирование
QEMU
- Извлечь u-boot.bin из тестируемого пакета
- Использовать его, убедиться, что загружается последняя регулярка
При тестировании необходимо дополнительно проконтролировать, что используется именно свежий u-boot. В логах, после вывода OpenSBI, будет указана версия u-boot и время сборки, например:
U-Boot 2022.07 (Aug 30 2022 - 13:03:34 +0000) CPU: rv64imafdcsuh Model: riscv-virtio,qemu DRAM: 4 GiB
HiFive Unleashed
- baseline - записать на sd-карту свежую регулярку (img или тарбол) при помощи alt-rootfs-installer
- обновить u-boot и проверить загрузку с MMC
- установить тестируемый пакет u-boot-sifive на Unleashed
- обновить spl и proper (u-boot.itb) на соответствующих разделах sd-карты
- выключить и перевести переключатели MSEL
- проверить загрузку
- обновить u-boot на SPI-флешке и проверить загрузку с неё.
HiFive Unmatched
Предварительные замечания:
- чтобы загружаться с SD-карты, можно просто вынуть nvme, а можно снять с её разделов флаг bootable (aka legacy bios bootable)
- для тестирования загрузки с SPI flash/не SPI flash нужно не стесняться переключать MSEL
- на момент создания этой статьи LiveCD ISO работает нестабильно (полноценно загружается один раз из трёх). Не стоит пугаться такого, главное что загрузка с USB пошла.
Тестирование:
- baseline - записать на sd-карту свежую регулярку (img или тарбол) при помощи alt-rootfs-installer и загрузиться с неё
- обновить U-Boot на MMC (см. HiFive_Unmatched#Обновление_U-Boot_на_SD-карте) и проверить загрузку
- обновить (см. HiFive_Unmatched#Запишем_u-boot) или просто записать U-Boot на SPI flash, переключить MSEL в 0110 и провеить загрузку
- с SD-карты
- ISO c USB flash
- c NVME
При тестировании необходимо при каждой загрузке rонтролировать, что используется именно свежий u-boot. В логах в самом начале загрузки будет указана версия u-boot и время сборки, например:
U-Boot SPL 2022.07 (Aug 30 2022 - 13:03:34 +0000) Trying to boot from SPI U-Boot 2022.07 (Aug 30 2022 - 13:03:34 +0000) CPU: rv64imafdc Model: SiFive HiFive Unmatched A00 DRAM: 16 GiB [....]