Обзор загрузчика

spi-boot - SPL(BL1) загрузчик, занимается начальной загрузкой содержимого из SPI flash-накопителя в CRAM

Исходный код

  • boot-spi.S - исходный код загрузчика

  • boot-spi.xl - скрипт линковщика для сборки загрузчика

  • compile.py - Python скрипт для корректной сборки конечного образа, он вызывается в качестве post image скрипта в buildroot

  • boards-memory-configs/memory-config-*.S - исходный код инициализации контроллера памяти SDRAM для определенного модуля

  • boards-memory-configs/memory-configs.xl - скрипт линковщика для сборки исходного кода инициализации контроллера памяти SDRAM

Порядок загрузки

  1. spi-boot1 - первая стадия загрузчика, на которой выполняется загрузка второй стадии и ПО для инициализации контроллеров памяти SDRAM или DDR из SPI flash-накопителя в CRAM

  2. memory-config - ПО инициализации контроллеров памяти SDR, DDR1 SDRAM соотвественно

  3. spi-boot2 - вторая стадия загрузчика, на которой выполняется загрузка U-Boot из SPI flash-накопителя в CRAM

  4. U-Boot - передача управления загрузчику следующего уровня TPL(BL2)

Конфигурация и сборка

Примечание

В ходе выполнения сборки Buildroot, выполняются post image bash скрипты, которые корректно соберают загрузчик и создадают конечный образ.

Конфигурация выполняется через параметры запуска Python скрипта compile.py.

Предупреждение

Требуется Python 3.5 и выше

Доступные параметры:

$ python3 compile.py --help
usage: compile.py [-h] -c chip (-b board | -i <ddr3init.elf>) -f <u-boot>
                [-t <mipsel-elf32->]

Create binary bootloader for ELVEES Mips Multicores

optional arguments:
-h, --help            show this help message and exit
-c chip, --chip-name chip
                        Name of the chip, the bootloader is building for
-b board, --board-name board
                        Name of the board, in case of using our memory
                        initialization
-i <ddr3init.elf>, --ram-init <ddr3init.elf>
                        Path to memory initialization elf file, in case of
                        using external one
-f <u-boot>, --firmware <u-boot>
                        Path to firmware elf file
-t <mipsel-elf32->, --triple <mipsel-elf32->
                        Triple to use as cross compile

Пример для микросхемы MCT-06:

$ python3 ./compile.py \
    -c mct06 \
    -b mct06em \
    -f <path-to-image>/u-boot \
    -t <path-to-toolchain>/bin/mipsel-elvees-elf-

Примеры для остальных микросхем можно посмотреть в дистрибутиве buildroot по пути: external-<имя_микросхемы>/board/post-image.sh