Сборка qemu aarch64 из исходников под ALT Linux.

Host: Архитектура x86_64. OC ALT Linux.

Alt Linux (p10) 
cat /etc/os-release
 
NAME="alt-platform-builder"
VERSION="10.1"
ID=altlinux
VERSION_ID=10.1
PRETTY_NAME="alt-platform-builder 10.1 (Aronia)"
ANSI_COLOR="1;33"
CPE_NAME="cpe:/o:alt:platform-builder:10.1"
BUILD_ID="alt-platform-builder 10"
ALT_BRANCH_ID="p10"
HOME_URL="https://www.basealt.ru/platform"
BUG_REPORT_URL="https://bugs.altlinux.org/"
LOGO=basealt
Сборка qemu-user-aarch64
echo "Скачиваем последнюю версию qemu ..."
wget --no-check-certificate https://download.qemu.org/qemu-10.0.2.tar.xz
tar -xJf qemu-10.0.2.tar.xz
 
INSTALL_DIR="/usr/bin"
TARGET="aarch64-linux-user"
 
cd qemu-10.0.2
mkdir build && cd build
 
echo "Конфигурируем сборку..."
../configure --target-list="$TARGET" --static --enable-user --disable-system
 
# собираем
make -j$(nproc)
 
# проверка, что статическая
ldd ./qemu-aarch64
statically linked
 
# далее все под root
install -v -m 755 ./qemu-aarch64 "$INSTALL_DIR/qemu-aarch64.static"
ln -sfv "qemu-aarch64.static" "$INSTALL_DIR/qemu-aarch64-static" || echo "Ошибка создания симлинка"
 
echo "Проверяем установку:"
"$INSTALL_DIR/qemu-aarch64" --version || echo "Установленный бинарник не работает"
Создание chroot окружения. Запуск binfmt сервиса
export LFS="/alt-chroot" # Директория для chroot-окружения
ROOTFS="mcom03-altlinux-p10-rootfs.tar.gz"
URL="https://dist.elvees.com/mcom03/altlinux/2025.05/"
 
# Проверка существования директории
if [ ! -d "$LFS" ]; then
export LFS="/alt-chroot"
mkdir -p "$LFS" || echo "Не удалось создать ${LFS}"
fi
 
bashrc_file="/etc/profile"
 
alias_definition='alias altch="/sbin/chroot /alt-chroot /usr/bin/env -i HOME=/root TERM=xterm-256color PS1=\"(chroot)\\u:\\w\\$\" PATH=/bin:/sbin:/usr/local/bin:/usr/bin /bin/bash --login"'
 
# Определяем alias в текущей сессии
eval "$alias_definition"
 
# Добавляем alias в /etc/profile, если еще нет
if ! grep -q '^alias altch=' "$bashrc_file"; then
echo "$alias_definition" | sudo tee -a "$bashrc_file" > /dev/null
echo "Алиас altch добавлен в $bashrc_file"
else
echo "Алиас altch уже присутствует в $bashrc_file"
fi
 
#
wget ${URL}${ROOTFS}
tar -xzf ${ROOTFS} -C "$LFS"
 
# добавим автоматическое монтирование в /etc/fstab
echo "proc /alt-chroot/proc proc defaults 0 0
sysfs /alt-chroot/sys sysfs defaults 0 0
tmpfs /alt-chroot/run tmpfs defaults 0 0
/dev /alt-chroot/dev none bind 0 0
/dev/pts /alt-chroot/dev/pts none bind 0 0" | tee -a /etc/fstab
 
mount $LFS/dev
mount $LFS/dev/pts
mount $LFS/proc
mount $LFS/sys
mount $LFS/run
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
else
mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi
 
# копируем некоторые файлы из host в chroot
if [ -h $LFS/etc ]; then
mkdir -pv $LFS/etc
fi
 
if [ -h $LFS/etc/apt/apt.conf.d/ ]; then
mkdir -pv $LFS/etc/apt/apt.conf.d/
fi
 
# copy some files form host to chroot
# nameserver такой же, как в родительской системе
cp -fL /etc/resolv.conf $LFS/etc/resolv.conf
 
# apt proxy
cp -f /etc/apt/apt.conf.d/proxy.conf $LFS/etc/apt/apt.conf.d/
 
# правило для binfmt
rule=":qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64.static:F"
 
echo $rule | tee -a /lib/binfmt.d/qemu-aarch64-static.conf
 
echo "Перезагрузка демона systemd..."
systemctl daemon-reload || echo "Сбой systemctl daemon-reload"
 
echo "Перезапуск службы binfmt..."
systemctl restart systemd-binfmt.service || echo "Сбой перезапуска binfmt"
 
echo "Проверка статуса службы..."
systemctl status systemd-binfmt.service --no-pager || echo "Ошибка проверки статуса binfmt"
 
echo "Наберите altch, чтобы войти в chroot"
Добавление локального репозитория
# p10
mkdir /alt-chroot/mirror.yandex.ru
echo "/mnt/altelos/Public/mirror.yandex.ru /alt-chroot/mirror.yandex.ru none bind,ro 0 0" | tee -a /etc/fstab
 
# p11
mkdir /alt-chroot/ALTLinux
echo "/home/user/altrepo/distributions/ALTLinux /alt-chroot/ALTLinux none bind,ro 0 0" | tee -a /etc/fstab
 
echo "rpm [p10] file:///mirror.yandex.ru/altlinux/p10/branch aarch64 classic
rpm [p10] file:///mirror.yandex.ru/altlinux/p10/branch noarch classic" > /alt-chroot/etc/apt/sources.list.d/local.list

Вот сводная таблица основных характеристик и особенностей сборки MCom-03 (СКИФ) ALT Linux :

Пункт

Описание

Дистрибутив

ALT Linux P10 с поддержкой модулей на базе микросхемы 1892ВА018 (СКИФ, MCom-03)

Рабочее окружение

Xfce с выводом на HDMI-монитор

Пользователи по умолчанию

пользователь: elvees / elvees; суперпользователь: root / elvees

Поддерживаемые модули

ROCK Pi N10 с ELV-MC03-SMARC r1.1, ELV-SMARC-CB r1.0 и r2.10.3 с ELV-MC03-SMARC r1.1

RPM-репозитории

Апстрим ALT Linux P10 + latest для поддержки микросхемы (ядро, модули, user-space)

Обновление

Через apt-get dist-upgrade или выборочно мета-пакеты ядра

Поддержка HDMI

Скрипт mcom03-hdmi-setup.sh для перезапуска HDMI и настройки PLL

Поддержка аудио

ALSA; systemd-демон elvees-alsa-prepare для asound.state

Поддержка DSP

Пакет elcore50-toolchain (тулчейн DSP, не установлен по умолчанию)

Поддержка GPU

Отсутствует (драйверы GPU не включены)

Поддержка VPU

Плагины GStreamer для аппаратного ускорения

Форматы прошивки

Архив корневой fs для SD/eMMC (tar2dev), QSPI образы

Система загрузки

Поддержка UEFI, скрипты прошивки tar2dev-uefi

Ядро Linux

Версия 5.10, каждый релиз обновляет ядро и модули

Системное время и NTP

Есть поддержка systemd-timesyncd, настройка через timedatectl set-ntp true

Особенности

set-hostname формирует имя из названия модуля и серийного номера

... продолжение здесь