В этой серии статей опишу процесс установки Debian 12 на компьютер с процессором Байкал T1 (архитектура MIPS little endian, а точнее MIPS 32 r5).
Задача и требования
Для начала работы с новым объектом экспериментов в лице платы BM1BT1-B требуется установить ОС на базе Linux.
На данном этапе собираюсь установить минимальный вариант какого-нибудь дистрибутива Linux, и в результате получить возможность подключаться к системе удалённо при помощи ssh. Тратить время на настройку полноценного рабочего места и установку DE не планирую, да и необходимости такой пока нет.
Требования к дистрибутиву
- Бинарный дистрибутив общего назначения для архитектуры MIPS. Должна быть возможность устаналивать пакеты из репозиториев без необходимости что-либо компилировать или настраивать собственные зеркала.
- Актуальная LTS версия дистрибутива. Последняя или предпоследняя версия дистрибутива, которая будет поддерживаться хотя бы 2-3 года.
Требования к ядру Linux
- Актуальное longterm ядро Linux. Требуется версия 5.10 или лучше.
- Поддержка системы MIPS на базе процессора Байкал T1. Ядро должно быть собрано с настройками, пригодными для запуска на данном CPU.
- Полноценная поддержка материнской платы. Должны работать все доступные на плате устройства (сеть, звук и т.д.), а также программные выключение и перезагрузка.
Далее в этой части выберем подходящий дистрибутив и подготовим на его базе rootfs для записи в образ диска.
Выбор дистрибутива
Обозначенные требования сразу же отсекают дистрибутивы типа Gentoo и OpenWrt, а также дистрибутивы, лишённые поддержки MIPS, такие как Ubuntu, Arch Linux, Alpine. Рассмотрим возможности и перспективы оставшихся кандидатов.
ALT Linux
На первый взгляд, ALT Linux выглядит "официальным" дистрибутивом Linux если не для всех устройств с CPU Байкал, то для Таволга Терминал - почти наверняка [1. Wiki проекта сообщает о регулярных сборках для архитектуры mipsel (MIPS 32 r2) [2]; однако, по предложенным на страницах wiki ссылкам можно найти только установочные образы от 2018 [3] и 2022 [4] года. Последние содержат образ системы с ядром 4.4.282, в том числе вариант с модификацией XPA - запоним этот момент, далее эта информация может нам пригодиться, как и параметры загрузки.
# ll regular-xfce-tavolga-latest-mipsel.recovery/boot/
total 13M
drwx------ 2 root root 11 Apr 8 2022 ./
drwxr-xr-x 3 root root 6 Jun 29 20:04 ../
-rw-r--r-- 1 root root 266 Apr 8 2022 bootconf
-rw-r--r-- 1 root root 114K Aug 30 2021 config-4.4.282-mitx-xpa-alt1
-rw------- 1 root root 5.1M Apr 8 2022 initrd-4.4.282-mitx-xpa-alt1.img
lrwxrwxrwx 1 root root 32 Apr 8 2022 initrd.img -> initrd-4.4.282-mitx-xpa-alt1.img
-rw-r--r-- 1 root root 2.1M Aug 30 2021 System.map-4.4.282-mitx-xpa-alt1
-rw-r--r-- 1 root root 19K Apr 8 2022 tplatforms_mitx-4.4.282-mitx-xpa-alt1.dtb
lrwxrwxrwx 1 root root 41 Apr 8 2022 tplatforms_mitx.dtb -> tplatforms_mitx-4.4.282-mitx-xpa-alt1.dtb
lrwxrwxrwx 1 root root 29 Apr 8 2022 vmlinuz -> vmlinuz-4.4.282-mitx-xpa-alt1
-rw-r--r-- 1 root root 12M Aug 30 2021 vmlinuz-4.4.282-mitx-xpa-alt1
# cat regular-xfce-tavolga-latest-mipsel.recovery/boot/bootconf
default: bootconf0
bootconf0 vmlinuz 0x80100000 0x80100000 tplatforms_mitx.dtb initrd.img root=/dev/sda6 rw rootwait earlyprintk=uart8520,mmio32,0x1f04a000,115200 maxcpus=2 consoleblank=0 console=tty1 video=sm750fb:1920x1080-32@60 nohtw nocoherentio ieee754=relaxed
#
Ни в багтрекере [5], ни в списке рассылок devel-sbc [6] мне не удалось найти информации об активных пользователях порта mipsel, либо о планах его улучшения или выпуска новых версий. По зарегистрированным в багтрекере проблемам сделал следующие выводы:
- Отсутствует определённая часть пакетов в репозиториях
- Некоторые баги делают работу с системой проблематичной или вовсе невозможной
Также за пару десятков минут поверхностного поиска мне не удалось найти исходников ядра, которые используются в ALT Linux для порта mipsel. Возможно, из-за того, что я не являюсь пользователем ALT Linux, не знаком с дистрибутивом и инфраструктурой проекта, или просто плохо искал.
Почему так тихо и незаметно остановилось развитие порта mipsel - неизвестно. Вероятно, пользователи Таволга Терминал перешли на какой-то другой дистрибутив (или другую платформу), и в поддержке ещё одной архитектуры исчезла необходимость.
Итог: ALT Linux не соответствует требованиям актуальности и доступности готового ПО.
Debian
Текущая версия Debian (12, Bookworm) имеет поддержку платформы mipsel [7]. В release notes версии 9 (Stretch) [8] заявлена поддержка процессоров не хуже MIPS 32 r2 (аналогично ALT Linux).
Порт для mipsel - это один из старейших портов Debian для не-i386, что должно означать большое количество доступных в репозитории пакетов и отсутствие "сюрпризов" при установке и использовании.
По сообщениям разработчиков, в следующей версии (13, Trixie) поддержка mipsel будет прекращена [9]; впрочем, долговременная поддержка версии 12 завершится лишь в 2028 году, поэтому на наш век и этого вполне хватит.
Для Debian не заявлена поддержка Байкал T1, и в репозиториях отсутствуют пакеты ядра для этой платформы.
Итог: Debian 12 соответствует требованиям поддержки платформы на уровне бинарной совместимости, актуальности версий ПО, а также возможности установки ПО из репозиториев; однако, необходимо подготовить ядро Linux для возможности использовать данную ОС.
Подготовка образа диска с ОС
Подготовим образ диска, пригодный для записи на встроенный SSD, являющийся устройством загрузки по умолчанию.
Нам потребуется обычный x86-64 ПК с Debian-based ОС со следующими доступными компонентами:
- debootstrap - набор скриптов для подготовки rootfs
- qemu-mips-static - user mode эмуляция платформы mips (предоставляется пакетом qemu-user-static)
- Ядро с поддержкой binfmt_misc и loop devices (должно быть доступно в современных версиях)
Для удобства будем вести работу в отдельной директории от имени пользователя root.
Создание файла образа
Создайте файл образа диска размером не менее 700 Мб. Нам потребуется примерно 64 Мб для хранения ядра и initramfs, около 400 Мб для размещения базовой системы, и хотя бы 200 Мб для всего остального, включая дополнительное ПО, пользовательские данные, журналы и так далее.
Так как в дальнейшем предполагается записать образ на диск при помощи передачи его по сети или копированием с промежуточного накопителя (флешки), адекватным компромиссом будет выбрать средний объём, который будет быстро копировать и записывать.
Рекомендуются следующие параметры: образ диска размером 1 Гб, из которых загрузочный раздел занимает 128 Мб, а root-раздел - весь оставшийся объём (около 945 Мб). После достижения успешного результата, последний можно будет расширить до максимального возможного значения непосредственно на устройстве (напомню, что там установлен SSD на 16 Гб).
Создайте таблицу разделов формата msdos и сами разделы - boot и root. Создайте на каждом из них ФС ext4. Для удобства можно задать label для ФС, к примеру, boot и root.
Создаём файл образа:
# fallocate -l 1G disk.img
Ниже приведён вывод parted после настройки образа. Фактическая конфигурация может отличаться от приведённой.
# parted disk.img p
Model: (file)
Disk disk.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 128MB 127MB primary ext4
2 128MB 1073MB 945MB primary ext4
#
Создаём ФС:
# mkfs.ext4 -L boot /dev/loop0p1
# mkfs.ext4 -L root /dev/loop0p2
Подготовка rootfs
Подключите созданный образ в качестве виртуального устройства и примонтируйте root-раздел:
# mkdir root
# losetup -f -P --show disk.img
/dev/loop0
# mount /dev/loop0p2 root
#
Для развёртывания базовой системны будем использовать стандартный инструмент - debootstrap. В последних версиях он умеет самостоятельно определять
доступность user mode emulation целевой архитектуры, и может подготовить rootfs в один проход, без необходимости указывать ключ --foreign.
В приведённой ниже команде я использую:
- Подходящее мне по скорости работы и доступности зеркало
- Локальное кеширование пакетов для ускорения повторных запусков debootstrap
- Минимальный набор дополнительных пакетов
# debootstrap --verbose --cache-dir $PWD/.cache --arch mipsel --include initramfs-tools,bash-completion,pciutils,usbutils,lshw,fbset,ncdu,resolvconf bookworm root http://ftp.ru.debian.org/debian/
После окончания работы debootstrap требуется задать hostname, пароль пользователя root, и заполнить fstab.
# echo debian > root/etc/hostname
# echo 127.0.1.1 debian >> root/etc/hosts
# chroot root passwd
Содержимое /etc/fstab:
/dev/sda1 / ext4 noatime 0 0
/dev/sda2 /boot ext4 noatime 0 0
Вы также можете подключить дополнительные репозитории, если вам требуются пакеты, отсутствующие в основном.
Пример содержимого файла /etc/apt/sources.list:
deb http://ftp.ru.debian.org/debian bookworm main contrib
deb http://ftp.ru.debian.org/debian bookworm-updates main contrib
deb http://ftp.ru.debian.org/debian bookworm-backports main contrib
На этом шаге вы можете внести любые другие изменения, в том числе установить пакеты, настроить систему согласно вашим предпочтениям и тому подобное.
Внимание: не следует устанавливать из репозиториев Debian пакеты, предоставляющие ядро и загрузчик. Они не потребуются для дальнейшей работы.
После завершения работ по настройке системы, отмонтируйте ФС и отключите loop device.
# umount root
# losetup -d /dev/loop0
#
Подключите виртуальное устройство и примонтируйте ФС согласно приведённым выше командам в том случае, если снова потребуется внести изменения в файлы ОС.
Итоги
Мы подготовили образ Debian 12, почти готовый для запуска на плате с CPU Байкал T1. Следующим шагом будет сборка ядра Linux, установка его загрузочных файлов в образ, и настройка загрузчика.