Laten we beginnen met GNU/Linux Op een ARM-bord helemaal vanaf nul (met Kali en iMX.6 als voorbeeld)

tl; Dr.: een Kali-image bouwen Linux voor ARM-computers, in het programma debootstrap, linux и u-boot.

Laten we beginnen met GNU/Linux Op een ARM-bord helemaal vanaf nul (met Kali en iMX.6 als voorbeeld)

Als u een single-board hebt gekocht dat niet erg populair is, is het mogelijk dat er geen afbeelding van uw favoriete distributie bij zit. Vrijwel hetzelfde gebeurde met geplande Flipper OneKali Linux Er is simpelweg niemand die IMX6 kan produceren (ik ben er zelf een aan het voorbereiden), dus ik moet hem zelf in elkaar zetten.

Het downloadproces is heel eenvoudig:

  1. De hardware wordt geïnitialiseerd.
  2. Een bootloader wordt gelezen vanaf een specifiek gebied op het opslagapparaat (SD-kaart/eMMC/enz.) en uitgevoerd.
  3. De bootloader zoekt naar de kernel van het besturingssysteem, laadt deze in een geheugengebied en voert deze uit.
  4. De kernel start de rest van het besturingssysteem op.

Voor mijn taak is dit detailniveau voldoende, u kunt de details lezen in een ander artikel. De hierboven genoemde "enkele" gebieden verschillen per bord, wat kan leiden tot installatieproblemen. ARM-serverplatforms laden proberen te standaardiseren met UEFI, maar totdat dit voor iedereen beschikbaar is, zult u alles apart moeten samenstellen.

Het rootbestandssysteem bouwen

Eerst moet je de secties voorbereiden. U-Boot ondersteunt verschillende bestandssystemen, ik heb gekozen voor FAT32 /boot en ext3 voor de root. Dit is de standaard afbeeldingsindeling voor Kali onder ARM. Ik gebruik GNU Parted, maar je kunt hetzelfde op een meer bekende manier doen fdisk. Je hebt ook nodig dosfstools и e2fsprogs om FS te creëren: apt install parted dosfstools e2fsprogs.

We markeren de SD-kaart:

  1. Markeer de SD-kaart als een kaart die MBR-partitionering gebruikt: parted -s /dev/mmcblk0 mklabel msdos
  2. Maak een sectie onder /boot voor 128 megabyte: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. De eerste overgeslagen megabyte moet worden overgelaten voor de markup zelf en voor de bootloader.
  3. We maken een root-FS voor de gehele resterende capaciteit: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Als uw partitiebestanden plotseling niet zijn aangemaakt of gewijzigd, moet u `partprobe` uitvoeren. De partitietabel wordt dan opnieuw gelezen.
  5. Maak een opstartpartitiebestandssysteem met een label BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Maak een root FS met een label ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Geweldig, nu kunt u het invullen. Dit zal bovendien vereisen debootstrap, een hulpprogramma voor het creëren van root FS Debian- vergelijkbare besturingssystemen: apt install debootstrap.

Wij verzamelen FS:

  1. Monteer de partitie in /mnt/ (gebruik een koppelpunt dat voor u handiger is): mount /dev/mmcblk0p2 /mnt
  2. We vullen het bestandssysteem: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameter --include geeft aan dat er ook enkele pakketten geïnstalleerd moeten worden. Ik heb de statisch gebouwde QEMU-emulator opgegeven. Hiermee kunt u uitvoeren chroot in ARM-omgeving. De betekenis van de andere opties is te zien in man debootstrap. Vergeet niet dat niet elk ARM-bord deze architectuur ondersteunt. armhf.
  3. Vanwege het verschil in architectuur debootstrap wordt in twee fasen uitgevoerd, de tweede wordt als volgt uitgevoerd: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nu moet je aan de slag: chroot /mnt /bin/bash
  5. Vullen /etc/hosts и /etc/hostname doel FS. Vul de inhoud op dezelfde manier in als op uw lokale computer. Vergeet alleen niet de hostnaam te vervangen.
  6. Al het andere kun je nauwkeurig afstemmen. Ik installeer met name extra locales (repositorysleutels), landinstellingen en tijdzone opnieuw configureren (dpkg-reconfigure locales tzdata). Vergeet niet het wachtwoord in te stellen met het commando passwd.
  7. Stel een wachtwoord in voor root team passwd.
  8. De voorbereiding van het beeld eindigt voor mij met het vullen /etc/fstab внутри /mnt/.

Ik zal laden volgens de eerder aangemaakte tags, dus de inhoud zal als volgt zijn:

LABEL=ROOTFS / automatische fouten=remount-ro 0 1
LABEL=BOOT /boot auto standaard 0 0

Ten slotte kunnen we de bootpartitie mounten. Deze hebben we nodig voor de kernel: `mount /dev/mmcblk0p1 /mnt/boot/`

montage Linux

Om de kernel (en later de bootloader) te bouwen op Debian Voor het testen moet je de standaard set headerbestanden van GCC, GNU Make en de GNU C-bibliotheek voor de doelarchitectuur installeren (ik heb armhf), evenals OpenSSL-headers, consolecalculator bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Omdat de standaard bootloader naar het bestand zoekt zImage op het bestandssysteem van de opstartpartitie is het tijd om de flashdrive te partitioneren.

  1. Het klonen van de kernel duurt te lang, dus ik download hem gewoon: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Laten we het uitpakken en naar de directory met de bronnen gaan: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Configureren vóór compilatie: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. De configuratie bevindt zich in de directory arch/arm/configs/. Als er geen is, kunt u proberen een kant-en-klare versie te vinden en te downloaden en de naam van het bestand in deze map door te geven aan de parameter KBUILD_DEFCONFIG. Ga in extreme gevallen direct door naar het volgende punt.
  3. Optioneel kunt u de instellingen aanpassen: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. En we cross-compileren de afbeelding: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nu kunt u het bestand met de kernel kopiëren: cp arch/arm/boot/zImage /mnt/boot/
  6. En bestanden van DeviceTree (beschrijving van de hardware die op het bord aanwezig is): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. En installeer de verzamelde modules als aparte bestanden: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

De kern is klaar. Je kunt alles ontkoppelen: umount /mnt/boot/ /mnt/

De U-boot

Omdat de bootloader interactief is, hebt u voor het testen van de werking ervan alleen de printplaat zelf, een opslagapparaat en een optioneel USB-naar-UART-apparaat nodig. Dat wil zeggen dat de kernel en het besturingssysteem uitgesteld kunnen worden tot een later tijdstip.

De overgrote meerderheid van de fabrikanten biedt Das U-Boot aan voor primaire opstart. Meestal wordt volledige ondersteuning geboden in de eigen fork, maar ze vergeten ook niet om bij te dragen aan de upstream. In mijn geval wordt het bord ondersteund in hoofdlijndat is waarom vork Ik negeerde het.

We monteren de bootloader zelf:

  1. Kloon de stabiele branch van de repository: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Laten we naar de directory zelf gaan: cd u-boot
  3. De assemblageconfiguratie voorbereiden: make mx6ull_14x14_evk_defconfig. Dit werkt alleen als de configuratie zich in Das U-Boot zelf bevindt, anders moet u de configuratie van de fabrikant vinden en deze in de hoofdmap van de repository in een bestand plaatsen .config, of op een andere door de fabrikant aanbevolen wijze worden gemonteerd.
  4. We bouwen de bootloader-image zelf met behulp van een cross-compiler armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Als resultaat krijgen we een bestand u-boot.imx, dit is een kant-en-klare afbeelding die naar een flashdrive kan worden geschreven. We schrijven naar de SD-kaart en slaan de eerste 1024 bytes over. Waarom ik voor Target heb gekozen u-boot.imx? Waarom heb je precies 1024 bytes overgeslagen? Dit is wat ze van plan zijn te doen in documentatie. Voor andere borden kan het proces van het samenstellen van de afbeelding en het branden ervan enigszins afwijken.

Klaar, je kunt opstarten. De bootloader moet de versie en wat informatie over de kaart rapporteren en proberen een kernelimage op de partitie te vinden. Als dit niet lukt, wordt geprobeerd om via het netwerk op te starten. Over het algemeen is de uitvoer behoorlijk gedetailleerd en kunt u de fout vinden als er een probleem is.

In plaats Output

Wist je dat het voorhoofd van een dolfijn geen bot is? Het is letterlijk een derde oog, een vetlens voor echolocatie!

Laten we beginnen met GNU/Linux Op een ARM-bord helemaal vanaf nul (met Kali en iMX.6 als voorbeeld)

Laten we beginnen met GNU/Linux Op een ARM-bord helemaal vanaf nul (met Kali en iMX.6 als voorbeeld)

Bron: www.habr.com

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster