GNU/Linuxi käivitamine ARM-plaadil nullist (kasutades näiteks Kali ja iMX.6)

tl; dr: Ehitan programmis Kali Linuxi pilti ARM-arvutile debootstrap, linux и u-boot.

GNU/Linuxi käivitamine ARM-plaadil nullist (kasutades näiteks Kali ja iMX.6)

Kui ostsite mõne mitte eriti populaarse ühe plaadi tarkvara, võite silmitsi seista sellega, et teie lemmiklevituse pilt puudub. Umbes sama juhtus ka kavandatud Flipper One. IMX6 jaoks pole lihtsalt Kali Linuxi (valmistan), seega pean selle ise kokku panema.

Allalaadimise protsess on üsna lihtne:

  1. Riistvara initsialiseeritakse.
  2. Salvestusseadme mõnes piirkonnas (SD-kaart/eMMC/jne) loetakse alglaadurit ja see käivitatakse.
  3. Alglaadur otsib operatsioonisüsteemi tuuma ja laadib selle mõnda mälupiirkonda ja käivitab selle.
  4. Kernel laadib ülejäänud OS-i.

Minu ülesande jaoks piisab sellisest detailsusest, saate lugeda üksikasju teises artiklis. Eespool mainitud "mõned" alad erinevad plaatideti, mis tekitab paigaldamisel mõningaid raskusi. ARM-i serveriplatvormide laadimine püüdes standardida kasutades UEFI-d, kuid kuigi see pole kõigile kättesaadav, peate kõik eraldi kokku panema.

Juurfailisüsteemi loomine

Kõigepealt peate sektsioonid ette valmistama. Das U-Boot toetab erinevaid failisüsteeme, valisin FAT32 jaoks /boot ja ext3 root jaoks, see on Kali standardne pildipaigutus ARM-is. Ma kasutan GNU Partedi, kuid saate seda teha tuttavamal viisil fdisk. Sul läheb ka vaja dosfstools и e2fsprogs failisüsteemi loomiseks: apt install parted dosfstools e2fsprogs.

Märgistame SD-kaardi:

  1. Märkige SD-kaart MBR-i partitsiooni kasutavaks: parted -s /dev/mmcblk0 mklabel msdos
  2. Looge jaotis alla /boot 128 megabaidi jaoks: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Esimene vahelejäänud megabait tuleb jätta märgistuse enda ja alglaaduri jaoks.
  3. Loome juurfailisüsteemi kogu ülejäänud mahu jaoks: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Kui teie partitsioonifaile pole äkki loodud või neid pole muudetud, peate käivitama `partprobe', seejärel loetakse partitsioonitabel uuesti.
  5. Looge sildiga alglaadimise partitsiooni jaoks failisüsteem BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Looge sildiga juurfailisüsteem ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Suurepärane, nüüd saate selle täita. Selleks vajate lisaks debootstrap, utiliit juurfailisüsteemide loomiseks Debiani-sarnaste operatsioonisüsteemide jaoks: apt install debootstrap.

Kogume FS-i:

  1. Paigaldage vahesein sisse /mnt/ (kasutage mugavamat kinnituspunkti): mount /dev/mmcblk0p2 /mnt
  2. Tegelikult täidame failisüsteemi: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parameeter --include viitab mõne paketi täiendavale installimisele, määrasin staatiliselt ehitatud QEMU emulaatori. See võimaldab teil esineda chroot ARM keskkonnas. Ülejäänud valikute tähenduse leiate aadressilt man debootstrap. Ärge unustage, et mitte iga ARM-plaat ei toeta seda arhitektuuri armhf.
  3. Arhitektuuri erinevuse tõttu debootstrap viiakse läbi kahes etapis, teine ​​toimub järgmiselt: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nüüd peate selle üles keerama: chroot /mnt /bin/bash
  5. Täidame /etc/hosts и /etc/hostname sihtmärk FS. Täitke sama, mis kohalikus arvutis, kuid ärge unustage asendada hostinimi.
  6. Saate kohandada kõike muud. Eelkõige paigaldan locales (hoidla võtmed), seadistage ümber lokaadid ja ajavöönd (dpkg-reconfigure locales tzdata). Ärge unustage käsuga parooli määrata passwd.
  7. Määra parool root meeskond passwd.
  8. Pildi ettevalmistamine minu jaoks lõppeb täidisega /etc/fstab jooksul /mnt/.

Laen üles vastavalt eelnevalt loodud siltidele, nii et sisu on järgmine:

LABEL=ROOTFS / automaatsed vead=remount-ro 0 1
LABEL=BOOT /boot auto vaikeseaded 0 0

Lõpuks saate ühendada alglaadimise partitsiooni, vajame seda kerneli jaoks: `mount /dev/mmcblk0p1 /mnt/boot/

