Cumincià GNU/Linux nantu à una scheda ARM da zero (usendu Kali è iMX.6 cum'è esempiu)

tl; dr: Sò custruendu una maghjina Kali Linux per un computer ARM, in u prugramma debootstrap, linux и u-boot.

Cumincià GNU/Linux nantu à una scheda ARM da zero (usendu Kali è iMX.6 cum'è esempiu)

Sè avete compru qualchì pagatore unicu micca assai populari, pudete scuntrà a mancanza di una maghjina di u vostru kit di distribuzione favuritu per questu. Praticamente a listessa cosa hè accaduta previstu Flipper One. Ùn ci hè simplicemente micca Kali Linux per IMX6 (sò cucinatu), cusì aghju da assemblallu stessu.

U prucessu di scaricamentu hè abbastanza simplice:

  1. L'hardware hè inizializatu.
  2. Da una certa zona di u dispositivu di almacenamiento (carta SD/eMMC/etc) u bootloader hè lettu è eseguitu.
  3. U caricatore cerca u kernel di u sistema operatore è u carica in una zona di memoria è eseguisce.
  4. U kernel carica u restu di u SO.

Per u mo compitu, stu livellu di dettagliu hè abbastanza, pudete leghje i dettagli in un altru articulu. I "alcuni" spazii citati sopra differenu da bordu à bordu, chì crea qualchì difficultà di stallazione. Caricamentu di e piattaforme ARM di u servitore prova di standardizà usendu UEFI, ma finu à chì ùn hè micca dispunibule per tutti, vi tuccherà à cullà tuttu separatamente.

Custruì u filesystem root

Prima avete bisognu di preparà e rùbbriche. Das U-Boot supporta diversi sistemi di fugliale, aghju sceltu FAT32 per /boot è ext3 per root, questu hè u marcatu standard di l'imagine per Kali sottu ARM. Aduprà GNU Parted, ma pudete fà u listessu più familiar fdisk. Averete ancu bisognu dosfstools и e2fsprogs per creà un filesystem: apt install parted dosfstools e2fsprogs.

Particionà a carta SD:

  1. Marcate a carta SD cum'è utilizendu a particionazione MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Crea una sezione per /boot per 128 megabytes: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. U primu megabyte mancatu deve esse lasciatu per u marcatu stessu è per u bootloader.
  3. Crea un FS root per u restu di a capacità: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Se di colpu ùn avete micca creatu o cambiatu i schedarii di partizioni, avete bisognu di eseguisce `partprobe', allora a tavola di partizioni serà riletturata.
  5. Crea un sistema di filesystem di partizioni di boot marcatu BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Crea un sistema di filesystem root cù una etichetta ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Grande, avà pudete riempie. Questu averebbe ancu bisognu debootstrap, una utilità per creà FS root in sistemi operativi simili à Debian: apt install debootstrap.

Raccogliemu FS:

  1. Muntà a partizione à /mnt/ (utilizate un puntu di muntagna più convenientu per voi stessu): mount /dev/mmcblk0p2 /mnt
  2. In fatti, riempia u sistema di schedari: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametru --include specifica per installà in più alcuni pacchetti, aghju specificatu un emulatore QEMU custruitu staticu. Permette di fà chroot à l'ambiente ARM. U significatu di l'altri opzioni pò esse truvatu in man debootstrap. Ùn vi scurdate micca chì micca ogni bordu ARM sustene l'architettura armhf.
  3. A causa di a diffarenza in l'architettura debootstrap hè realizatu in dui fasi, u sicondu hè realizatu cum'è seguita: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Avà avete bisognu di spin: chroot /mnt /bin/bash
  5. Cumpigliemu /etc/hosts и /etc/hostname target FS. Inserite u listessu cum'è u cuntenutu in u vostru urdinatore locale, ricordate di rimpiazzà solu u nome d'ospitu.
  6. Pudete persunalizà tuttu u restu. In particulare, aghju installatu locales (chjavi di repository), cunfigurà i locali è u fusu orariu (dpkg-reconfigure locales tzdata). Ùn vi scurdate di stabilisce a password cù u cumandimu passwd.
  7. Stabilisci una password per root squadra passwd.
  8. A preparazione di l'imaghjini per mè hè cumpletata da u pienu /etc/fstab ind'u /mnt/.

Caricà in cunfurmità cù e tag create prima, cusì u cuntenutu serà cusì:

LABEL=ROOTFS/errori auto=remount-ro 0 1
LABEL=BOOT /boot auto predefiniti 0 0

Infine, pudete muntà a partizione di boot, avemu bisognu per u kernel: `mount /dev/mmcblk0p1 /mnt/boot/`

Custruì Linux

Per custruisce u kernel (è dopu u bootloader) nantu à Debian Testing, avete bisognu di installà u set standard di GCC, GNU Make è i file di header di a Biblioteca C GNU per l'architettura di destinazione (aghju armhf), è ancu intestazioni OpenSSL, calculatrice di cunsola bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Siccomu u caricatore predeterminatu cerca un schedariu zImage nantu à u sistema di fugliale di a partizione di boot, hè ora di rompe u flash drive.

  1. A clonazione di u kernel hè troppu longa, dunque aghju da scaricà solu: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Unpack è andate à u cartulare fonte: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Configurate prima di cumpilà: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. A cunfigurazione hè in u cartulare arch/arm/configs/. Se ùn ci hè nimu, pudete pruvà à truvà è scaricà una pronta è passà u nome di u schedariu in questu cartulare à u paràmetru. KBUILD_DEFCONFIG. In casi estremi, procedi immediatamente à u paràgrafu prossimu.
  3. Opzionalmente, pudete aghjustà i paràmetri: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. È compie incruciate l'imaghjini: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Avà pudete copià u schedariu kernel: cp arch/arm/boot/zImage /mnt/boot/
  6. È i fugliali da DeviceTree (descrizzione di hardware dispunibule nantu à u bordu): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. È installate i moduli assemblati cum'è schedarii separati: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

U kernel hè prontu. Pudete smuntà tuttu: umount /mnt/boot/ /mnt/

Das U Boot

Siccomu u bootloader hè interattivu, u bordu stessu, un dispositivu di almacenamiento è un dispositivu USB-à-UART opzionale sò abbastanza per pruvà u so funziunamentu. Questu hè, pudete posponà u kernel è l'OS per più tardi.

A maiò parte di i pruduttori suggerisce l'usu di Das U-Boot per u boot primariu. U sustegnu tutale hè generalmente furnitu in u so propiu forchetta, ma ùn vi scurdate di cuntribuisce in upstream. In u mo casu, u cunsigliu hè supportatu linea principalehè per quessa forchetta Aghju ignoratu.

Cullemu u bootloader stessu:

  1. Clona a ramu stabile di u repositariu: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Andemu à u cartulare stessu: cd u-boot
  3. Preparazione di a cunfigurazione di custruzzione: make mx6ull_14x14_evk_defconfig. Questu funziona solu se a cunfigurazione hè in Das U-Boot stessu, altrimenti avete bisognu di truvà a cunfigurazione di u fabricatore è mette in a radica di u repository in u schedariu. .config, o assemblatu in un altru modu cunsigliatu da u fabricatore.
  4. Cullemu l'imagine di bootloader stessu cù un compilatore cross-compiler armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

In u risultatu, avemu u schedariu u-boot.imx, Questa hè una maghjina pronta chì pò esse scritta à una unità flash USB. Scrivemu à a carta SD, saltendu i primi 1024 bytes. Perchè aghju sceltu u mira u-boot.imx? Perchè mancate esattamente 1024 bytes? Questu hè ciò chì pruponenu di fà ducumentazione. Per altri tavulini, u prucessu di custruzzione di l'imaghjini è di brusgià pò esse ligeramente sfarente.

Fattu, pudete scaricà. U bootloader deve riportà a so propria versione, qualchì infurmazione nantu à u bordu, è pruvate à truvà l'imaghjini di u kernel nantu à a partizione. S'ellu falla, pruvarà à boot nantu à a reta. In generale, l'output hè abbastanza detallatu, pudete truvà un errore in casu di prublema.

Inveci di 'na cunchiusioni

Sapete chì a fronte di un delfinu ùn hè micca ossu ? Hè literalmente un terzu ochju, una lente grassa per l'echolocation !

Cumincià GNU/Linux nantu à una scheda ARM da zero (usendu Kali è iMX.6 cum'è esempiu)

Cumincià GNU/Linux nantu à una scheda ARM da zero (usendu Kali è iMX.6 cum'è esempiu)

Source: www.habr.com