tl;dr: shromažďuji obraz Kali Linux pro ARM počítač, v programu debootstrap, linux a u-boot.
Pokud jste zakoupili nějakou méně populární jednodeskovou desku, mohli jste se setkat s nedostatkem obrazu vašeho oblíbeného distribuce. Podobná situace nastala s . Kali Linux pro IMX6 prostě neexistuje (připravuji), takže jej musím sestavit sám.
Proces zavádění je poměrně jednoduchý:
- Zahájí se hardware.
- Z určité oblasti na paměťovém zařízení (SD karta/eMMC/etc) se načte a vykoná zaváděcí program.
- Zaváděcí program hledá jádro operačního systému a načítá jej do určité oblasti paměti a vykonává.
- Jádro načítá celý zbytek OS.
Pro moji úlohu stačí taková úroveň podrobností, podrobnosti můžete přečíst . Výše zmíněné „některé“ oblasti se liší desku od desky, což způsobuje určité obtíže s instalací. Zavádění serverových ARM platforem pomocí UEFI, ale zatím to není pro všechny dostupné, takže bude potřeba vše shromáždit jednotlivě.
Sestavení kořenového souborového systému
Nejprve je třeba připravit oddíly. Das U-Boot podporuje různé FS, vybral jsem FAT32 pro /boot a ext3 pro kořen, což je standardní rozvržení obrazů pro Kali na ARM. Použiji GNU Parted, ale můžete to udělat také pomocí běžnějšího fdisk. Také budou potřeba dosfstools a e2fsprogs pro vytvoření FS: apt install parted dosfstools e2fsprogs.
Rozdělujeme SD kartu:
- Oz označujeme SD kartu jako využívající MBR rozdělení:
parted -s /dev/mmcblk0 mklabel msdos - Vytváříme oddíl pro
/bootna 128 megabajtů:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. První vynechaný megabajt je nutné ponechat pro samotné rozdělení a zaváděcí program. - Vytváříme kořenový FS na celé zbývající kapacitě:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Pokud se náhodou soubory oddílů nevytvořily nebo se nezměnily, je třeba provést `partprobe`, poté se tabulka oddílů přečte znovu.
- Vytváříme souborový systém zaváděcího oddílu s označením
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Vytváříme kořenový FS s označením
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Skvěle, nyní jej můžeme naplnit. K tomu bude navíc potřeba debootstrap, utilita pro vytváření kořenových FS Debianových operačních systémů: apt install debootstrap.
Sestavujeme FS:
- Připojíme oddíl do
/mnt/(použijte pro vás pohodlnější místo připojení):mount /dev/mmcblk0p2 /mnt - Vyplňujeme souborový systém:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametr--includespecifikuje dodatečné instalace některých balíčků, zahrnul jsem staticky zkompilovaný emulátor QEMU. Ten umožňuje provádětchrootdo ARM prostředí. Smysl ostatních voleb si můžete prohlédnout naman debootstrap. Nezapomeňte, že ne každá ARM deska podporuje architekturuarmhf. - Vzhledem k rozdílu v architekturách
debootstrapse provádí ve dvou fázích, druhá se provádí takto:chroot /mnt/ /debootstrap/debootstrap --second-stage - Teď je potřeba se chrootnout:
chroot /mnt /bin/bash - Vyplňujeme
/etc/hostsa/etc/hostnamecílový FS. Vyplňte obdobně jako obsah na vašem lokálním počítači, nezapomeňte jen změnit název hostitele. - Můžete doladit vše ostatní. Zejména já doinstaluji
locales(klíče repozitáře), přenastavuji lokalizace a časové pásmo (dpkg-reconfigure locales tzdata). Nezapomeňte nastavit heslo příkazempasswd. - Nastavujeme heslo pro
rootpříkazempasswd. - Přípravy obrazu pro mě končí vyplněním
/etc/fstabuvnitř/mnt/.
Budu nahrávat podle dříve vytvořených značek, takže obsah bude následující:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Nakonec můžeme přimontovat spouštěcí oddíl, který budeme potřebovat pro jádro: `mount /dev/mmcblk0p1 /mnt/boot/`
Sestavení Linuxu
Pro sestavení jádra (a poté bootloaderu) na Debian Testing je potřeba nainstalovat standardní sadu GCC, GNU Make a hlavičkových souborů GNU C Library pro cílovou architekturu (u mě armhf), a také hlavičky OpenSSL, konzolový kalkulátor bc, bison a flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Protože bootloader implicitně hledá soubor zImage na souborovém systému bootovacího oddílu, je na čase rozdělit flash disk.
- Klonování jádra trvá příliš dlouho, takže si ho jednoduše stáhnu:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Rozbalíme a přejdeme do adresáře se zdrojovými kódy:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1 - Konfigurujeme před kompilací:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurace se nachází v adresářiarch/arm/configs/. Pokud takový není, můžete zkusit najít a stáhnout hotový a předat název souboru v tomto adresáři v parametruKBUILD_DEFCONFIG. V krajním případě přejděte rovnou k dalšímu bodu. - Volitelně lze doladit nastavení:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - A cross-kompilujeme obraz:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Teď můžeme zkopírovat soubor s jádrem:
cp arch/arm/boot/zImage /mnt/boot/ - A soubory s DeviceTree (popis aktuálního hardware na desce):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - A nainstalovat moduly sestavené jako samostatné soubory:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Jádro je připraveno. Můžete všechno odpojit: umount /mnt/boot/ /mnt/
Das U-Boot
Jelikož je bootloader interaktivní, pro ověření jeho funkce postačuje samotná deska, paměťové zařízení a volitelně zařízení USB-to-UART. To znamená, že jádro a operační systém mohou být odloženy na později.
Absolutní většina výrobců doporučuje použít Das U-Boot pro primární načítání. Plná podpora je obvykle zajištěna ve vlastním forku, ale nezapomínají ani přispívat do upstreamu. V mém případě je deska podporována v , proto jsem to ignoroval.
Sestavujeme samotný bootloader:
- Klórujeme stabilní větev repozitáře:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Přejdeme do samotného adresáře:
cd u-boot - Připravíme konfiguraci sestavení:
make mx6ull_14x14_evk_defconfig. To funguje pouze tehdy, pokud je konfigurace obsažena v samotném Das U-Boot, jinak budete potřebovat najít konfiguraci výrobce a umístit ji do kořenového adresáře repozitáře do souboru.config, nebo sestavit jinak doporučeným způsobem výrobce. - Sestavujeme samotný obraz bootloaderu cross-kompilátorem
armhf:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
V důsledku toho dostaneme soubor u-boot.imx, to je hotový obraz, který lze zapsat na USB flash disk. Zapisujeme na SD kartu, vynecháme prvních 1024 bajtů. Proč jsem zvolil cíl u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в . Pro jiné desky se proces sestavení obrazu a zápisu může mírně lišit.
Hotovo, můžete se spustit. Bootloader by měl oznámit svou vlastní verzi, nějaké informace o desce a pokusit se najít obraz jádra na oddílu. Pokud se to nepovede, pokusí se spustit přes síť. Celkově je výstup dost podrobný, v případě problémů lze najít chybu.
Na závěr
A věděli jste, že čelo delfína není kostěné? Je to doslova třetí oko, tuková čočka pro echolokaci!
Zdroj: habr.com