Linuxi ehitamine

Kerneli (ja seejärel alglaaduri) ehitamiseks Debiani testimisel peate installima sihtarhitektuuri jaoks standardse komplekti GCC, GNU Make ja GNU C Library päisefaile (minu jaoks armhf), samuti OpenSSL-i päised, konsoolikalkulaator bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Kuna vaikelaadur otsib faili zImage alglaadimispartitsiooni failisüsteemis on aeg mälupulk poolitada.

  1. Kerneli kloonimine võtab liiga kaua aega, nii et laadin lihtsalt alla: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Pakime lahti ja läheme allikatega kataloogi: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Seadistage enne kompileerimist: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguratsioon asub kataloogis arch/arm/configs/. Kui seda pole, võite proovida valmis faili otsida ja alla laadida ning anda parameetrina selles kataloogis oleva faili nimi KBUILD_DEFCONFIG. Viimase abinõuna liikuge kohe järgmise punkti juurde.
  3. Valikuliselt saate sätteid muuta: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ja kompileerige pilt: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nüüd saate kerneli faili kopeerida: cp arch/arm/boot/zImage /mnt/boot/
  6. Ja DeviceTree failid (riistvara kirjeldus tahvlil): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ja installige eraldi failidena kogutud moodulid: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernel on valmis. Saate kõik lahti ühendada: umount /mnt/boot/ /mnt/

Das U-Boot

Kuna alglaadur on interaktiivne, on selle toimimise testimiseks vaja ainult plaati ennast, salvestusseadet ja valikuliselt USB-UART-seadet. See tähendab, et saate tuuma ja OS-i hilisemaks edasi lükata.

Valdav enamus tootjaid pakub esmaseks käivitamiseks kasutada Das U-Booti. Tavaliselt pakutakse täielikku tuge nende enda hargis, kuid nad ei unusta panustada ülesvoolu. Minu puhul on tahvel sisse toetatud põhiliinNii kahvel Ma ignoreerisin seda.

Paneme alglaaduri ise kokku:

  1. Kloonime hoidla stabiilse haru: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Läheme kataloogi enda juurde: cd u-boot
  3. Ehituskonfiguratsiooni ettevalmistamine: make mx6ull_14x14_evk_defconfig. See töötab ainult siis, kui konfiguratsioon on Das U-Boot'is endas, vastasel juhul peate leidma tootja konfiguratsiooni ja panema selle failis hoidla juure .configvõi kokku panna muul tootja soovitatud viisil.
  4. Bootloaderi pildi ise koostame ristkompilaatori abil armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Selle tulemusena saame faili u-boot.imx, see on valmis pilt, mida saab kirjutada mälupulgale. Kirjutame SD-kaardile, jättes vahele esimesed 1024 baiti. Miks ma valisin Targeti? u-boot.imx? Miks jäi mul täpselt 1024 baiti vahele? See on see, mida nad kavatsevad teha dokumentatsioon. Teiste tahvlite puhul võib pildi loomise ja salvestamise protsess veidi erineda.

Valmis, saate käivitada. Alglaadur peab teatama oma versioonist, osa teabest plaadi kohta ja proovima leida partitsioonilt kerneli kujutist. Kui see ebaõnnestub, proovib see käivitada võrgu kaudu. Üldiselt on väljund üsna detailne, vea leiab, kui on probleem.

Selle asemel, et järeldus

Kas teadsite, et delfiini otsaesine ei ole kondine? See on sõna otseses mõttes kolmas silm, rasvane lääts kajalokatsiooni jaoks!

GNU/Linuxi käivitamine ARM-plaadil nullist (kasutades näiteks Kali ja iMX.6)

GNU/Linuxi käivitamine ARM-plaadil nullist (kasutades näiteks Kali ja iMX.6)

Allikas: www.habr.com