Zavodim GNU/Linux ARM-plaatide peal nullist (näiteks Kali ja iMX.6)

tl;dr: kogun Kali Linux'i pildi ARM-arvutile, programmiga debootstrap, linux ja u-boot.

Zavodim GNU/Linux ARM-plaatide peal nullist (näiteks Kali ja iMX.6)

Kui olete ostnud mõne mitte väga populaarses olnud üheplaadi arvuti, siis võisite kokku puutuda lemmikjaotuse pildifaili puudumisega. Umbes sama juhtus ka planeeritud Flipper One'iga. Kali Linux'i IMX6 jaoks lihtsalt ei eksisteeri (ma valmistan), seega tuleb kõik ise kokku panna.

Käivitamisprotsess on piisavalt lihtne:

  1. Riistvara initsialiseeritakse.
  2. Mõnest piirkonnast andmekaardilt (SD-kaart/eMMC/jne) loetakse ja käivitatakse bootloader.
  3. Bootloader otsib operatsioonisüsteemi kernelit ja laadib selle mällu ning käivitab.
  4. Kernel laadib ülejäänud operatsioonisüsteemi.

Minu ülesande jaoks piisab sellisest detailsuse tasemest, üksikasju võite lugeda teises artiklis.. Üksikasjad, mida mainisin, erinevad plaadilt plaadile, mis tekitab mingeid raskusi paigaldamisel. Serverite ARM-platvormide standardiseerimiseks kasutatakse UEFI't, kuid kuna see pole veel kõikjal saadaval, tuleb kõik eraldi kokku panna.

Juurtaseme failisüsteemi kokkupanek

Esiteks tuleb partitsioonid ette valmistada. Das U-Boot toetab erinevaid FS-e, valisin FAT32 /boot ja ext3 juure jaoks, see on Kali jaoks ARM-i standardne partitsioonide jagamine. Kasutan GNU Parted'i, kuid saate teha sama ka mugavama fdiskabil. Samuti on vaja dosfstools'e ja e2fsprogs failisüsteemi loomiseks: apt install parted dosfstools e2fsprogs.

Partitsioneerime SD-kaardi:

  1. Määrame SD-kaardi kasutama MBR-partitsioonimist: parted -s /dev/mmcblk0 mklabel msdos
  2. Loome partitsiooni /boot mahus 128 megabaiti: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Esimene vahele jäetud megabait tuleb jätta partitsioneeringu ja bootloaderi jaoks.
  3. Loome juurtaseme FS kogu ülejäänud mahus: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Kui teil ei olnud partitsioonide faile loodud või muudetud, peate käivitama `partprobe`, et partitsioonide tabel loetaks uuesti.
  5. Loome bootimise partitsiooni failisüsteemi sildi BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Loome juurtaseme failisüsteemi sildiga ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Suurepärane, nüüd saab seda täita. Selleks on vajalik debootstrap, utiliit Debian-tüüpi operatsioonisüsteemide juurtaseme failisüsteemide loomiseks: apt install debootstrap.

Kogume FS:

  1. Mountige partitsioon /mnt/ (kasutage mugavamat mountimise punkti): mount /dev/mmcblk0p2 /mnt
  2. Täidame failisüsteemi: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameeter --include näitab täiendavate pakettide installimist, ma määrasin staatiliselt koostatud QEMU emulaatori. See võimaldab kasutada chroot ARM-ökonoomsuses. Ülejäänud valikute tähendust saab vaadata man debootstrap. Ärge unustage, et mitte iga ARM-platvorm ei toeta arhitektuuri armhf.
  3. Arhitektuuride erinevuse tõttu debootstrap teostatakse kahes etapis, teine etapp toimub nii: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nüüd tuleb sisse minna: chroot /mnt /bin/bash
  5. Täidame /etc/hosts ja /etc/hostname sihtfailisüsteemi. Täitke sarnaselt oma kohaliku arvuti sisuga, ärge unustage vaid muuta hostinime.
  6. Kõike muud saab veel häälestada. Eelkõige installin ma lisaks locales (hoidla võtmed), sätin kohalikke seadeid ja ajavööndit (dpkg-reconfigure locales tzdata). Ärge unustage määrata parool käsklusega passwd.
  7. Määrame parooli root käsklusega passwd.
  8. Kuvandi ettevalmistamine lõpeb minu jaoks täitmisega /etc/fstab sees /mnt/.

