RBS RepkaPi 3

Материал из ALT Linux Wiki
Версия от 17:03, 30 июня 2023; Ivzeivze (обсуждение | вклад) (Установка минимальной системы Sisyphus с нуля)
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


RBS Repka Pi 3 -- одноплатный компьютер (SBC) с SoC Allwinner H5 на архитектуре AArch64.

Поддерживется портом Sisyphus на AArch64.

Ядра и firmware в Сизифе

Плата поддерживается ядром rbs-def и U-Boot из пакета u-boot-sunxi, начиная с 2023.04-alt2.

Образы Альт

Simply Linux alpha1


  • linux rbs-def-5.15.106, rpi-def-5.15.73, rpi-un-6.1.0.

Это даёт возможность загружать систему и на Repka Pi 3 и на Raspberry Pi 3/4/400.


  • xorg-server 21.1.8
  • chromium 113.0.5672.63
  • LibreOffice 7.4.6.2


Возьмите образ в формате img, запишите на SD-карту при помощи alt-rootfs-installer, укажите цель в виде repka_pi3.

Обновите alt-rootfs-installer из Sisyphus, если он не поддерживает цель repka_pi3.

Поддержка аппаратного обеспечения

Протестированы и работают

  • Ethernet
  • GPIO (использовался UART)
  • Звук через mini-jack
  • HDMI (звук прерывается паузами)
  • GPU Mali-450
  • термодатчики CPU и GPU
  • WiFi

Для поддержки WiFi в образе Simply Linux alpha1 нужно выполнить от root команды:

cd /lib/firmware/brcm

ln -s ../cypress/cyfmac43430-sdio.bin brcmfmac43430-sdio.xunlong,orangepi-pc2.bin

ln -s brcmfmac43430-sdio.AP6212.txt brcmfmac43430-sdio.txt

ln -s brcmfmac43430-sdio.AP6212.txt brcmfmac43430-sdio.xunlong,orangepi-pc2.txt

Не тестировалось/не поддерживается

  • bluetooth

Подключение UART

Вам понадобится usb-to-uart адаптер с напряжением 3.3V. Для UART используются пины из 40-пиновой гребёнки:

  • 6 -- ground
  • 8 -- UART TX
  • 10 -- UART RX.

Установка минимальной системы Sisyphus с нуля

Установим минимальную (jeos) сборку из Сизифа на плату Repka Pi3 (ver 1.3).

Нам потребуются...

  • Компьютер (рабочая станция) на ОС Alt Linux p10 x86_64, с которого будут совершаться основные операции.
  • Плата Repka Pi3 VER 1.3, частота 1.2 ГГц (у меня пришла с бумажкой об использовании такой частоты процессора)
  • USB-клавиатура и HDMI-монитор
  • Блок питания
  • Флешка SD от 8 до 16 Гб под систему, не из самых дешёвых. Дешёвые флешки быстро выходят из строя от перезаписи.
  • Адаптер USB-SD card.
  • Образ Sisyphus jeos (Just Enough OS, голая операционка с командной строкой):

wget http://nightly.altlinux.org/sisyphus-aarch64/current/regular-jeos-systemd-latest-aarch64.img.xz

Установка системы

Загрузка образа на SD-карту

SD-карта вставляется в карточиталку и втыкается в рабочую станцию.

Если не установлена, необходимо установить утилиту alt-rootfs-installer:

apt-get install alt-rootfs-installer

Версия, доступная в репозитории p10 в конце июня 2023 года, уже поддерживает цель repka_pi3!

Выясняем, как называется флешка, например, командой fdisk -l.

Загружаем образ ОС на флешку /dev/sdXXX:

alt-rootfs-installer --resize --target=repka_pi3 --image-in=regular-jeos-systemd-20230621-aarch64.img.xz --media=/dev/sdXXX

Что делает эта команда? Загружает бинарный образ img, собранный системой сборки дистрибутивов, на флешку. Этот образ содержит в себе таблицу разделов MBR и корневой раздел ext4 целевой системы, ужатый до нескольких гигабайт. После записи запускается алгоритм расширения раздела на всю флешку. После того программа берёт бинарный загрузчик u-boot-sunxi из файловой системы флешки (/usr/share/u-boot/repka_pi3/u-boot-sunxi-with-spl.bin) и записывает по отступу 8 килобайт в адресном пространстве флешки. Специально так сделано, что там несколько мегабайт неразмеченного пространства. Сам загрузчик занимает меньше мегабайта. При запуске процессор Allwinner H5 как раз ищет исполнимый код по отступу 8K.

Загрузка в режиме текстовой консоли

Операционная система загружена на флешку. Теперь следует вставить SD-карту в нашу репку, подключить к ней USB-клавиатуру и HDMI-монитор и включить питание. Пользовательский интерфейс - текстовый терминал. Команды вводятся с клавиатуры, данные отображаются на мониторе в виде текста.

На экране должен появиться интерфейс загрузчика U-boot. Желтая подводная лодка справа сверху экрана символизирует! Загрузчик U-boot богат на функционал: он способен парсить файловые системы и загружаться по сети. В нашем случае загрузчик находит системный раздел на флешке, читает ФС Ext4, находит в ней файл /boot/extlinux/extlinux.conf и загружает указанное в нём ядро.

