GNU/Linux beüzemelése ARM lapon a nulláról (például Kali és iMX.6)

tl;dr: Kali Linux képét készítek ARM számítógéphez a következő programban debootstrap, Linux és u-boot.

GNU/Linux beüzemelése ARM lapon a nulláról (például Kali és iMX.6)

Ha vásároltál egy kevésbé népszerű egylapos számítógépet, akkor találkozhattál azzal, hogy hiányzik a kedvenc disztribúciód képe. Hasonló dolog történt a tervezett Flipper One-nal. Kali Linux IMX6-ra egyszerűen nem elérhető (én készítem), ezért magamnak kell összeraknom.

A betöltési folyamat meglehetősen egyszerű:

  1. A hardver inicializálódik.
  2. A tárolóeszköz (SD-kártya/eMMC/stb.) egy bizonyos területéről betöltésre kerül a bootloader.
  3. A bootloader megkeresi az operációs rendszer kernelét, és betölti azt egy bizonyos memória területre, majd végrehajtja.
  4. A kernel betölti a többi operációs rendszert.

Az én feladatomhoz elegendő ez a részletesség, a részleteket elolvashatod egy másik cikkben. A fent említett "bizonyos" területek alaplaponként eltérnek, ami bizonyos nehézségeket okoz a telepítés során. A szerver ARM platformok standardizálására törekednek UEFI segítségével, de míg ez nem érhető el mindenhol, külön kell összeraknunk mindent.

A gyökér fájlrendszer összeállítása

Először is elő kell készítenünk a partíciókat. A U-Boot különböző fájlrendszereket támogat, én FAT32-t választottam a /boot és ext3-t a gyökérhez, ez a standard elrendezés a Kali ARM-hoz. A GNU Parted-ot fogom használni, de te is megteheted a megszokott fdisk-kel. Szintén szükség lesz a dosfstools és e2fsprogs fájlrendszer létrehozásához: apt install parted dosfstools e2fsprogs.

Particionáljuk az SD-kártyát:

  1. Megjelöljük az SD-kártyát MBR elrendezés használatával: parted -s /dev/mmcblk0 mklabel msdos
  2. Létrehozunk egy 128 megabájtos partíciót a /boot : parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Az első kihagyott megabájtot szükséges fenntartani a partíció számára és a bootloadernek.
  3. Létrehozunk egy gyökér fájlrendszert a fennmaradó kapacitásra: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ha esetleg nincsenek létrehozva vagy megváltoztatva a partíciós fájlok, futtassuk a `partprobe` parancsot, így a partíciós táblázat át lesz olvasva.
  5. Létrehozzuk a boot partíció fájlrendszerét a címkével BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Létrehozzuk a gyökér fájlrendszert a címkével ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Remek, most már tölthetjük fel. Ehhez további szükség lesz debootstrap, a Debian-alapú operációs rendszerek gyökér fájlrendszerének létrehozásának segédprogramja: apt install debootstrap.

Összeállítjuk a fájlrendszert:

  1. Csatlakoztatjuk a partíciót a /mnt/ (használj egy számodra kényelmesebb csatolási pontot): mount /dev/mmcblk0p2 /mnt
  2. Töltsük ki a fájlrendszert: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. A paraméter --include további csomagok telepítését jelöli, én a statikusan összeállított QEMU emulátort adtam meg. Ez lehetővé teszi a futtatást chroot ARM környezetben. A többi opció jelentését a következő helyen találhatja: man debootstrap. Ne feledje, hogy nem minden ARM lapka támogatja az armhf.
  3. architektúrák közötti eltérések miatt debootstrap két lépésben hajtódik végre, a második így történik: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Most be kell lépnünk a chroot környezetbe: chroot /mnt /bin/bash
  5. Kitöltjük /etc/hosts és /etc/hostname cél FS. Töltse ki a saját számítógépének tartalmához hasonlóan, csak ne felejtse el megváltoztatni a gazdagép nevét.
  6. Mindent finomhangolhatunk. Különösen telepítem a locales (tárolókulcsok), újrakonfigurálom a lokalizációt és az időzónát (dpkg-reconfigure locales tzdata). Ne feledje beállítani a jelszót a következő parancs végrehajtásával: passwd.
  7. Jelszót állítunk be a , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. parancsot passwd.
  8. Kép készítési folyamataim az alábbiakkal fejeződnek be: /etc/fstab bent /mnt/.

