Installere GNU/Linux på en ARM-platform fra bunden (eksempelvis Kali og iMX.6)

tl;dr: jeg samler et billede af Kali Linux til ARM-computeren i programmet debootstrap, Linux og u-boot.

Installere GNU/Linux på en ARM-platform fra bunden (eksempelvis Kali og iMX.6)

Hvis du har købt en mindre populær enkortscomputer, kan du være stødt på manglen på et billede af din yndlingsdistribution. Det samme skete med den planlagte Flipper One. Kali Linux findes simpelthen ikke til IMX6 (jeg forbereder), så derfor må jeg samle det selv.

Indlæsningsprocessen er ret enkel:

  1. Hardwaren initialiseres.
  2. Fra et bestemt område på lagringsenheden (SD-kort/eMMC/osv.) læses bootloaderen og udføres.
  3. Bootloaderen søger efter operativsystemets kerne og indlæser det i et bestemt område af hukommelsen og udfører det.
  4. Kernen indlæser resten af OS'en.

Til min opgave er det tilstrækkeligt med dette detaljeringsniveau; du kan læse detaljer i en anden artikel. De nævnte 'bestemte' områder varierer fra board til board, hvilket skaber nogle udfordringer ved installationen. Indlæsning af server-ARM-platforme forsøges standardiseret med UEFI, men indtil videre er dette ikke tilgængeligt for alle, så vi må samle alting separat.

Sammensætning af rodfilssystemet

Først skal du forberede partitionerne. Das U-Boot understøtter forskellige filsystemer; jeg valgte FAT32 til /boot og ext3 til roden, dette er standardopdelingen af billeder til Kali for ARM. Jeg vil bruge GNU Parted, men du kan gøre det samme med den mere velkendte fdisk. Derudover skal der bruges dosfstools og e2fsprogs til at oprette filsystemet: apt install parted dosfstools e2fsprogs.

Vi partitionerer SD-kortet:

  1. Vi markerer SD-kortet til at bruge MBR-opdeling: parted -s /dev/mmcblk0 mklabel msdos
  2. Vi opretter en partition på /boot på 128 megabyte: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Den første udeladte megabyte skal efterlades til selve partitioneringen og bootloaderen.
  3. Vi opretter rod-filsystemet med den resterende kapacitet: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Hvis dine partitionsfiler ikke er blevet oprettet eller ændret, skal 'partprobe' køres, så partitionstabellen læses ind igen.
  5. Vi opretter filsystemet for boot-partitionen med mærket BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Vi opretter rod-filsystemet med mærket ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Fantastisk, nu kan den fyldes. For dette skal der yderligere bruges debootstrap, et værktøj til at oprette rod-filsystemer i Debian-lignende operativsystemer: apt install debootstrap.

Vi samler filsystmet:

  1. Vi monterer partitionen i /mnt/ (brug et mere praktisk monteringspunkt for dig selv): mount /dev/mmcblk0p2 /mnt
  2. Fyld filsystemet: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameter --include angiver at installere nogle ekstra pakker, jeg har angivet en statisk bygget QEMU-emulator. Den muliggør kørsel af chroot i ARM-miljøet. Meningen med de øvrige muligheder kan ses i man debootstrap. Glem ikke, at ikke hver ARM-platfome understøtter arkitekturen armhf.
  3. På grund af arkitekturforskelle debootstrap uddeles i to trin, det andet udføres således: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nu skal du chroot'e: chroot /mnt /bin/bash
  5. Vi fylder /etc/hosts og /etc/hostname mål-FS. Udfyld det på samme måde som indholdet på din lokale computer, glem ikke at ændre værtsnavnet.
  6. Du kan finjustere alt andet. Jeg installerer især locales (repository-nøgler), jeg omkonfigurerer lokaliteter og tidszone (dpkg-reconfigure locales tzdata). Glem ikke at angive en adgangskode med kommandoen passwd.
  7. Indstil adgangskode for root med kommandoen passwd.
  8. Forberedelse af billedet for mig afsluttes med udfyldning /etc/fstab indenfor /mnt/.

Jeg vil uploade i overensstemmelse med de tidligere oprettede etiketter, så indholdet vil være som følger:

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

Endelig kan vi montere boot-partitionen, den vil være nødvendig for kernen: `mount /dev/mmcblk0p1 /mnt/boot/`

Bygning af Linux

For at bygge kernen (og bootloaderen senere) i Debian Testing skal du installere den standard pakke af GCC, GNU Make og headerfiler for GNU C Library til målarkitekturen (for mig armhf), samt OpenSSL-headere, konsolberegner bc, bison og flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Da bootloaderen som standard leder efter filen zImage på filsystemet for boot-partitionen, er det tid til at partitionere flashen.

  1. At klone kernen tager for lang tid, så jeg downloader bare: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Lad os pakke ud og gå til mappen med kildekoden: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigurerer før kompilering: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurationsfilen ligger i mappen arch/arm/configs/. Hvis ikke, kan du prøve at finde og downloade en forberedt fil og angive filnavnet i denne mappe som parameter KBUILD_DEFCONFIG. I værste fald kan du springe til næste punkt.
  3. Valgfrit kan du justere indstillingerne: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Og så krosskompilerer vi billedet: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nu kan vi kopiere filen med kernen: cp arch/arm/boot/zImage /mnt/boot/
  6. Og filer med DeviceTree (beskrivelse af det hardware, der findes på kortet): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Og installer de samlede moduler som separate filer: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernen er klar. Du kan afmontere alt: umount /mnt/boot/ /mnt/

Das U-Boot

Da bootloaderen er interaktiv, er det nok kun selve kortet, lagringsmediet og eventuelt en USB-to-UART-enhed for at teste dens funktionalitet. Det vil sige, at du kan udskyde kernen og OS til senere.

Absolut flertallet af producenter tilbyder at bruge Das U-Boot til primæropladning. Fuld support gives typisk i deres egen fork, men de glemmer heller ikke at bidrage til upstream. i mainline, derfor en fork ignorerede jeg det.

Vi bygger selve bootloaderen:

  1. Klone den stabile gren af repository: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Gå ind i selve biblioteket: cd u-boot
  3. Forbered byggekonfigurationen: make mx6ull_14x14_evk_defconfig. Dette fungerer kun, hvis konfigurationen findes i selve Das U-Boot; ellers skal du finde producentens konfigurationsfil og placere den i roden af repository i filen .config, eller samle på en anden anbefalet måde af producenten.
  4. Byg selve bootloader-billedet med cross-compiler armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Som resultat får vi filen u-boot.imx, det er et færdigt billede, som kan skrives til USB-nøglen. Skriv til SD-kortet, idet de første 1024 byte udelades. Hvorfor jeg valgte målet u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в dokumentationen. For andre kort kan processen med at bygge billedet og skrive det variere lidt.

Færdig, du kan starte op. Bootloaderen skal angive sin egen version, nogle oplysninger om kortet og forsøge at finde kernen i partitionen. I tilfælde af fiasko vil den forsøge at starte op via netværket. Generelt er output ret detaljeret, så man kan finde fejlen i tilfælde af problemer.

Afslutning

Vidste du, at delfinens pande ikke er knogleagtig? Det er bogstaveligt talt det tredje øje, et fedtlinse til at bruge til ekkolokalisering!

Installere GNU/Linux på en ARM-platform fra bunden (eksempelvis Kali og iMX.6)

Installere GNU/Linux på en ARM-platform fra bunden (eksempelvis Kali og iMX.6)

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster