Перейти к основному содержимому

Обзор Baikal ARM64 SDK

Введение

Baikal ARM64 SDK (Software Development Kit) предназначен для создания сборок образов и различных модулей (таких как образ файловой системы, UEFI образ, модули ядра VDec или ядра Linux с определенной конфигурацией), а так же файловых систем с дополнительными пакетами утилит для микропроцессоров BE-M1000 и BE-S1000.

Работа с SDK производится через терминал или командную строку ОС GNU/Linux.

Данный документ содержит описание процесса установки (раздел Установка SDK), краткое описание структуры распакованных файлов и папок (раздел Структура SDK), доступных после установки SDK, описание работы с SDK (раздел Работа с SDK), а также характеристики поддерживаемых плат со стороны Baikal ARM64 SDK.

Компоненты Baikal ARM64 SDK

Установка SDK

Установка производится на компьютер с операционной системой GNU/Linux.

Для установки SDK необходимо выполнить следующие действия:

  1. Загрузить Baikal ARM64 SDK

    Уведомление

    К предоставляемым ресурсам применяются положения, описанные в пользовательском соглашении. Загружая любые материалы с сайта, вы соглашаетесь с данными условиями.

    Выберите версию для загрузки
  2. Распаковать архив SDK-ARM64-YYMM-N.n.zip в рабочую директорию, например /SDK:

     unzip /<путь к архиву>/SDK-ARM64-YYMM-N.n.zip -d /SDK
    Примечание

    В имени файлов:

    • YYMM-N.n – номер версии SDK
    • N.n – номер версии ядра Linux
    • YYYYMMDD – дата выпуска SDK
  3. Перейти в рабочую директорию с распакованным SDK:

    cd /SDK/SDK-ARM64-YYMM-N.n
  4. Для разрешения исполнения установочного файла как программы выполнить следующую команду:

    chmod +x ./baikal-arm64-YYMM-N.n-YYYYMMDD.run
  5. Для запуска установки в терминале необходимо выполнить следующую команду:

    ./baikal-arm64-YYMM-N.n-YYYYMMDD.run
    Примечание

    Процесс установки может занять несколько минут. Не закрывайте терминал до окончания процесса установки.

    Распакованный Baikal ARM64 SDK будет находиться в директории под названием
    baikal-arm64-YYMM-N.n-YYYYMMDD (далее ${SDK_ROOT}) рядом с установщиком.

    Примечание

    Здесь и далее по тексту ${SDK_ROOT} будет использоваться для обозначения полного пути к корневой директории Baikal ARM64 SDK.

Структура SDK

SDK содержит следующее дерево каталогов:

${SDK_ROOT}/
├─ build – директория для хранения сгенерированных образов
│ └─ kernel – директория хранения ядра и модулей ядра Linux
├─ prebuilts – эталонные загрузочные образы платы, собранные при релизе SDK
├─ src
│ ├─ acpica – исходные файлы ACPICA (для построения IASL для UEFI)
│ ├─ arm-tf – дерево исходных файлов доверенной прошивки ARM (TF-A)
│ ├─ initrd – дерево исходных файлов rootfs для Baikal Embedded Linux (BEL)
│ ├─ kernel – дерево исходных файлов ядра Linux
│ ├─ mali – исходные файлы драйвера и бинарные библиотени Arm® Mali™-T628 (только для SDK на базе ядра Linux 5.4)
│ ├─ opencsd – исходные файлы библиотеки CoreSight™ Trace Decode library
│ ├─ openocd – исходные файлы программы внутрисхемной отладки OpenOCD
│ ├─ simde – исходные файлы библиотеки SIMDe
│ ├─ uefi – исходное дерево загрузчика UEFI
│ ├─ vdec – исходные файлы драйвера видеодекодера и бинарные библиотеки
│ └─ xen – исходные файлы гипервизора Xen
├─ tools – скрипты автоматической сборки SDK
├─ utils – дополнительные утилиты (например, fs utils, dtc)
└─ xtools – ARM64 cross-toolchain с компилятором, GDB и glibc
Примечание

Каталог prebuilts содержит несколько важных бинарных образов, которые невозможно собрать из исходников:

Имя образаОписание
bm1000-scp.binПрошивка SCP для BE-M1000
bs1000-ddr-trainfware.binНабор параметров для тренинга и инициализации DDR PHY
bs1000-scp.binПрошивка SCP для BE-S1000
bs1000-scp-boot.binПрошивка SCP SoC #0 для двухсокетных плат на СнК BE-S1000
bs1000-scp-slave.binПрошивка SCP SoC #1 для двухсокетных плат на СнК BE-S1000

Работа с SDK

Для установки библиотек, необходимых для работы SDK, в терминале Linux нужно выполнить следующую команду:

sudo apt-get install acpica-tools autoconf automake bc bison \
build-essential clang flex fonts-freefont-ttf genext2fs \
imagemagick libarchive-zip-perl libfdt-dev libglib2.0-dev \
libncurses-dev libpixman-1-dev libssl-dev m4 mtools uuid-dev \
python xxd zlib1g-dev python-is-python3

Для создания и сборки образов в SDK используются два скрипта:

Основной скрипт сборки

Для получения краткой справки для основного скрипта необходимо запустить терминал и выполнить следующую команду:

${SDK_ROOT}/tools/build-boot-img.sh -h

На экран выводится основная информация скрипта: шаблон команды для сборки, список поддерживаемых плат, а так же список параметров запуска сборки скрипта. Шаблон команды для сборки выглядит следующим образом:

build-boot-img.sh <target> <options>

  • <target> – тип платы, для которой будет происходить сборка
  • <options> – параметры, с которыми мы запускаем процесс сборки

Для параметра <target> может использоваться одно из следующих возможных значений:

  • dbm10 – отладочная плата DBM 1.0 для BE-M1000
  • dbm20 – отладочная плата DBM 2.0 для BE-M1000
  • mbm10 – материнская плата MBM 1.0 для BE-M1000
  • mbm20 – материнская плата MBM 2.0 для BE-M1000
  • dbs – отладочная плата DBS для BE-S1000
  • dbs-ov – отладочная плата DBS-OV для BE-S1000
  • mbs-1s - односокетная материнская плата MBS-1S для BE-S1000
  • mbs-2s - двухсокетная материнская плата MBS-2S для BE-S1000

В качестве <options> можно использовать комбинацию следующих параметров:

ПараметрОписание
-c или --cleanОчистить предыдущие сборки (ядро Linux, UEFI и TF-A)
-ct или --clean-tfaОчистить предыдущие сборки TF-A
-cu или --clean-uefiОчистить предыдущие сборки UEFI
-d или --defconfigСобрать файл конфигурации ядра (.config) из defconfig-файла
--debugconfigСобрать файл конфигурации ядра (.config) с включенными параметрами отладки
--хenconfigСобрать файл конфигурации ядра (.config) для поддержки гипервизора Xen
--nconfigСобрать файл конфигурации ядра (.config) с помощью меню ncurses
-f или --dtbСобрать большие двоичные объекты дерева устройств (DTB)
-k или --kernelСобрать ядро Linux с текущей конфигурацией (.config)
-m или --modulesСобрать модули ядра с текущей конфигурацией (.config)
-i или --initrdСобрать образ файловой системы initrd
-D или --vdecСобрать модули ядра vdec (релиз)
-u или --uefiСобрать UEFI (релиз)
-ud или --uefi-debugСобрать UEFI (отладка)
-t или --tfaСобрать TF-A (релиз)
-td или --tfa-debugСобрать TF-A (отладка)
--xenСобрать образ EFI-приложения Xen
-b или --bootromСобрать загрузочный SPI-flash образ (BootROM)
-bl или --bootrom-linuxСобрать загрузочный SPI-flash образ (BootROM) с образом восстановления Linux
-bp или --bootrom-paddingСобрать загрузочный SPI-flash образ (BootROM) под размер SPI flash (32 МБ)
-h или --helpОтобразить справку