Az alábbi címkék szerint fogok tölteni, így a tartalom a következő lesz:

LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0

Végül csatlakoztatjuk a boot partíciót, szükségünk lesz rá a kernelhez: `mount /dev/mmcblk0p1 /mnt/boot/`

Linux build

A kernel (és később a bootloader) Debian Testing alatt történő összeállításához telepítenie kell az alap GCC, GNU Make és GNU C Library fejléc fájlok készletét a cél architektúrához (nálam armhf), valamint az OpenSSL fejléc fájlokat, a parancssori kalkulátort bc, bison és flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Mivel a bootloader alapértelmezés szerint a zImage fájlt keresi a boot partíció fájlrendszerében, ideje lebontani a flash meghajtót.

  1. Túl sok idő a kernel klónozása, így inkább letöltöm: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Kicsomagoljuk, és lépjünk be a forráskód mappába: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfiguráljuk a fordítás előtt: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. A konfiguráció a következő mappában található: arch/arm/configs/. Ha nincs ilyen, megpróbálhatja keresni, letölteni és megadni a fájl nevét ennek a mappának a paraméterében: KBUILD_DEFCONFIG. Végső esetben egyből lépjen a következő pontra.
  3. Opcionálisan finomíthatók a beállítások: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. És cross-compiláljuk a képet: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Most másoljuk át a kernel fájlt: cp arch/arm/boot/zImage /mnt/boot/
  6. és a DeviceTree fájlokat (a lapon található hardver leírása): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. És telepíteni a különálló fájlok formájában összegyűjtött modulokat: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

A kernel készen áll. Minden leválasztható: umount /mnt/boot/ /mnt/

Das U-Boot

Mivel a bootloader interaktív, a működésének ellenőrzéséhez elegendő csak az alaplap, a tárolóeszköz és opcionálisan egy USB-to-UART eszköz. Azaz a kernelt és az operációs rendszert későbbre halaszthatjuk.

A gyártók túlnyomó többsége a Das U-Boot használatát ajánlja az első betöltéshez. A teljes körű támogatást általában a saját forkjukban biztosítják, de az upstreambe való hozzájárulásra sem felejtenek el. mainline, így a fork eltérítettem.

Összegyűjtjük magát a bootloadert:

  1. A stabil ág klónozása a tárolóból: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Bemenet a mappába: cd u-boot
  3. Előkészítjük a build konfigurációt: make mx6ull_14x14_evk_defconfig. Ez csak akkor működik, ha a konfiguráció szerepel a Das U-Bootban, különben meg kell találni a gyártó konfigurációját, és elhelyezni a tároló gyökerében egy .config, vagy más ajánlott gyártó szerint kell összeállítani.
  4. Összegyűjtjük magát a bootloader képet a cross compilerrel armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Ennek eredményeként egy fájlt kapunk u-boot.imx, ez egy kész kép, amelyet fel lehet írni egy USB meghajtóra. Írjunk az SD-kártyára, kihagyva az első 1024 byte-ot. Miért választottam ezt a célt u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в dokumentáció. Más alaplapok esetén a kép előállítási és írási folyamata kicsit eltérhet.

Kész, indítható. A bootloadernek meg kell jelenítenie a saját verzióját, néhány információt az alaplapról, és megpróbálja megtalálni a kernelt az partíción. Sikertelenség esetén a hálózaton próbálkozik bootolni. Összességében a kimenet eléggé részletes, hiba esetén megtalálható a probléma.

Összegzésként

Tudtad, hogy a delfin homloka nem csontos? Ez szó szerint a harmadik szem, zsírlencse az echolokációhoz!

GNU/Linux beüzemelése ARM lapon a nulláról (például Kali és iMX.6)

GNU/Linux beüzemelése ARM lapon a nulláról (például Kali és iMX.6)

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster