GNU / Linux von Grund auf auf ein ARM-Board bringen (z. B. Kali und iMX.6)

tl; dr : Aufbau eines Kali Linux für ARM - Rechner, in einem Programm debootstrap, linux und u-boot. Wenn Sie ein nicht sehr beliebtes Single-Board-Gerät gekauft haben, kann es sein, dass Sie kein Image Ihres bevorzugten Distributionskits dafür haben. Ähnliches geschah mit dem geplanten Flipper One . Es gibt einfach kein Kali Linux für IMX6 (ich koche), also muss ich es selbst bauen.











Der Download-Vorgang ist recht einfach:



  1. Eisen wird initialisiert.
  2. In einem Bereich des Speichergeräts (SD-Karte / eMMC / usw.) wird der Bootloader gelesen und ausgeführt.
  3. Der Loader sucht nach dem Betriebssystemkern und lädt ihn in einen Speicherbereich und führt ihn aus.
  4. Der Kernel lädt den Rest des Betriebssystems.


Dieser Detaillierungsgrad reicht für meine Aufgabe aus, Sie können die Details in einem anderen Artikel lesen . Die oben genannten "einige" Bereiche unterscheiden sich von Platine zu Platine, was zu Schwierigkeiten bei der Installation führt. Sie versuchen, das Laden von Server-ARM-Plattformen mithilfe von UEFI zu standardisieren. Da dies jedoch nicht für alle verfügbar ist, müssen Sie alles separat erfassen.



Erstellen des Root-Dateisystems



Zuerst müssen Sie die Abschnitte vorbereiten. Das U-Boot unterstützt verschiedene Dateisysteme. Ich habe FAT32 für /bootund ext3 als Root ausgewählt. Dies ist das Standard-Image-Markup für Kali unter ARM. Ich werde GNU Parted verwenden, aber Sie können das Gleiche vertrauter machen fdisk. Außerdem muss dosfstoolsund muss e2fsprogsein Dateisystem erstellt werden : apt install parted dosfstools e2fsprogs.



Wir markieren die SD-Karte:



  1. Markieren Sie die SD-Karte als MBR-Markup: parted -s /dev/mmcblk0 mklabel msdos
  2. Erstellen Sie einen Abschnitt mit /boot128 Megabyte : parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Das erste fehlende Megabyte muss für das Markup selbst und für den Bootloader übrig bleiben.
  3. Wir erstellen ein Root-Dateisystem für die gesamte verbleibende Kapazität: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Wenn Ihre Partitionsdateien plötzlich nicht mehr erstellt oder geändert wurden, müssen Sie "partprobe" ausführen, dann wird die Partitionstabelle erneut gelesen.
  5. Erstellen Sie ein Bootpartitions-Dateisystem mit der Bezeichnung BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Erstellen Sie ein Root-Dateisystem mit einer Bezeichnung ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2


Großartig, jetzt können Sie es ausfüllen. Dazu ist ein zusätzliches debootstrapDienstprogramm erforderlich , um ein Debian-basiertes Root-Dateisystem zu erstellen apt install debootstrap.



Wir sammeln FS:



  1. /mnt/Montieren Sie die Partition in (verwenden Sie einen bequemeren Montagepunkt):mount /dev/mmcblk0p2 /mnt
  2. : debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. --include , QEMU. chroot ARM-. man debootstrap. , ARM- armhf.
  3. - debootstrap , : chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. : chroot /mnt /bin/bash
  5. /etc/hosts /etc/hostname . , .
  6. . locales ( ), (dpkg-reconfigure locales tzdata). passwd.
  7. Legen Sie ein Passwort für den rootBefehl fest passwd.
  8. Die Vorbereitung des Bildes für mich endet mit der Füllung im /etc/fstabInneren /mnt/.


Ich werde gemäß den zuvor erstellten Tags laden, sodass der Inhalt folgendermaßen aussieht:

LABEL = ROOTFS / Auto Error = Remount-Ro 0 1

LABEL = BOOT / Boot Auto Defaults 0 0


Schließlich können Sie die Boot-Partition mounten, wir benötigen sie für den Kernel: `mount / dev / mmcblk0p1 / mnt / boot /`



Linux erstellen



Zu bauen , ist den Kernel (und dann den Bootloader) auf Debian Testing erforderlich , einen Standardsatz von GCC, GNU Make und GNU C Library Header - Dateien für die Zielarchitektur (I herzustellen armhf), sowie die OpenSSL - Header, Konsolenrechner bc, bisonund flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Da der Bootloader standardmäßig nach einer Datei zImageim Dateisystem der Bootpartition sucht , ist es Zeit, das USB-Flash-Laufwerk zu partitionieren.



  1. Klonkern zu lang, also einfach herunterladen : wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Entpacke es und gehe in das Quellverzeichnis:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Vor dem Kompilieren konfigurieren : make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Die Konfiguration befindet sich im Verzeichnis arch/arm/configs/. Wenn es keine gibt, können Sie versuchen, eine fertige zu finden und herunterzuladen und den Namen der Datei in diesem Verzeichnis an den Parameter zu übergeben KBUILD_DEFCONFIG. Gehen Sie als letztes Mittel direkt zum nächsten Punkt.
  3. Optional können Sie die Einstellungen anpassen: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Und wir werden das Bild zusammenstellen: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Jetzt können Sie die Datei mit dem Kernel kopieren: cp arch/arm/boot/zImage /mnt/boot/
  6. Und Dateien mit DeviceTree (Beschreibung der auf der Karte verfügbaren Hardware): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Und installieren Sie die zusammengesetzten Module als separate Dateien: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install


Der Kernel ist fertig. Sie können alles abmontieren:umount /mnt/boot/ /mnt/



Das U-Boot



Da der Bootloader interaktiv ist, reichen die Karte selbst, ein Speichergerät und ein optionales USB-zu-UART-Gerät aus, um den Betrieb zu testen. Das heißt, Sie können den Kernel und das Betriebssystem für später verschieben.



Die überwiegende Mehrheit der Hersteller schlägt vor, Das U-Boot für den ersten Start zu verwenden. Volle Unterstützung wird normalerweise in einer eigenen Gabel bereitgestellt, aber sie vergessen nicht, einen Beitrag zum Upstream zu leisten. In meinem Fall wird das Board in der Hauptlinie unterstützt , daher habe ich die Gabel ignoriert.



Wir sammeln den Bootloader selbst:



  1. : git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. : cd u-boot
  3. : make mx6ull_14x14_evk_defconfig. Das U-Boot, .config, .
  4. - armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx


Als Ergebnis erhalten wir eine Datei u-boot.imx, dies ist ein fertiges Bild, das auf ein USB-Flash-Laufwerk geschrieben werden kann. Wir schreiben auf die SD-Karte und überspringen die ersten 1024 Bytes. Warum habe ich das Ziel ausgewählt u-boot.imx? Warum habe ich genau 1024 Bytes übersprungen? Dies schlägt die Dokumentation vor . Bei anderen Boards kann der Prozess zum Erstellen und Brennen von Images geringfügig abweichen.



Fertig, Sie können booten. Der Bootloader sollte seine eigene Version und einige Board-Informationen melden und versuchen, das Kernel-Image auf der Partition zu finden. Wenn dies nicht erfolgreich ist, wird versucht, über das Netzwerk zu booten. Im Allgemeinen ist die Ausgabe sehr detailliert, Sie können im Fehlerfall einen Fehler finden.



Anstelle einer Schlussfolgerung



Wussten Sie, dass die Stirn eines Delfins nicht knochig ist? Es ist buchstäblich ein drittes Auge, eine Fettlinse für die Echolokalisierung!










All Articles