Для сборки полного набора образов и других бинарных файлов в качестве <options> можно использовать следующие комбинированные параметры:

  • -a или --all – применить все параметры, эквивалентно следующему списку параметров:

    --clean --defconfig --dtb --kernel --modules --initrd --vdec --uefi --tfa --bootrom

  • -ad или --all-debug – применить все параметры (отладка), эквивалентно следующему списку параметров:

    --clean --debugconfig --dtb --kernel --modules --initrd --vdec --uefi-debug --tfa-debug --bootrom

Скрипт поддерживает опциональные модификаторы дерева устройств для разных типов плат (влияют на использование параметров --dtb, --all и --all-debug).

В следующей таблице указаны параметры, которые обеспечивают модификацию дерева устройств для поддерживаемых плат.

Поддерживаемый тип платыПараметрОписание
DBM--use-emmc активировать eMMC (несовместимо с --use-sd)
DBM--use-sdактивировать SD (несовместимо с --use-eMMC)
DBM--use-hdaактивировать кодек HDA
DBM--use-i2sактивировать кодек I2S
DBM, MBM--use-lvdsактивировать LVDS
DBM--use-xgbe-krkx4активировать XGb Ethernet 10GBASE-KR/10GBASE-KX4
Все платы--coresightактивировать поддержку CoreSight
Все платы--uefi-serial-dxe=<0,1>выключить (0) или включить (1) поддержку
последовательной консоли в UEFI

Например, для сборки полного набора образов для платы DBM 1.0 с использованием LVDS и HDA кодека необходимо запустить следующую команду:

${SDK_ROOT}/tools/build-boot-img.sh dbm10 -a --use-lvds --use-hda

Скрипт сохраняет созданные образы в директории ${SDK_ROOT}/build, как описано в разделе Результаты выполнения скриптов.

Скрипт сборки образа файловой системы

Для получения краткой справки по данному скрипту, необходимо запустить терминал в директории SDK и выполнить следующую команду:

${SDK_ROOT}/tools/build-initrd-img.sh -h

Данная команда выводит на экран краткую справку с шаблоном команды и параметрами запуска. Шаблон команды для сборки выглядит следующим образом:

build-initrd-img.sh <platform> <options> <-p | --packages list>

  • <platform> – платформа для сборки (необязательное поле)
  • <-p | --packages list> – параметр запуска для установки дополнительных пакетов

Для параметра <platform> может использоваться одно единственное значение:

  • baikal

В качестве <options> можно использовать комбинацию следующих параметров:

ПараметрОписание
-c или --cleanОчистить временную директорию хранения сборок
-s или --skipbuildПропустить сборку, создать образ из существующего каталога сборок
-m или --modulesСобрать и установить модули ядра
-d или --defaultСобрать и установить пакеты по умолчанию (см. ниже)
-p или --packagesУстановить дополнительные пакеты
(перечисляются в виде списка после параметров в командной строке)
-l или --listВывести список доступных пакетов
-h или --helpВывести справку

В параметре <-p | --packages list>, через пробел, необходимо указать список дополнительных пакетов, например:

${SDK_ROOT}/tools/build-initrd-img.sh –p benchmarks i2ctools

Скрипт поддерживает установку следующих пакетов:

Имя пакетаОписание
benchmarksНабор тестов производительности
busyboxНабор Unix-утилит командной строки,
предназначенных для использования во встраиваемых системах
dropbearНебольшой SSH-сервер и клиент
e2fsprogsНабор служебных утилит для проверки целостности файловых систем,
поиска и исправления ошибок, изменения настроек, форматирования
ethtoolУтилита для проверки и настройки сетевых интерфейсов
fbtestУтилита для тестирования frame buffer
fioУтилита для тестирования производительности жестких дисков
i2ctoolsНабор утилит для работы с I2C-шиной
iperf, iperf3Утилита измерения пропускной способности сетевых интерфейсов
kexec-toolsУтилита, позволяющая загрузить новое ядро «поверх» запущенного
lmsensorsУтилита для мониторинга состояния аппаратного обеспечения
pciutilsНабор программ для определения доступных в системе PCI-устройств.
Позволяют проверить их состояния и выполнить чтение/изменение конфигурационных регистров
spitoolsНабор утилит для работы с SPI-шиной

В случае если <-p | --packages list> не указан, но указан параметр –d, будет установлены следующие пакеты: busybox, i2ctools, lmsensors, ethtool, dropbear, kexec-tools и pciutils.

Результаты выполнения скриптов

После успешного выполнения скрипта, в каталоге ${SDK_ROOT}/build будут расположены следующие файлы:

ФайлТип платыОписание
${BRD}.bl1.binВсе платыБинарный файл BL1, необходимый для записи в boot_flash
${BRD}.dtbВсе платыБинарный файл дерева устройств для выбранного типа платы
${BRD}.efi.fdВсе платыОбраз прошивки EFI
${BRD}.fip.binВсе платыБинарный файл FIP, содержащий BL2, BL31 и BL33 (EFI)
${BRD}.flash0.binDBM
DBS
MBS-1S
Образ прошивки SCP_flash
Содержит только прошивку SCP
MBS-2SОбраз прошивки SCP_flash
Содержит только прошивку SCP для SoC #0
${BRD}.flash1.binDBM
DBS
MBS-1S
Образ прошивки boot_flash
Содержит BL1, DTB (+TFW), FIP (+FAT)
MBS-2SОбраз прошивки SCP_flash
Содержит только прошивку SCP для SoC #1
${BRD}.flash.binMBS-2SОбраз прошивки boot_flash
Содержит BL1, DTB (+TFW), FIP (+FAT)
MBMПолный образ прошивки SPI_flash
Содержит прошивку SCP, BL1, DTB, FIP (+FAT)
${BRD}.ap.binMBMОбраз прошивки boot_flash
Содержит BL1, DTB, FIP (+FAT)
xen.efiВсе платыОбраз EFI-приложения гипервизора Xen
Примечание

В названии файлов ${BRD} – это dbm10, dbm20, mbm10, mbm20, dbs, dbs-ov, mbs-1s или mbs-2s для плат DBM 1.0, DBM 2.0, MBM 1.0, MBM 2.0, DBS, DBS-OV, MBS-1S и MBS-2S соответственно.

При этом в каталоге ${SDK_ROOT}/build/kernel будут расположены следующие файлы:

ФайлОписание
Image-#-baikal-arm64Образ ядра Linux
vmlinuz-#-baikal-arm64.efiСжатый образ ядра Linux, запакованный как EFI-приложение (только для SDK на базе ядра Linux 6.1 или 6.6)
config-#-baikal-arm64Файл конфигурации ядра Linux
System.map-#-baikal-arm64Файл System.map ядра Linux
initramfs.cpioНесжатый образ initramfs, который при необходимости может быть включён в ядро
initrd.img-#-baikal-arm64Cжатый образ initramfs для записи на внешний носитель
modulesМодули ядра Linux
Примечание

В названии файлов # используется для обозначения версии ядра Linux (например 6.1.63).

Характеристики поддерживаемых плат

Следующая таблица содержит список поддерживаемых со стороны Baikal ARM64 SDK типов плат и их краткие характеристики.

Тип платыТип памятиОбщий объем памяти, ГБМаксимальный объем памяти на канал, ГБ
DBM 1.0DDR4-16006432
DBM 2.0DDR4-24006432
MBM 1.0DDR4-24006432
MBM 2.0DDR4-24006432
DBSDDR4-3200768128
DBS-OVDDR4-3200768128
MBS-1SDDR4-3200768128
MBS-2SDDR4-32001 536128