Spustenie GNU/Linuxu na doske ARM od začiatku (ako príklad použite Kali a iMX.6)

tl; dr: Vytváram obraz Kali Linuxu pre počítač ARM v programe debootstrap, linux и u-boot.

Spustenie GNU/Linuxu na doske ARM od začiatku (ako príklad použite Kali a iMX.6)

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 plánovaný Flipper One. Kali Linux pre IMX6 jednoducho neexistuje (pripravujem), takže si ho musím zostaviť sám.

Proces sťahovania je pomerne jednoduchý:

  1. Hardvér je inicializovaný.
  2. Z určitej oblasti na úložnom zariadení (karta SD/eMMC/atď.) sa načíta a spustí zavádzač.
  3. Bootloader hľadá jadro operačného systému a načíta ho do nejakej oblasti pamäte a spustí ho.
  4. Jadro načíta zvyšok OS.

Táto úroveň podrobností je pre moju úlohu dostatočná, môžete si prečítať podrobnosti v inom článku. „Niektoré“ oblasti uvedené vyššie sa líšia od dosky k doske, čo spôsobuje určité ťažkosti pri inštalácii. Načítavajú sa serverové platformy ARM snažia sa štandardizovať pomocou UEFI, no aj keď to nie je dostupné pre každého, všetko si budete musieť zostaviť samostatne.

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:

  1. Označte SD kartu ako používajúcu rozdelenie MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. 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.
  3. Vytvárame koreňový súborový systém pre celú zostávajúcu kapacitu: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ak sa náhle súbory oddielov nevytvorili alebo sa nezmenili, musíte spustiť `partprobe`, potom sa tabuľka oddielov znovu načíta.
  5. Vytvorte súborový systém pre zavádzaciu oblasť s označením BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. 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:

  1. Namontujte priečku /mnt/ (použite pohodlnejší bod pripojenia): mount /dev/mmcblk0p2 /mnt
  2. 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 v man debootstrap. Nezabudnite, že nie každá doska ARM podporuje architektúru armhf.
  3. 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
  4. Teraz to musíte pokaziť: chroot /mnt /bin/bash
  5. 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.
  6. 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íkazu passwd.
  7. Nastavte heslo pre root tímom passwd.
  8. 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.

  1. 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
  2. Nakonfigurujte pred kompiláciou: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurácia sa nachádza v adresári arch/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 parameter KBUILD_DEFCONFIG. Ako posledná možnosť okamžite prejdite na ďalší bod.
  3. Voliteľne môžete upraviť nastavenia: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. A krížovo skompilujte obrázok: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Teraz môžete skopírovať súbor jadra: cp arch/arm/boot/zImage /mnt/boot/
  6. A súbory zo stromu DeviceTree (popis hardvéru na doske): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. 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 hlavná línia, preto vidlička Ignoroval som to.

Poďme zostaviť samotný bootloader:

  1. Klonujeme stabilnú vetvu úložiska: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Poďme do samotného adresára: cd u-boot
  3. 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 .configalebo zostaviť akýmkoľvek iným spôsobom odporúčaným výrobcom.
  4. 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 dokumentáciu. V prípade iných dosiek sa môže proces vytvárania obrazu a nahrávania mierne líšiť.

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!

Spustenie GNU/Linuxu na doske ARM od začiatku (ako príklad použite Kali a iMX.6)

Spustenie GNU/Linuxu na doske ARM od začiatku (ako príklad použite Kali a iMX.6)

Zdroj: hab.com