Отсутствует. Программа представляет собой двоичный образ, включающий все необходимые для себя компоненты и запускается на процессоре BMC с момента его выхода из сброса, то есть не опирается на какое-либо другое ранее запущенное/загруженное программное обеспечение.
Программа написана с использованием широкого набора языков программирования, среди которых C, C++, Bitbake, Python, Shell и другие.
ПО REIMU предназначено для проведения действий с модулем на основе процессора Эльбрус-8С, Эльбрус-8СВ и других подобных модулей (далее платформа). При этом платформа может быть выключена, достаточно подключить к ней блок питания (если он не подключен) и подать на него питающее напряжение.
В этом разделе описывается общая схема работы ПО REIMU:
-
загрузка U-Boot (программы начального старта BMC);
-
загрузка ядра Linux;
-
старт SystemD и запуск необходимых сервисов, включая сервисы Phosphor;
-
ожидание действий пользователя.
Сервисы Phosphor запускаются только в случае их наличия в двоичном образе (далее прошивка). Это справедливо для прошивок объёмом более 64 МБ.
При работе ПО REIMU не имеет прямых связей с другими программами. Косвенные связи с пользовательским ПО производятся по независимым от программы стандартным протоколам, например, SSH или HTTPS.
Используются вычислительные комплексы, построенные на основе процессоров «Эльбрус» и модули, входящие в них, при условии наличия на модуле микросхемы AST2400 или AST2500 или совместимой, или установленного в специальный разъём модуля МУС-А, и всей необходимой для их функционирования обвязки.
Сборка программы происходит на инструментальном ВК (далее хост).
-
Хост должен быть на основе процессора с архитектурой x86_64 и иметь установленную ОС Ubuntu-20.04 или другую ОС Linux (в этом случае успешная сборка возможна, но не гарантируется).
-
Желательно, чтобы хост имел не менее 16 ядер и не менее 8 ГБ памяти, а также быстрый диск, в идеале SSD, желательно NVMe. В противном случае сборка может завершиться с ошибкой или продолжаться слишком долго.
-
Необходимо не менее 100 ГБ свободного пространства на диске для каждого собираемого флавора.
-
Должен иметься доступ в интернет по протоколам HTTP, HTTPS, а также, по возможности, git. Если хост находится за прокси-сервером, то этот прокси-сервер должен быть указан в настройках, доступных программам
git
,wget
,curl
. -
Должна быть сконфигурирована локаль
en_US.UTF-8
(на Ubuntu 20.04 для этого нужно выполнить командыsudo apt install locales && sudo dpkg-reconfigure locales
).
-
Должны быть установлены программы
git
,curl
,cpio
,wget
,python3-dev
. -
Должно быть развёрнуто сборочное окружение: для Ubuntu 20.04 его разворачивание заключается в установке пакетов
build-essential
,gcc
,g++
,make
,gawk
,diffstat
,chrpath
,binutils
,zstd
. -
Возможно, потребуется установка пакетов
libfdt1
,libfdt-dev
, либо, наоборот, их удаление (в зависимости от ОС).
В ОС Ubuntu (и других подобных) установка вышеупомянутого ПО выполняется командой:
sudo apt install git curl cpio wget python3-dev build-essential gcc g++ make gawk diffstat chrpath binutils libfdt1 libfdt-dev zstd
Сборка не должна производиться в каталоге, являющимся сетевым ресурсом NFS.
Сборка не должна производиться из-под суперпользователя (root).
Сборка не должна производиться в каталоге, находящемся внутри каталогов /usr
, /etc
, /lib
, /dev
или /run
.
На 32-ядерном (64 потока) AMD Ryzen Threadripper 2990WX 3000 МГц, 64 ГБ памяти, 500 ГБ NVMe Samsung SSD 970 EVO Plus сборка с нуля занимает не менее полутора часов.
Предупреждения при сборке, заканчивающиеся словами «attempting MIRRORS if available
» следует игнорировать (это означает, что выкачка зависимости не удалась с первого раза и была сделана с альтернативного адреса).
Две пары предупреждений, относящихся к «phosphor-vlan
» также следует игнорировать (на данный момент это специфика OpenBMC, т.к. phosphor-vlan
добавляется в ядро не «чистым» способом).
Сообщение «Using an insecure image signing key!
» также не является ошибкой (на данный момент образ не подписывается).
Сборка может производиться в следующих конфигурациях (флаворах):
-
REIMU-4232M — модуль МУС-А, AST2400, флешка 32 МБ, вывод через UART2;
-
REIMU-4232 — интегрированный AST2400, флешка 32 МБ, вывод через UART2;
-
REIMU-4264 — интегрированный AST2400, флешка 64 МБ, вывод через UART2;
-
REIMU-4564 — интегрированный AST2400, флешка 64 МБ, вывод через UART5;
-
REIMU-5564 — интегрированный AST2500, флешка 64 МБ, вывод через UART5.
Также флавор REIMU-4564 соответствует изделию ТВГИ.00308-01, флавор REIMU-5564 — изделиям ТВГИ.00306-01 и 643.ДАЦН.20001-01.
Алгоритм сборки состоит в следующем:
- Скачать исходные тексты программы:
git clone https://github.com/makise-homura/openbmc
- Войти в каталог с исходными текстами и переключиться на нужный тег (в примере
reimu-1.0.1
; вместо него можно поставить тег последнего релиза на гитхабе):
cd openbmc
git checkout reimu-1.0.1
Если исходники поставляются отдельным архивом, вместо пунктов 1 и 2 следует их распаковать в какой-нибудь каталог и перейти в него.
- В случае недоступности протокола git задать переменные, которые позволяют скачивать репозитории по протоколу HTTPS:
git config url.https://github.com/.insteadof git://github.com/
git config url.https://git.yoctoproject.org/git/.insteadof git://git.yoctoproject.org/
git config url.https://git.savannah.gnu.org/git/.insteadof git://git.savannah.gnu.org/
- Настроить сборку на нужный флавор (в примере — REIMU-5564):
source setup reimu-5564
Здесь вместо слова source
можно использовать символ точки.
После выполнения этой команды текущий каталог будет сменён.
- Запустить сборку образа прошивки из каталога, в который произведён переход предыдущей командой:
bitbake obmc-phosphor-image
-
Результатом сборки является файл с именем вида
obmc-phosphor-image-$FLAVOR-*.static.mtd
, лежащий в каталогеtmp/deploy/images/$FLAVOR
, где$FLAVOR
- имя выбранного флавора. -
Сборка является успешной в случае появления указанного файла.
-
В случае необходимости начать сборку с нуля, необходимо удалить каталог, который стал текущим после выполнения п. 4, и повторить сборку, начиная с п. 4.
В процессе сборки также генерируется файл obmc-phosphor-image-$FLAVOR-*.static.mtd.tar
, который применяется при обновлении прошивки на BMC с прошивками REIMU-4264, REIMU-4564 и REIMU-5564.
Первично результат сборки загружается в первую микросхему флеш-памяти BMC при изготовлении материнской платы на заводе-изготовителе.
Программирование ПЗУ производится через соответствующий разъём, указанный в документации на плату, с помощью программатора SPI NOR флеш-памяти (например, Dediprog SF100/SF600).
Программирование производится в соответствии с документацией на ПО программатора. Содержимое .mtd
-файла записывается с адреса 0
при напряжении питания микросхемы 3,0-3,3 В.
В дальнейшем обновление прошивки производится средствами ПО REIMU, как указано в его руководстве оператора (для флаворов REIMU-4264, REIMU-4564 или REIMU-5564 для этого потребуется файл с именем вида obmc-phosphor-image-$FLAVOR-*.static.mtd.tar
, также получившийся при сборке).
ПО REIMU запускается автоматически при подаче дежурного питания на материнскую плату или перезагрузке BMC.
Завершение работы ПО REIMU происходит при снятии дежурного питания с материнской платы или перезагрузке BMC.
На платах, не поддерживающих хранение времени в специализированной микросхеме, доступной BMC, при отсутствии дежурного напряжения питания время в BMC сбрасывается.
Входными данными являются любые данные, которые своими действиями (ввод команд в SSH-сессии, нажатия кнопок в web-интерфейсе и т. п.) пользователь передаёт ПО REIMU.
Выходными данными являются любые данные, которые выдаёт ПО REIMU пользователю или управляемой им платформе.
ВК — вычислительный комплекс
МН — машинный носитель
ОС — операционная система
ПЗУ — постоянное запоминающее устройство
ПО — программное обеспечение
AMD — Advanced Micro Devices
BMC — Baseboard Management Controller
HTTP — HyperText Transfer Protocol
HTTPS — HyperText Transfer Protocol Secure
NFS — Network File System
NOR — Not-Or
NVMe — Non-Volatile Memory Express
REIMU — REmote Intelligent Management Unit
SPI — Serial Peripheral Interface
SSD — Solid State Drive
SSH — Secure SHell