tl; dr: Vytváram obraz Kali Linuxu pre počítač ARM v programe debootstrap
, linux
и u-boot
.
Ak ste si kúpili nejaký nie veľmi populárny softvér s jednou doskou, možno budete čeliť nedostatku obrazu vašej obľúbenej distribúcie. Približne to isté sa stalo s
Proces sťahovania je pomerne jednoduchý:
- Hardvér je inicializovaný.
- Z určitej oblasti na úložnom zariadení (karta SD/eMMC/atď.) sa načíta a spustí zavádzač.
- Bootloader hľadá jadro operačného systému a načíta ho do nejakej oblasti pamäte a spustí ho.
- Jadro načíta zvyšok OS.
Táto úroveň podrobností je pre moju úlohu dostatočná, môžete si prečítať podrobnosti
Budovanie koreňového súborového systému
Najprv musíte pripraviť sekcie. Das U-Boot podporuje rôzne súborové systémy, pre ktoré som zvolil FAT32 /boot
a ext3 pre root, toto je štandardné rozloženie obrázkov pre Kali na ARM. Použijem GNU Parted, ale vy môžete urobiť to isté známym spôsobom fdisk
. Budete tiež potrebovať dosfstools
и e2fsprogs
na vytvorenie systému súborov: apt install parted dosfstools e2fsprogs
.
Kartu SD označíme:
- Označte SD kartu ako používajúcu rozdelenie MBR:
parted -s /dev/mmcblk0 mklabel msdos
- Vytvorte sekciu pod
/boot
pre 128 megabajtov:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Prvý vynechaný megabajt musí byť ponechaný pre samotné označenie a pre bootloader. - Vytvárame koreňový súborový systém pre celú zostávajúcu kapacitu:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Ak sa náhle súbory oddielov nevytvorili alebo sa nezmenili, musíte spustiť `partprobe`, potom sa tabuľka oddielov znovu načíta.
- Vytvorte súborový systém pre zavádzaciu oblasť s označením
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Vytvorte koreňový súborový systém s označením
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Skvelé, teraz to môžete vyplniť. Na to budete navyše potrebovať debootstrap
, nástroj na vytváranie koreňových súborových systémov pre operačné systémy podobné Debianu: apt install debootstrap
.
Zbierame FS:
- Namontujte priečku
/mnt/
(použite pohodlnejší bod pripojenia):mount /dev/mmcblk0p2 /mnt
- V skutočnosti vyplníme súborový systém:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. Parameter--include
naznačuje dodatočnú inštaláciu niektorých balíkov, špecifikoval som staticky vytvorený emulátor QEMU. Umožňuje vykonávaťchroot
v prostredí ARM. Význam zvyšných možností nájdete vman debootstrap
. Nezabudnite, že nie každá doska ARM podporuje architektúruarmhf
. - Kvôli rozdielu v architektúre
debootstrap
sa vykonáva v dvoch fázach, druhá sa vykonáva takto:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Teraz to musíte pokaziť:
chroot /mnt /bin/bash
- vyplniť
/etc/hosts
и/etc/hostname
cieľová FS. Vyplňte to isté ako obsah na vašom lokálnom počítači, len nezabudnite nahradiť názov hostiteľa. - Všetko ostatné si môžete prispôsobiť. Najmä inštalujem
locales
(kľúče úložiska), prekonfigurujte miestne nastavenia a časové pásmo (dpkg-reconfigure locales tzdata
). Nezabudnite nastaviť heslo pomocou príkazupasswd
. - Nastavte heslo pre
root
tímompasswd
. - Príprava obrazu pre mňa končí plnením
/etc/fstab
vnútri/mnt/
.
Nahrám v súlade s predtým vytvorenými značkami, takže obsah bude takýto:
LABEL=ROOTFS / automatické chyby=remount-ro 0 1
LABEL=BOOT /boot auto predvolená hodnota 0 0
Nakoniec môžete pripojiť zavádzaciu oblasť, budeme ju potrebovať pre jadro: `mount /dev/mmcblk0p1 /mnt/boot/`
Zostava Linuxu
Ak chcete vytvoriť jadro (a potom bootloader) na testovaní Debianu, musíte nainštalovať štandardnú sadu hlavičkových súborov GCC, GNU Make a GNU C Library pre cieľovú architektúru (pre mňa armhf
), ako aj hlavičky OpenSSL, konzolová kalkulačka bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Keďže predvolený zavádzač hľadá súbor zImage
na súborovom systéme zavádzacieho oddielu, je čas rozdeliť flash disk.
- Klonovanie jadra trvá príliš dlho, takže si stiahnem:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Rozbalíme a prejdeme do zdrojového adresára:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Nakonfigurujte pred kompiláciou:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfigurácia sa nachádza v adresáriarch/arm/configs/
. Ak žiadny neexistuje, môžete skúsiť nájsť a stiahnuť hotový súbor a zadať názov súboru v tomto adresári ako parameterKBUILD_DEFCONFIG
. Ako posledná možnosť okamžite prejdite na ďalší bod. - Voliteľne môžete upraviť nastavenia:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- A krížovo skompilujte obrázok:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Teraz môžete skopírovať súbor jadra:
cp arch/arm/boot/zImage /mnt/boot/
- A súbory zo stromu DeviceTree (popis hardvéru na doske):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- A nainštalujte moduly zhromaždené vo forme samostatných súborov:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Jadro je pripravené. Všetko môžete odpojiť: umount /mnt/boot/ /mnt/
Das U-Boot
Keďže bootloader je interaktívny, všetko, čo potrebujete na otestovanie jeho fungovania, je samotná doska, úložné zariadenie a voliteľne aj zariadenie USB-to-UART. To znamená, že jadro a OS môžete odložiť na neskôr.
Prevažná väčšina výrobcov ponúka použitie Das U-Boot na počiatočné spustenie. Úplná podpora je zvyčajne poskytovaná v ich vlastnej vidlici, ale nezabudnú prispieť do upstreamu. V mojom prípade je doska podporovaná v
Poďme zostaviť samotný bootloader:
- Klonujeme stabilnú vetvu úložiska:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Poďme do samotného adresára:
cd u-boot
- Príprava konfigurácie zostavy:
make mx6ull_14x14_evk_defconfig
. Funguje to iba vtedy, ak je konfigurácia v samotnom Das U-Boot, inak budete musieť nájsť konfiguráciu výrobcu a vložiť ju do koreňového adresára úložiska v súbore.config
alebo zostaviť akýmkoľvek iným spôsobom odporúčaným výrobcom. - Samotný obraz zavádzača zostavíme pomocou krížového kompilátora
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
V dôsledku toho dostaneme súbor u-boot.imx
, ide o hotový obrázok, ktorý je možné zapísať na flash disk. Zapisujeme na SD kartu, pričom preskočíme prvých 1024 bajtov. Prečo som si vybral Target u-boot.imx
? Prečo mi chýbalo presne 1024 bajtov? To je to, čo navrhujú urobiť v
Hotovo, môžete naštartovať. Bootloader musí nahlásiť svoju vlastnú verziu, nejaké informácie o doske a pokúsiť sa nájsť obraz jadra na partícii. Ak sa to nepodarí, pokúsi sa zaviesť systém cez sieť. Vo všeobecnosti je výstup dosť podrobný, v prípade problému môžete nájsť chybu.
namiesto záveru
Vedeli ste, že čelo delfína nie je kostnaté? Je to doslova tretie oko, tuková šošovka na echolokáciu!
Zdroj: hab.com