/ca/ - Crypto-Anarchism

Privacy, anonymity, mass surveillance

Posting mode: Reply

Check to confirm you're not a robot
Name
Email
Subject
Comment
Password
Drawing x size canvas
File(s)

Board Rules

Max file size: 350.00 MB

Max files: 5

Max message length: 4096

Manage Board | Moderate Thread

Return | Magrathea | Catalog | Bottom


Зеркало1 Зеркало2 Капча ЛогиДонаты

Expand All Images


(46.13 KB 474x474 proxy-image.jpeg)
Сборка дебиана для одноплатника Anonymous 09/12/2024 (Thu) 22:45 [Preview] No. 2469
Не хотел пользоваться Armbian, откуда мне знать что там накрутили, даже сборка армбиана из исходников мне не понравилась, так как там внешние компиляторы качаются извне. Рассказываю как собирал Debian для Orange Pi 3 LTS. Инструкция может быть не точной.

Пользовался Debian 11, склонировал репозиторий армбиана https://github.com/armbian/build, откатился на тег v22.11 e323753fe7fb26f833dbfeab94351b38fe97550d, так как более свежие версии требуют свежего дебиана. Далее прогнал сборку образа и отдельно ядра и загрузчика с дебагом баша:
sudo bash -x ./compile.sh BOARD=orangepi3-lts RELEASE=bullseye 2>/home/user/compile.txt
sudo bash -x ./compile.sh BOARD=orangepi3-lts RELEASE=bullseye KERNEL_ONLY=yes 2>/home/user/compile_kernel.txt

Накатил собранный образ на microsd, загрузился, всё работает, дальше начал экспериментировать. Полностью удалил все файлы на разделе, накатил дебиан через debootstrap --arch=arm64 bullseye /mnt/sda1/ https://deb.debian.org/debian систему, закинул /boot и /etc/fstab из собранного образа, попробовал загрузиться - грузится. Попробовал обновить ядро из бэкпортов дебиана - тоже получилось, но надо было сгенерировать uInitrd: mkimage -A arm64 -O linux -T ramdisk -C gzip -n uInitrd -d /boot/initrd.img-6.1.0-0.deb11.21-arm64 /boot/uInitrd-6.1.0-0.deb11.21-arm64. И возможно обновить boot.scr: mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr.


С ядром разобрался, решил попробовать накатить чистый дебиан самостоятельно. Занулил микросд, разметил начало первого раздела с 8192 блока, отформатировал раздел, подглядел в compile*.txt как накатывается первичный uBoot загрузчик:
+ dd if=/dev/zero of=/dev/loop0 bs=1k count=1023 seek=1 status=noxfer
+ dd if=/tmp/tmp.wsKbG8hLG5/usr/lib/linux-u-boot-current-orangepi3-lts_22.11.2_arm64/u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8 status=noxfer

Нашёл у себя файл u-boot-sunxi-with-spl.bin, записал его при помощи dd на микросд, дебутстрапнул дебиан, затем накатил все пакеты, сгенерированные с KERNEL_ONLY=yes. Прописал /etc/fstab и armbianEnv.txt (подглядел в сгенерированном образе), система загрузилась. По сути, дальше можно смотреть в содержимое этих пакетов:
linux-u-boot-current-orangepi3-lts_22.11.2_arm64.deb - содержит u-boot-sunxi-with-spl.bin
linux-image-current-sunxi64_22.11.2_arm64.deb - ядро
linux-dtb-current-sunxi64_22.11.2_arm64.deb - device tree, которые в /boot/dtb лежат, arm устройствам нужны для загрузки
armbian-bsp-cli-orangepi3-lts_22.11.2_arm64.deb - тут содержатся разные армбиановские примочки, но самое важное это 99-uboot в /etc/initramfs/post-update.d, это скрипт, который генерирует uInird после каждого обновления ядра. Ну и /usr/share/armbian тоже содержит важные armbianEnv.txt и boot.cmd
armbian-firmware_22.11.2_all.deb - фирмварь, тут нужные uwe* файлы для wi-fi карточки, которые я методом исключения нашёл, когда wi-fi не работал
armbian-config_22.11.2_all.deb - этот пакет не особо важен, только чтобы при первой загрузке удобно настроить armbian

Отталкиваясь от всего вышеперечисленного я примерно понял что мне нужно для сборки дебиана под одноплатник без использования армбиановских пакетов.
0. Разметить microsd и отформатировать раздел
1. Пропатчить, скопилировать u-boot и записать его через dd с нужным отступом
2. Пропатчить linux ядро, так как без патчей как минимум wi-fi и экран не будут работать. Вместе с компиляцией ядра сгенерируются и device-tree файлы.
3. Дебутстрапнуть дебиан на раздел microsd.
4. В chroot установить u-boot-tools, установить скомпилированное ядро и device-tree файлы в /boot/dtb. Добавить boot.cmd. Настроить /etc/fstab и /boot/armbianEnv.txt, далее при помощи вышеописанных mkimage команд сгенерировать boot.scr и uInitrd, сделать симлинки на ядро и uInitrd при помощи ln -s
5. Закинуть uwe* фирмарь для работы wi-fi
6. Поставить пароль для root
Вроде ничего критичного не упустил, этого должно быть достаточно, чтобы одноплатник заработал.

Более подробно:
1. u-boot я не собирал, но его исходники можно найти после сборки армбиана в build/cache/sources/u-boot/v2022.07,


Anonymous 09/12/2024 (Thu) 22:48 [Preview] No.2470 del
Более подробно:
1. u-boot я не собирал, но его исходники можно найти после сборки армбиана в build/cache/sources/u-boot/v2022.07, а команды патчинга и сборки в compile*.txt
2. Ядро клонировал с kernel.org, патчи для ядра находятся в build/patch/kernel/archive/sunxi-5.15, список патчей в той же директории в series.conf. Главное патчи применять в той последовательности, в которой они находятся в series.conf. Пропатчив можно для гарантии диффнуть build/cache/sources/linux-mainline/5.15/. Собирал при помощи команды make -j6 ARCH=arm64 'CROSS_COMPILE=ccache aarch64-linux-gnu-' LOCALVERSION=-sunxi64 Image modules dtbs. Если правильно помню, то должны сгенерироваться deb пакеты с ядром, а dtb будет в arch/arm64/boot/dts. А конфиг ядра брать в build/config/kernel/linux-sunxi64-current.config
4. Символические ссылки должны называться uInitrd и Image

Наверное что-нибудь я упустил, но в любом случае методом тыка можно догадаться как всё настроить. Сверяться по compile*.txt файлу, по сгенерированному образу и по сгенерированным пакетам. Если буду снова собирать дебиан для одноплатника и обнаружу, что что-то в посте надо дополнить, то дополню.



Top | Catalog | Post a reply | Magrathea | Return