Привет, Хабр! UPDATE: Скрипты для автоматической сборки готового образа можно найти в моем GitHub а также готовые .img образы для записи на SD карту, можно скачать с GitHub Action, время жизни артефактов сборки 90 дней.Совсем недавно, компания Canonical, выпустила Ubuntu 22.04, "потыкав" ее на виртуалке, решил накатить апдейт на домашний ноут, пока накатывались обновления, перебирал девкиты на полке, нашел запыленную STM32MP157c-DK2 отладучную платку от старого проекта, ну и подумал - почему бы и не попробовать запустить 22-ю убунту на этом CPUБлаго Canonical публикует в открытый доступ релизы базового rootfs для ARM процессоров.В интернете полно статей как собрать Yocto или Buildroot под данный процессор, но ни одной как собрать свой собственный дистрибутив, по крайней мере, я не встречал. STMicroelectronics может похвастаться огромным выбором 8-bit и 32-bit микроконтроллеров (MCU), но так же в их арсенале есть CPU STM32MP1Существует три семейства процессоров серии STM32MP1: STM32MP151, STM32MP153 и STM32MP157. Их основные характеристики приведены в таблице. STM32MP1 ядра Cortex-A7 работают на частоте 650 МГц и сопровождаются 32-Кбайтным кешем инструкций L1, 32-Кбайтным кешем первого уровня и 256-Кбайтным кешем второго уровня. Также A7 поставляются с расширениями устройства Arm Neon SIMD, предназначенных для ускорения работы мультимедиа и алгоритмов обработки сигналов. Для поддержания обработки в режиме реального времени с низким энергопотреблением ядро Cortex-M4 работает на частоте 209 МГц с модулем обработки чисел с плавающей точкой (FPU), полным набором DSP команд и с модулем защиты памяти (MPU), предназначенным для повышения безопасности использования устройства. Линейка STM32MP1 имеет встроенный дополнительный 3D графический процессор GPU совместимый с OpenGL для расширенной разработки HMI, работающей на частоте 533 МГц. GPU поддерживает интерфейсы DDR и LPDDR с тактовой частотой 533 МГц, 256 КБ системной оперативной памяти, а также 384 КБ ОЗУ MCU и 64 КБ оперативной памяти, что облегчает Cortex-M4 обработку в режиме реального времени и работу в режиме пониженного энергопотребления. Для проведения безопасных операций, STM32MP1 предлагает надежный набор инструментов безопасности, включая технологию Arm TrustZone, которая обеспечивает изоляцию аппаратного обеспечения для повышения надежности функционирования ПО в целом, в масштабе всей системы. Кромее того, STM32MP1 поддерживает аппаратную криптографическую опцию, имеет защищенные ОЗУ и ПЗУ, а также защиту от несанкционированного доступа и защищенные часы реального времени. Линейка предлагает 16- и 32-разрядные элементы управления и таймеры, а для аналоговых входов - два полных 16-разрядных АЦП с поддержкой до 22 каналов обработки. В дополнение ко всему, STM32MP1 предлагает до 20 коммуникационных интерфейсов, поддерживающих широкую номерклатуру камер, дисплеев, сети Ethernet, порты USB, HDMI и UART. Для большей функциональной гибкости, обслуживание работы большинства периферийных устройств может быть распределена между Cortex-A7 или Cortex-M4. Собственно начнем. Билдить будем на ноуте с установленной Ubuntu, можно на виртуалке, уделенной машине, без разницы  - нам нужна только консолька.Собирать будем по такую плату STM32MP157c-DK2 Разобьём сборку на этапы: Собираем U-boot . Собираем OP-TEE - да, грузить ядро и Ubuntu 22.04 будем в защищенном режиме, в инете полно статей как собрать бутлоадер на этот проц, но нет как собрать arm-trust. Собираем ядро Linux . Кастомизируем базовый rootfs Ubuntu 22.04. Собираем все это в одну кучу и создаем готовый .img для заливки на SD карту. Первым делом качаем ARM кросс компилятор GCC и распаковываем, им будем собирать всю нашу систему. Проверяем версию: Выхлоп Устанавливаем зависимости: U-Boot Качаем U-boot с репозитория ST и собираем trusted u-boot Нам понадобятся два файла u-boot.dtb и u-boot-nodtb.bin  для подписи и сборки OP-TEE  Качаем OP-TEE с git STВнимательно к переменой BL33_CFG и BL33 мы указываем каталог где лежит собраный U-boot и файлы u-boot.dtb и u-boot-nodtb.bin  Успешный выхлоп сбокрки OP-TEE Сборка загрузчика закончена, нам понадобятся два файла fip.bin и tf-a-stm32mp157c-dk2.stm32 Kernel Linux  Собирать ядро, будем с официального репозитоия ST, читам релизноты и смотрим что там добавили нового и пофиксили. На данный момент крайняя версия 5.10.61  Конфигурируем ядро по своему вкусу и задач, multi_v7_defconfig уже содержит все необходиое, в конфиг фрагментах, находяться дравера для STM32MP1 CPU и выключена поддержка других архитектур, что входят в базовый общий конфиг armv7 процессоров.К статье прикреплю свой конфиг, с которым собирал ядро.Собираем ядро и модули к нему  Собираем dts Создаем временный каталог и копируем туда "артефакты" сборки  Копируем dtsb файлы  Создаем переменную с версией ядра Подготовка образа SD карты, создаем образ и разбиваем на разделы и делаем его загружаемым  Для манипуляции с файловой системой в .img, можем воспользоваться утилитой loop Копируем наш подписаный u-boot и файл с конфигурацией RAM Форматируем раздел с нашим будущим rootfs. Создаем каталог для монтирования нашей файловой системы и монтируем  скачиваем Ubuntu 22.04 базовый образ и распаковываем примонтированый каталог  Создаем файл extlinux.conf Копируем наше ядро, dtsb, модули ядра Скачиваем и копируем WiFi firmware   Подключаемся к нашей файловой системе с помощью QEMU static arm и устанавливаем нужные нам пакетыБолее подробно, можно почитать в соседнем посте Создание образа Ubuntu для ARM «from scratch» Хелпер скрипт для монтирования  Устанавливаем нужные нам пакеты После того как установили нужные вам пакеты для, не забываем выйти  P.S. Вы можете сколько угодно раз монтировать этот готовый образ и доустанавливать новые пакеты. Размонтируем все каталоги и очистим loop Записываем с помощью balenaEtcher наш образ на SD карту Лог загрузки Ubuntu 22.04   Update:Удалось запустить gnome и Ubuntu-desktop на плате EV-STM32MP157-SODIMM с RBG дисплеем Waveshare 7 inch 1024*600 тормоза дикие, 650МГц  явно маловато для тяжелого гнома скрипты для автоматической сборки U-boot, AT-F, Kernel и "упаковки" всего в образ <img> для записи на SD картуGitHub: https://github.com/cvetaevvitaliy/stm32mp1-ubuntu  Embedded developer