Laen üles vastavalt eelnevalt loodud märkidele, seega sisu on järgmine:

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

Lõpuks saame monteerida käivituspartitsiooni, seda on meil vajaminev, et käivitusprogramm oleks: `mount /dev/mmcblk0p1 /mnt/boot/`

Linuxi koostamine

Kuna käivitusprogrammi ja tuuma (ja hiljem) koostamiseks Debian Testingus tuleb installida standardne komplekt GCC-st, GNU Make'ist ja GNU C Library peadest sihtarhitektuurile (minu puhul armhf), samuti OpenSSL päised, konsoolikasutaja kalkulaator bc, bison ja flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Kuna käivitusprogramm otsib vaikimisi faili zImage käivituspartitsiooni failisüsteemis, on aeg flash-disk jagada.

  1. Tuuma kloonimine on liiga aeganõudev, seega laadige lihtsalt alla: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Väljastame ja liikume allikakausta: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigureerime enne koostamist: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguratsioon asub kaustas arch/arm/configs/. Kui seda pole, võite proovida leida ja alla laadida ning anda faili nime selle kausta parameeter KBUILD_DEFCONFIG. Ükskõik, kuidas, minema järgmisse punkti.
  3. Valikuline on seadetega toimetada: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ja ristsuundime pildi: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nüüd saab kopeerida tuumafaili: cp arch/arm/boot/zImage /mnt/boot/
  6. Ja failid DeviceTree'ist (olemasoleva riistvara kirjeldus): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ja installige eraldi failidena koostatavad moodulid: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Tuuma on valmis. Kõike võib lahti monteerida: umount /mnt/boot/ /mnt/

Das U-Boot

Kuna laadija on interaktiivne, piisab selle töö kontrollimiseks ainult emaplaadist, mäluseadmest ja valikuliselt USB-to-UART seadmest. Ehk siis, tuuma ja opsüsteemi saab jätta hilisemaks.

Enamik tootjatest soovitab kasutada Das U-Boot'i esialgseks käivitamiseks. Täielik tugi on tavaliselt saadaval enda forks, kuid ka upstream pole unustatud panustada. Minu juhtumi puhul on plaat toetatud peavoolus, seega fork ma ignoreerisin.

Kogume laadija kokku:

  1. Kloonime stabiilse haru hoidlasse: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Liigume hoidlasse: cd u-boot
  3. Valmistame ülesehituse konfiguratsiooni: make mx6ull_14x14_evk_defconfig. See töötab ainult siis, kui konfiguratsioon on Das U-Boot'is olemas, vastasel juhul peate leidma tootja konfi ja panema selle hoidla juurkatalooge faili .config, või koguma muul soovitatud tootja meetodil.
  4. Kogume laadija pildi ristkompileerijaga armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Tulemuseks on fail u-boot.imx, see on valmis pilt, mille saab kirjutada mälupulgale. Salvestame SD-kaardile, jättes välja esimesed 1024 baiti. Miks ma valisin sihtkoha u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в dokumentatsioon. Teiste plaatide puhul võib pildiks kogumise ja kirjutamise protsess veidi erineda.

Valmis, nüüd saab sisse laadida. Laadija peaks teatama enda versioonist, mõnest teabest plaadi kohta ja proovima leida tuumapilti partitsioonilt. Ebaõnnestumise korral üritab see laadida võrgu kaudu. Üldiselt on väljastus üsna üksikasjalik, vigade leidmiseks on võimalik neid leida.

Lõpetuseks

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

Zavodim GNU/Linux ARM-plaatide peal nullist (näiteks Kali ja iMX.6)

Zavodim GNU/Linux ARM-plaatide peal nullist (näiteks Kali ja iMX.6)

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster