Не загружается OS, какой бы ни была

kouler

New member
11.06.2024
5
1
3
Хотел сначала портировать ARM'ный Arch linux на свою относительно старенькую Repka pi 3 VER 1.2, ибо сам пользуюсь арчом, Ubuntu уже давным давно должна быть у всех на помойке, а на сайте очень кстати со временем появился "Загрузчик Repka OS", с которым можно просто портировать свой дистрибутив в отличие от таких бессмертных мира сего. Скачал, запустил (исправил микро-косяк в Makefile (моя issue по этому на гитфлик), т.к. штука собирается в докере (вот, вроде, зависима сборка от пакетов Ubuntu - взяли и в докер запихнули - респект парням)).


КАК Я ДЕЛАЛ

смотрите сразу след. оглавление "ПРОБЛЕМА", если не особо интересно
1. Собираю загрузчик
Bash:
git clone https://gitflic.ru/project/npo_rbs/repka-os_boot-loader.git
cd repka-os_boot-loader
git submodule update --init --recursive
make REPKA_MODEL=pi3 build-loader

2. Через fdisk создаю два раздела на 512М и второй - оставшееся, делаю раздел boot fat32 и root ext4 (btrfs)
У меня SD-карта, это /dev/mmcblk0
Bash:
sudo mkfs.vfat -F 32 -n BOOT /dev/mmcblk0p1
Bash:
sudo mkfs.ext4 -L rootfs /dev/mmcblk0p2

3. Монтирую и копирую загрузчик
Bash:
sudo dd if=src-pi3/spl/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0p1 bs=1024 seek=8 conv=notrunc

потом ещё много рутины
Bash:
sudo cp src-pi3/repka-pi.dtb mnt/boot/ #копирую .dtb,
sudo cp -r src-pi3/overlays mnt/boot/ #...оверлеи
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C mnt/root #распаковываю файловую систему арча на SD-карту
sudo mv mnt/root/boot/* mnt/boot/ #перемещаю ядро линуха
sudo mkdir -p mnt/boot/dtbs/allwinner #остальные .dtb, хоть и не понятно, зачем, если только один нужен, бл....
sudo cp mnt/boot/repka-pi.dtb mnt/boot/dtbs/allwinner/sun50i-h5-repka-pi3.dtb #выношу нужный единственный как раз

fstab тоже редачу:
Код:
LABEL=BOOT  /boot   vfat    defaults        0       0
LABEL=rootfs /       ext4    defaults        0       1

сделал даже extlinux.conf в `[boot-раздел]/extlinux/` с таким содержимым
Код:
DEFAULT arch
MENU TITLE Boot Menu
PROMPT 0
TIMEOUT 50

LABEL arch
    MENU LABEL Arch Linux ARM
    LINUX /Image
    INITRD /initramfs-linux.img
    FDT /dtbs/allwinner/sun50i-h5-repka-pi3.dtb
    APPEND root=LABEL=rootfs rw console=ttyS0,115200 console=tty0

Я очень много тыканий (то есть очень-очень много) пропустил, это уже как сжатый туториал получился...
---

ПРОБЛЕМА

В итоге запускаю - моник не успевает что-либо отобразить из-за каких-то глюков и вечных перезапусков.
Благо имеется cp2102, тыкаю эти ваши 3.3V, смотрю через UART `screen /dev/ttyUSB0 115200`

Система то
1. крашится
Bash:
...
[    3.490163]  mount_root+0x170/0x190
[    3.493672]  prepare_namespace+0x1d4/0x238
[    3.497790]  kernel_init_freeable+0x2a4/0x2c4
[    3.502168]  kernel_init+0x20/0x148
[    3.505679]  ret_from_fork+0x10/0x20
[    3.509279] SMP: stopping secondary CPUs
[    3.513223] Kernel Offset: disabled
[    3.516721] CPU features: 0x000000,00100000,40004000,0400421b
[    3.522480] Memory Limit: none
[    3.525554] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---

я это исправляю,
2. то просто падает в вечный цикл перезапусков в разное непредсказуемое время, мигая на секунду зелёным power-led, иногда мигая синими по два раза, иногда просто три перезагрузки подряд с питанием (это когда ещё при запуске Ethernet 3 раза мигает своими светодиодами - короче реально перезагрузка)), то иногда вообще выключается и не подаёт признаков жизни (ну естественно вытаскиваю провод, вставляю - всё по новой).
Ручной режим с подключенными оверлеями не помогают - систему проверяю, вроде всё правильно стоит.

Выкидываю на это два дня, посылаю всё к херам и такой "ублюнтить, так ублюнтить" - качаю ваш несчастный Repka OS aka. "Ubuntu" (я любя, не подумайте - просто в моём контексте я делал это уже с ненавистью и кипящими штанами🙃).
Делаю одну единственную детскую ерунду, как и подобает:
Bash:
sudo dd if=~/Downloads/предварительно_unpacked_ваш_этот_zip_несчастный/arm64_ubuntu_20.04.6_desktop_09.08.23_1.2GHz.img of=/dev/mmcblk0 bs=1M status=progress iflag=direct oflag=direct

нихрена. То же поведение. Вспоминаю, что 1.5 года назад писал диплом - сервис для миникампухтера Repka pi3, и была такая же проблема (тогда ещё Ubuntu использовал), а когда поставил эту уродскую balena Etcher на винду, то она волшебным и неизвестным мне образом правильно всё сделала, SD вставил и запустил. Вспомнив это, переключаюсь на винду, качаю balen'у, делаю с вашим скачанным образом - никакой магии не происходит - то же самое поведение, ядро до 8 пункта доходит и в сброс-перезагрузку, где опять творит какую-то херню, всё короче и короче, и вообще либо зависает, либо вырубает питание.

Питание подключено от адаптеров на 15Ватт (5V 3A, два разных на такой вывод пробовал).

В общем у меня подозрения, помимо всех остальных, что на мою версию платы забили огромного болта и подходящие ему .dtb выкинули на помойку.
Сам мини-компьютер, пока не пользовался, был оставлен в исправном виде (с исправными картой и операционкой) в личном сухом герметичном контейнере.

Чё делать не знаю, помогите😭😭😭🙏🏻🙏🏻🙏🏻
 
уж года два как у меня на RepkaPi 3 стоит Archlinux.
ты все делал правильно, кроме загрузчика. Поставил uboot, но конфиг зачем-то от extlinux. так не пойдет.
в корне /boot раздела лежит boot.txt, который надо поправить, потом скомпилировать утилиткой из uboot-tools в boot.scr, тогда uboot его найдет и подгрузит ядро с нужными опциями.

[fido@fido ~]$ cat /boot/boot.txt
# After modifying, run ./mkscr

# Set root partition to the second partition of boot device
part uuid mmc 0:2 uuid

setenv bootargs console=ttyS0,115200 root=PARTUUID=${uuid} rw
rootwait

if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /Im
age; then
setenv fdtfile allwinner/sun50i-h5-repka-pi3.dtb
if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /dtb
s/${fdtfile}; then
if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r
} /initramfs-linux.img; then
booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${
fdt_addr_r};
else
booti ${kernel_addr_r} - ${fdt_addr_r};
fi;
fi;
fi
[fido@fido ~]$

утиль из uboot-tools: mkimage
 
  • Like
Реакции: kouler
уж года два как у меня на RepkaPi 3 стоит Archlinux.
ты все делал правильно, кроме загрузчика. Поставил uboot, но конфиг зачем-то от extlinux. так не пойдет.
в корне /boot раздела лежит boot.txt, который надо поправить, потом скомпилировать утилиткой из uboot-tools в boot.scr, тогда uboot его найдет и подгрузит ядро с нужными опциями.

Во первых, огромное спасибо - ядро запускается, у меня два пользователя - alarm и root (с одноимёнными паролями). От души прям, спасибо🔥🤙🏻

Но есть "во вторых" - репка не видит HDMI монитор (очевидно, что рабочий - из ноута вытаскиваю, чтоб проверить) - я общаюсь и работаю с репкой только по UART через этот CH340, а монитор нужен - проект на графическом управлении основан. На прошлой операционке он работал абсолютно со всеми мониками, поэтому, в HDMI не должно быть проблем.

Вот мой boot.txt
Код:
# After modifying, run ./mkscr

# Set root partition to the second partition of boot device
part uuid mmc 0:2 uuid

setenv bootargs console=tty0 console=ttyS0,115200 root=PARTUUID=${uuid} rw rootwait

if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /Image; then
    setenv fdtfile allwinner/sun50i-h5-repka-pi3.dtb
    if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile}; then
        if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} /initramfs-linux.img; then
            booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
        else
            booti ${kernel_addr_r} - ${fdt_addr_r};
        fi;
    fi;
fi

console=tty0 указан, boot скомпилен (не запускался бы), но не видит моник и всё. Чё-то ещё с deepseek пообщался, он только overlay советует и говорит, что "раз прописано `console=tty0` и не робит даже с оверлеями, то иди ищи нормальный ляляля-repka-pi3.dtb для твоей именно версии платы в других репозиториях. А где их искать я тоже хрен его знает - скачал их "repka os" который "arm64_ubuntu_22.04.5_desktop_21.11.25_1.2GHz.zip" в распакованном виде как repka-os-3.img, примонтировал - но там нет впринципе "хунь-чунь-китайский-чай-улунь-repka-pi3.dtb".

В чём может быть проблема невидения монитора, и, если в .dtb файле, то где найти именно на свою плату (напоминаю, Pi3 версии 1.2)?
Капелька совсем осталась, чтоб починить, чувствую прям)
 
А где их искать я тоже хрен его знает - скачал их "repka os" который "arm64_ubuntu_22.04.5_desktop_21.11.25_1.2GHz.zip" в распакованном виде как repka-os-3.img, примонтировал - но там нет впринципе "хунь-чунь-китайский-чай-улунь-repka-pi3.dtb".
А как вы искали собранное дерево устройств?

В теории, ваш "sun50i-h5-repka-pi3.dts" при сборке убута компилируется в "sun50i-h5-repka-pi3.dtb", а потом скорее всего должен был либо встроится в бинарник убута или переименоваться в system.dtb*.

Ядро вроде должно использовать своё дерево устройств. Поэтому можете поковырять пакеты с ядрами для RPi3 вот тут https://download.repka-pi.ru/kernel/. Там я не нашёл дерева устройств для Репки 3, но зато обнаружилась куча оверлеев.

Ещё можете попробовать собрать ядро из исходников в репозиториях Альта (в них есть sun50i-h5-repka-pi3.dts):
И затем подсунуть его в загрузочный образ (но я не ручаюсь, что этот метод будет работать).



---
* вот тут я могу ошибаться, т.к. system.dtb --- возможно дерево устройств для ядра, а не загрузчика
 
Последнее редактирование:
  • Like
Реакции: kouler
в общем пробовал разные .dtb - из репозитория repka OS, который [1.3 и младше], пробовал sun50i-h5-repka-pi3-1.0ghz.dtb и sun50i-h5-repka-pi3-alt-1.0ghz.dtb от Махима Иваныча (на 1.2 GHz не загружается, как ни странно - я думал, у меня 1.2GHz), ещё парочку - все всё грузят, кроме монитора.

Оверлеи "profile-ver1.3.dtbo", "profile-ver1.4-1.6-active.dtbo" и "profile-ver1.4-1.6-passive" не помогают - никак.

Что интересно, это когда через винду "repka aka. ubuntu OS" и balena etcher делал, там тоже была циклическая проблема - ядро падало на середине, не загрузившись, НО! Моник-то успевал подключиться и чутка отобразить текста от загрузки - а аб чём это говорит? Хрен его пойми об чём, но точно не о том, что гнездо HDMI не работает - оно работает. Даже вдвойне как-то грустнее.

Короче пока что ковырять ядра я не буду, решил тупое сначала проверить - жду синюю sd-карту Netac microSDXC в ДНС'е, где-то видел у кого-то, что у него с другими (типа кингстон или адата (у меня Адата карточка)) тоже проблемы, а вот с этой картой всё неплохо (мол, и сами репка её советовали). Ну это так - и перерывчик, и действительно тупое проверить. Мб какое ещё решение кто подскажет, ибо эта ситуация не должна решаться бесконечными поисками хрен пойми чего - тут по-любому где-то, условно, надо было пукнуть, а не хрюкнуть, а у меня тут весь интернет перерывается, ещё и две нейронки сверху свои сервера заставили конкретно так задуматься😂😂😂 Но, блин, уже начинаю думать, что .dtb все корректные и прикол вообще в чём-то другом...