Ванильные ядра, поставляемые в образе, достаточны, чтобы запустить систему! Репка должна загрузиться и пригласить пользователя к входу. Следует войти в систему, используя:

login: root
password: altlinux

Замена ядра на rbs-def

Давайте однако же установим ядро rbs-def, предназначенное для нашей репки.

apt-get update
apt-get dist-upgrade
update-kernel -t rbs-def

Через несколько минут ядро поставится, и будет собран правильный initramfs в условиях целевой системы.


Альтернативный путь установки ядра rbs-def

Альтернативно можно было бы запускаться при помощи виртуальной машины по статье arm#Запуск_в_QEMU. Однако перед заменой ядра на rbs-def следует заменить /etc/initrd.mk на /etc/initrd.mk.oem, что меняет алгоритм обнаружения необходимых модулей ядра при сборке initramfs. Если этого не сделать ([1] Bug 46696]), набор модулей ядра будет соответствовать виртуальной машине, и на репке это не запустится. При замене на .oem добавляется большая куча различных модулей на все случаи жизни, среди которых оказываются нам нужные. После перенесения образа на флешку и запуска системы на железе репки следует вернуть оригинальный initrd.mk и пересобрать initramfs командой make-initrd уже в правильном окружении.

Перезагрузка

  • Или перезагружаемся с ядром rbs-def.
  • Или при следовании альтернативному пути, устанавливаем образ, побывавший виртуалке, на флешку утилитой alt-rootfs-installer. Запускаем репку.

Всё почти завершено!

Устанавливаем нужную версию .dtb

Последний штрих - заменить фалйы Device Tree из поставки rbs-def на предоставляемые разработчиками репки под различные конфигурации устройства.

В архиве Uboot-<дата>.zip найти файл sun50i-h5-repka-pi3-1.2ghz.dtb или любой другой с нужной частотой и желаемой конфигурацией пинов ввода-вывода. Файлы dtb можно править вручную (аккуратно и вдумчиво!), см. Device Tree. Указанные файл, в частности, содержит зависимость напряжения ядра процессора от желаемой тактовой частоты и критически влияет на устойчивость системы. Таблица, поставляемая вместе с ядром rbs-def, отличается от таблицы из .zip архива. По крайней мере, какое-то время на ней система работает стабильно.

Теперь следует исправить вручную файл extlinux.conf. Поскольку файл перегенерируется автоматически при обновлении ядра, это нужно будет делать каждый раз, если ядро обновится. Всё же, речь идёт о встраиваемой системе. Изящное решение а Альт Линукс по изменению make-initrd только предстоит сделать.

Выключить репку, подключить флешку к рабочей станции - или загрузить в работающую систему по сети при помощи утилиты netcat, "петли и палки".

Загрузить sun50i-h5-repka-pi3-1.2ghz.dtb в папку /boot/ репки

cd /boot/extlinux
cp extlinux.conf extlinux.conf.bak
vim extlinux.conf

...
label linux

Удалить запись fdtdir

Добавить запись:

fdt ../sun50i-h5-repka-pi3-1.2ghz.dtb

Эта запись означает "загрузить указанный бинарник Device Tree напрямую"

Формат файла описан в исходниках загрузчика: Uboot-19.06.23.zip -> /Uboot/Uboot-repka/u-boot-v2022.04.zip -> /u-boot-v2022.04/doc/README.pxe. Вообще говоря, PXE - это протокол загрузки по сети, но, видимо, просто используется уже готовый синтаксис этого стандарта. По крайней мере, при анализе исходного кода u-boot ключевые лексемы из файла extlinux.conf были обнаружены только в pxe-подсистеме.

Теоретически сюда же можно добавлять патчи для Device Tree, называемые оверлеями, через команду:

fdtoverlays <path> [...]

Это не проверялось.

Теперь посмотрев на монитор при загрузке, можно убедиться: загрузчик U-boot забирает новый файл dtb по указанному адресу! Также можно проверить, какое дерево устройств загружено, проанализировав значения /sys/firmware/devicetree/.

Установка ПО

Настройка ssh-сервера

vim /etc/openssh/sshd_config

Раскомментировать и исправить:

PasswordAuthentication no
AuthorizedKeysFile - настроить список
apt-get install netcat

на рабочем месте

netcat -l 12345 < .ssh/id_rsa<что-то-там>.pub

в системе репки

cd /etc/openssh/authorized_keys/
netcat <рабочее место>.local 12345 > root
chmod 640 root
systemctl restart sshd

Ура теперь можно подключаться по SSH с хост-машины. Мониор и клавиатуру можно отключать!

Пакетный менеджер

apt-get install aptitude

Имя системы

hostnamectl hostname repka-pi3

Служба автообнаружения

apt-get install avahi libnss-mdns
systemctl enable --now avahi-dnsconfd.service

На хост-машине p10:

resolve repka-pi3.local

Выдаёт IP-шник репки!

В репке:

resolve <хост-машина>.local

Выдаёт IP-шник рабочей станции.

Итог

Получилась машина с доступом по SSH и подключаемой текстовой консолью. Можно поставить графическую оболочку, но это отдельная история. Можно поставить разнообразное серевеное ПО. Образ системы рекомендуется забекапить!