Ports/riscv64/U-Boot: различия между версиями

Материал из ALT Linux Wiki
< Ports‎ | riscv64
 
(не показаны 2 промежуточные версии этого же участника)
Строка 7: Строка 7:
=== SPL ===
=== SPL ===


TBD.
SPL (Secondary Program Loader) является промежуточным этапом загрузки платы и служит для инициализации самых базовых её компонентов (например, ядер (cores) и контроллера памяти) и загрузки следующего загрузчика. Сейчас для [[HiFive Unmatched]] и [[HiFive Unleashed]] мы рекомендуем U-Boot SPL. Для qemu SPL, очевидно, не нужен; для других плат может использоваться что-то своё.
 
U-Boot SPL представляет собой отдельный бинарный файл -- например, для Unmatched это <tt>/usr/share/u-boot/sifive_unleashed/u-boot-spl.bin</tt> из пакета u-boot-sifive. При обновлении пакета u-boot этот файл обновляется только на файловой системе; сделать так, чтобы новый файл использовался при загрузке платы, нужно вручную, специфичным для каждой платы способом.


=== OpenSBI ===
=== OpenSBI ===
Строка 69: Строка 71:
## c NVME
## c NVME


При тестировании необходимо при каждой загрузке rонтролировать, что используется именно свежий u-boot. В логах в самом начале загрузки будет указана версия u-boot и время сборки, например:
При тестировании необходимо при каждой загрузке контролировать, что используется именно свежий u-boot. В логах в самом начале загрузки будет указана версия u-boot и время сборки, например:


  U-Boot SPL 2022.07 (Aug 30 2022 - 13:03:34 +0000)
  U-Boot SPL 2022.07 (Aug 30 2022 - 13:03:34 +0000)

Текущая версия от 13:50, 27 июля 2023

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


U-Boot на riscv64

Здесь будет что-нибудь написано.

SPL

SPL (Secondary Program Loader) является промежуточным этапом загрузки платы и служит для инициализации самых базовых её компонентов (например, ядер (cores) и контроллера памяти) и загрузки следующего загрузчика. Сейчас для HiFive Unmatched и HiFive Unleashed мы рекомендуем U-Boot SPL. Для qemu SPL, очевидно, не нужен; для других плат может использоваться что-то своё.

U-Boot SPL представляет собой отдельный бинарный файл -- например, для Unmatched это /usr/share/u-boot/sifive_unleashed/u-boot-spl.bin из пакета u-boot-sifive. При обновлении пакета u-boot этот файл обновляется только на файловой системе; сделать так, чтобы новый файл использовался при загрузке платы, нужно вручную, специфичным для каждой платы способом.

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

  1. Извлечь u-boot.bin из тестируемого пакета
  2. Использовать его, убедиться, что загружается последняя регулярка

При тестировании необходимо дополнительно проконтролировать, что используется именно свежий 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

  1. baseline - записать на sd-карту свежую регулярку (img или тарбол) при помощи alt-rootfs-installer
  2. обновить u-boot и проверить загрузку с MMC
    1. установить тестируемый пакет u-boot-sifive на Unleashed
    2. обновить spl и proper (u-boot.itb) на соответствующих разделах sd-карты
    3. выключить и перевести переключатели MSEL
    4. проверить загрузку
  3. обновить u-boot на SPI-флешке и проверить загрузку с неё.

HiFive Unmatched

Предварительные замечания:

  • чтобы загружаться с SD-карты, можно просто вынуть nvme, а можно снять с её разделов флаг bootable (aka legacy bios bootable)
  • для тестирования загрузки с SPI flash/не SPI flash нужно не стесняться переключать MSEL
  • на момент создания этой статьи LiveCD ISO работает нестабильно (полноценно загружается один раз из трёх). Не стоит пугаться такого, главное что загрузка с USB пошла.

Тестирование:

  1. baseline - записать на sd-карту свежую регулярку (img или тарбол) при помощи alt-rootfs-installer и загрузиться с неё
  2. обновить U-Boot на MMC (см. HiFive_Unmatched#Обновление_U-Boot_на_SD-карте) и проверить загрузку
  3. обновить (см. HiFive_Unmatched#Запишем_u-boot) или просто записать U-Boot на SPI flash, переключить MSEL в 0110 и провеить загрузку
    1. с SD-карты
    2. ISO c USB flash
    3. c NVME

При тестировании необходимо при каждой загрузке контролировать, что используется именно свежий 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
[....]