Hakkame GNU/Linuxit ARM-plaadil nullist käivitama (Kali ja iMX.6 näitel)

tl;dr: kogun Kali Linuxi pilti ARM-arvutit, kasutades programmi debootstrap, linux ja u-boot.

Hakkame GNU/Linuxit ARM-plaadil nullist käivitama (Kali ja iMX.6 näitel)

Kui olete ostnud mõne mitte väga populaarse üheplaadi arvuti, olete tõenäoliselt kokku puutunud sellega, et lemmikdistributsioonile pole pilti. Umbes sama toimus ka plaanitud Flipper One. Kali Linuxi IMX6 jaoks lihtsalt ei ole (ma valmistan seda), seega pean selle ise kokku panema.

Laadimisprotsess on piisavalt lihtne:

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

Minu ülesande jaoks piisab sellisest detailitasemest, täiendavaid üksikasju võite lugeda teises artiklis. Ülalmainitud "teatud" piirkonnad erinevad plaadilt plaadile, mis tekitab mõned paigaldamisega seotud raskused. Serverite ARM-platvormide laadimist üritatakse standardiseerida UEFI abil, kuid kuna see pole veel kõikidele saadaval, tuleb kõik eraldi kokku panna.

Kasutaja failisüsteemi kokku panemine

Alustamiseks tuleb osad ette valmistada. Das U-Boot toetab erinevaid failisüsteeme, valisin FAT32 ja /boot ext3 juurena, see on standardne partitsioonide jaotus Kali jaoks ARM-i all. Kasutan GNU Parted'i, kuid saate teha sama tuttavama fdisk. Samuti on vajalikud dosfstools ja e2fsprogs failisüsteemide loomiseks: apt install parted dosfstools e2fsprogs.

Partitsioneerime SD-kaardi:

  1. Märgistame SD-kaardi MBR-partitsiooniga: parted -s /dev/mmcblk0 mklabel msdos
  2. Loome partitsiooni /boot 128 megabaidi peale: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Esimene vahele jäetud megabait tuleb jätta partitsiooni ja laadija jaoks.
  3. Loome juurfailisüsteemi kogu ülejäänud mahule: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Kui teie osade failid ei loonud või ei muutunud, tuleb käivitada `partprobe`, siis loetakse partitsioonide tabel uuesti.
  5. Loome käivitamispartitsiooni failisüsteemi märgisega BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Loome juurfailisüsteemi märgisega ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Suurepärane, nüüd saab seda täita. Selleks on lisaks vajalik debootstrap, utiliit Debian-põhiste operatsioonisüsteemide juurfailisüsteemide loomiseks: apt install debootstrap.

Kogume failisüsteemi:

  1. Kandke partitsioon punkti /mnt/ (kasutage endale mugavamat paigalduspunkti): mount /dev/mmcblk0p2 /mnt
  2. Hakkame failisüsteemi täitma: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameeter --include näitab, et tuleb lisada mõned paketid, ma märkisin staatiliselt ehitatud QEMU emulaatori. See võimaldab käivitada chroot ARM-keskkonnas. Ülejäänud valikute tähendust saab vaadata man debootstrap. Ärge unustage, et mitte iga ARM-plaadiga ei toeta arhitektuuri armhf.
  3. Arhitektuuride erinevuste tõttu debootstrap toimub see kahes etapis, teine etapp viiakse läbi nii: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nüüd peame chrootima: chroot /mnt /bin/bash
  5. Täidame /etc/hosts ja /etc/hostname sihtfailisüsteemi. Täitke sarnaselt oma lokaalse arvuti sisu, ärge unustage ainult hostinime vahetada.
  6. Saame muuta ülejäänud seadeid. Täpsemalt paigaldan ma locales (repository võtmed), seadistan uuesti lokaalid ja ajavööndi (dpkg-reconfigure locales tzdata). Ärge unustage määrata parool käsku passwd.
  7. Määrame parooli root käsku passwd.
  8. Pildi valmistamine lõpeb minu jaoks täitmisega /etc/fstab sisemine /mnt/.

Laadin üles vastavalt varem loodud siltidele, seega sisu on järgmine:

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

Lõpuks saame mountida käivitamisosa, seda on meil kerneliks vaja: `mount /dev/mmcblk0p1 /mnt/boot/`

Linuxi koostamine

Kernel'i (ja seejärel laadija) koostamiseks Debian Testingus tuleb installida standardkomplekt GCC-st, GNU Make'ist ja GNU C Library pealdisfailidest sihtarchitectuurile (mul on armhf), samuti OpenSSL pealdised ja konsooli kalkulaator bc, bison ja flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Kuna laadija otsib vaikimisi faili zImage käivitamisosa failisüsteemist, on aeg jagada mälupulk.

  1. Kerneli kloonimine võtaks liiga kaua, seega lasen lihtsalt alla: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Lahti pakkime ja liigume allika kausta: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigureerime enne kompileerimist: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguratsioon asub kataloogis arch/arm/configs/. Kui seda ei ole, võite proovida leida ja alla laadida valmis ja edastada faili nime selle katalooge parameetriks KBUILD_DEFCONFIG. Äärmuslikul juhul minge kohe järgmisse punkti.
  3. Valikuliselt saate seadeid kohandada: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Ja cross-kompileerime pildi: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nüüd saab kopeerida kernelfaili: cp arch/arm/boot/zImage /mnt/boot/
  6. Ja seadme puu failid (olemas oleva riistvara kirjeldus): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Ja installige eraldi failidena koostatud moodulid: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kern on valmis. Võib kõik lahti monteerida: umount /mnt/boot/ /mnt/

Das U-Boot

Kuna laadija on interaktiivne, piisab tema töö kontrollimiseks lihtsalt plaadist, salvestusseadmest ja valikulisest USB-to-UART seadmest. See tähendab, et võite tuuma ja operatsioonisüsteemi jätta hilisemaks.

Enamik tootjatest pakub Das U-Booti kasutamiseks alglaadimiseks. Täielikku tuge pakutakse tavaliselt oma fork'is, kuid ülesvoolu katkestada ei unustata. Minu puhul toetatakse plaati peavoolus, seega forki ma ignoreerisin.

Koostame laadija ise:

  1. Kloonime stabiilse haru hoidlast: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Liigume otse kausta: cd u-boot
  3. Valmistame koostamiseks konfiguratsiooni: make mx6ull_14x14_evk_defconfig. See töötab ainult siis, kui konfiguratsioon on Das U-Booti sees, vastasel juhul peate leidma tootja konfi ja panema selle oma repo juurese faili. .config, või koguda muul tootjalt soovitatud viisil.
  4. Kogume laadurite kujutise ristkompilaatori abil. armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Sellega saame faili u-boot.imx, see on valmis kuvand, mille saab salvestada mälupulgale. Salvestame SD-kaardile, mööda minnes esimestest 1024 baitidest. Miks ma valisin sihtmärgi u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в dokumentatsioonis. Muude plaatide puhul võib pildi koostamise ja salvestamise protsess veidi erineda.

Valmis, nüüd saab käivitada. Laadur peaks teatama oma versioonist, teatud teavet plaadi kohta ja proovima leida tuuma kuvandit jaotises. Edasi lähenedes proovitakse käivitada võrgust. Üldiselt on väljund üsna detailne, saate probleemi korral leida vea.

Kokkuvõtte asemel

Kas te teadsite, et delfiini ots ei ole luustikuline? See on sõna-sõnalt kolmas silm, rasva lääts ehholokatsiooni jaoks!

Hakkame GNU/Linuxit ARM-plaadil nullist käivitama (Kali ja iMX.6 näitel)

Hakkame GNU/Linuxit ARM-plaadil nullist käivitama (Kali ja iMX.6 näitel)

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster