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

Обзор 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
│ ├─ 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)
-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-приложение
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

История изменений

ВерсияДатаОписание
1.027.10.2022Начальная версия
2.006.02.2023Переход к единому обзорному документу для всех версий Baikal ARM64 SDK
2.124.08.2023В раздел Введение добавлен рисунок Компоненты Baikal ARM64 SDK
2.209.04.2024Изменено наименование версий Baikal ARM64 SDK
Добавлена информация про поддержку MBS плат
Обновлены разделы:
- Структура SDK
- Основной скрипт сборки
- Результаты выполнения скриптов