RBS RepkaPi 3: различия между версиями
Jqt4 (обсуждение | вклад) Нет описания правки |
Ivzeivze (обсуждение | вклад) (Установка минимальной системы Sisyphus с нуля) |
||
Строка 64: | Строка 64: | ||
* 8 -- UART TX | * 8 -- UART TX | ||
* 10 -- UART RX. | * 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, голая операционка с командной строкой): | |||
<code> | |||
wget http://nightly.altlinux.org/sisyphus-aarch64/current/regular-jeos-systemd-latest-aarch64.img.xz | |||
</code> | |||
* Аппаратно-специфичные файлы по ссылке https://rbs-computers.ru/repkapi3 "Скачать DTS и DTSI". У меня, когда я писал статью (июнь 2023), ссылка указывала на https://download.robointellect.ru/Uboot-19.06.23.zip | |||
=== Установка системы === | |||
==== Загрузка образа на SD-карту ==== | |||
SD-карта вставляется в карточиталку и втыкается в рабочую станцию. | |||
Если не установлена, необходимо установить утилиту alt-rootfs-installer: | |||
<source lang="bash"> | |||
apt-get install alt-rootfs-installer | |||
</source> | |||
Версия, доступная в репозитории p10 в конце июня 2023 года, уже поддерживает цель repka_pi3! | |||
Выясняем, как называется флешка, например, командой fdisk -l. | |||
Загружаем образ ОС на флешку /dev/sdXXX: | |||
<source lang="bash"> | |||
alt-rootfs-installer --resize --target=repka_pi3 --image-in=regular-jeos-systemd-20230621-aarch64.img.xz --media=/dev/sdXXX | |||
</source> | |||
Что делает эта команда? Загружает бинарный образ img, собранный системой сборки дистрибутивов, на флешку. Этот образ содержит в себе таблицу разделов MBR и корневой раздел ext4 целевой системы, ужатый до нескольких гигабайт. После записи запускается алгоритм расширения раздела на всю флешку. После того программа берёт бинарный загрузчик u-boot-sunxi из файловой системы флешки (<code>/usr/share/u-boot/repka_pi3/u-boot-sunxi-with-spl.bin</code>) и записывает по отступу 8 килобайт в адресном пространстве флешки. Специально так сделано, что там несколько мегабайт неразмеченного пространства. Сам загрузчик занимает меньше мегабайта. При запуске процессор Allwinner H5 как раз ищет исполнимый код по отступу 8K. | |||
==== Загрузка в режиме текстовой консоли ==== | |||
Операционная система загружена на флешку. Теперь следует вставить SD-карту в нашу репку, подключить к ней USB-клавиатуру и HDMI-монитор и включить питание. Пользовательский интерфейс - текстовый терминал. Команды вводятся с клавиатуры, данные отображаются на мониторе в виде текста. | |||
На экране должен появиться интерфейс загрузчика U-boot. Желтая подводная лодка справа сверху экрана символизирует! Загрузчик U-boot богат на функционал: он способен парсить файловые системы и загружаться по сети. В нашем случае загрузчик находит системный раздел на флешке, читает ФС Ext4, находит в ней файл <code>/boot/extlinux/extlinux.conf</code> и загружает указанное в нём ядро. | |||
Ванильные ядра, поставляемые в образе, достаточны, чтобы запустить систему! Репка должна загрузиться и пригласить пользователя к входу. Следует войти в систему, используя: | |||
<source> | |||
login: root | |||
password: altlinux | |||
</source> | |||
==== Замена ядра на rbs-def ==== | |||
Давайте однако же установим ядро rbs-def, предназначенное для нашей репки. | |||
<source lang="bash"> | |||
apt-get update | |||
apt-get dist-upgrade | |||
update-kernel -t rbs-def | |||
</source> | |||
Через несколько минут ядро поставится, и будет собран правильный initramfs в условиях целевой системы. | |||
==== Альтернативный путь установки ядра rbs-def ==== | |||
Альтернативно можно было бы запускаться при помощи виртуальной машины по статье [[arm#%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA_%D0%B2_QEMU]]. Однако перед заменой ядра на rbs-def следует заменить /etc/initrd.mk на /etc/initrd.mk.oem, что меняет алгоритм обнаружения необходимых модулей ядра при сборке initramfs. Если этого не сделать ([https://bugzilla.altlinux.org/46696] Bug 46696]), набор модулей ядра будет соответствовать виртуальной машине, и на репке это не запустится. При замене на .oem добавляется большая куча различных модулей на все случаи жизни, среди которых оказываются нам нужные. После перенесения образа на флешку и запуска системы на железе репки следует вернуть оригинальный initrd.mk и пересобрать initramfs командой make-initrd уже в правильном окружении. | |||
==== Перезагрузка ==== | |||
*Или перезагружаемся с ядром rbs-def. | |||
*Или при следовании альтернативному пути, устанавливаем образ, побывавший виртуалке, на флешку утилитой alt-rootfs-installer. Запускаем репку. | |||
Всё почти завершено! | |||
==== Устанавливаем нужную версию .dtb ==== | |||
Последний штрих - заменить фалйы Device Tree из поставки rbs-def на предоставляемые разработчиками репки под различные конфигурации устройства. | |||
В архиве <code>Uboot-<дата>.zip</code> найти файл <code>sun50i-h5-repka-pi3-1.2ghz.dtb</code> или любой другой с нужной частотой и желаемой конфигурацией пинов ввода-вывода. Файлы dtb можно править вручную (аккуратно и вдумчиво!), см. [[Device Tree]]. Указанные файл, в частности, содержит зависимость напряжения ядра процессора от желаемой тактовой частоты и критически влияет на устойчивость системы. Таблица, поставляемая вместе с ядром rbs-def, отличается от таблицы из .zip архива. По крайней мере, какое-то время на ней система работает стабильно. | |||
Теперь следует исправить вручную файл extlinux.conf. Поскольку файл перегенерируется автоматически при обновлении ядра, это нужно будет делать каждый раз, если ядро обновится. Всё же, речь идёт о встраиваемой системе. Изящное решение а Альт Линукс по изменению make-initrd только предстоит сделать. | |||
Выключить репку, подключить флешку к рабочей станции - или загрузить в работающую систему по сети при помощи утилиты netcat, "петли и палки". | |||
Загрузить <code>sun50i-h5-repka-pi3-1.2ghz.dtb</code> в папку <code>/boot/</code> репки | |||
<source lang="bash"> | |||
cd /boot/extlinux | |||
cp extlinux.conf extlinux.conf.bak | |||
vim extlinux.conf | |||
... | |||
label linux | |||
</source> | |||
Удалить запись <code>fdtdir</code> | |||
Добавить запись: | |||
<source> | |||
fdt ../sun50i-h5-repka-pi3-1.2ghz.dtb | |||
</source> | |||
Эта запись означает "загрузить указанный бинарник Device Tree напрямую" | |||
Формат файла описан в исходниках загрузчика: <code>Uboot-19.06.23.zip -> /Uboot/Uboot-repka/u-boot-v2022.04.zip -> /u-boot-v2022.04/doc/README.pxe</code>. Вообще говоря, PXE - это протокол загрузки по сети, но, видимо, просто используется уже готовый синтаксис этого стандарта. По крайней мере, при анализе исходного кода u-boot ключевые лексемы из файла extlinux.conf были обнаружены только в pxe-подсистеме. | |||
Теоретически сюда же можно добавлять патчи для Device Tree, называемые оверлеями, через команду: | |||
<source> | |||
fdtoverlays <path> [...] | |||
</source> | |||
Это не проверялось. | |||
Теперь посмотрев на монитор при загрузке, можно убедиться: загрузчик U-boot забирает новый файл dtb по указанному адресу! Также можно проверить, какое дерево устройств загружено, проанализировав значения <code>/sys/firmware/devicetree/</code>. | |||
=== Установка ПО === | |||
==== Настройка ssh-сервера ==== | |||
<source> | |||
vim /etc/openssh/sshd_config | |||
</source> | |||
Раскомментировать и исправить: | |||
<source> | |||
PasswordAuthentication no | |||
AuthorizedKeysFile - настроить список | |||
</source> | |||
<source> | |||
apt-get install netcat | |||
</source> | |||
на рабочем месте | |||
<source> | |||
netcat -l 12345 < .ssh/id_rsa<что-то-там>.pub | |||
</source> | |||
в системе репки | |||
<source> | |||
cd /etc/openssh/authorized_keys/ | |||
netcat <рабочее место>.local 12345 > root | |||
chmod 640 root | |||
systemctl restart sshd | |||
</source> | |||
Ура теперь можно подключаться по SSH с хост-машины. Мониор и клавиатуру можно отключать! | |||
==== Пакетный менеджер ==== | |||
<source> | |||
apt-get install aptitude | |||
</source> | |||
==== Имя системы ==== | |||
<source> | |||
hostnamectl hostname repka-pi3 | |||
</source> | |||
==== Служба автообнаружения ==== | |||
<source> | |||
apt-get install avahi libnss-mdns | |||
systemctl enable --now avahi-dnsconfd.service | |||
</source> | |||
На хост-машине p10: | |||
<source> | |||
resolve repka-pi3.local | |||
</source> | |||
Выдаёт IP-шник репки! | |||
В репке: | |||
<source> | |||
resolve <хост-машина>.local | |||
</source> | |||
Выдаёт IP-шник рабочей станции. | |||
=== Итог === | |||
Получилась машина с доступом по SSH и подключаемой текстовой консолью. Можно поставить графическую оболочку, но это отдельная история. Можно поставить разнообразное серевеное ПО. | |||
Образ системы рекомендуется забекапить! | |||
{{Category navigation|title=ARM|category=ARM|sortkey=*}} | {{Category navigation|title=ARM|category=ARM|sortkey=*}} |
Версия от 17:03, 30 июня 2023
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
- Скачать IMG (img.xz, 1.6G)
- 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
- Аппаратно-специфичные файлы по ссылке https://rbs-computers.ru/repkapi3 "Скачать DTS и DTSI". У меня, когда я писал статью (июнь 2023), ссылка указывала на https://download.robointellect.ru/Uboot-19.06.23.zip
Установка системы
Загрузка образа на 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 и подключаемой текстовой консолью. Можно поставить графическую оболочку, но это отдельная история. Можно поставить разнообразное серевеное ПО. Образ системы рекомендуется забекапить!