Pokretanje GNU/Linuxa na ARM ploči od nule (koristeći Kali i iMX.6 kao primjer)

tl; dr: Gradim Kali Linux sliku za ARM računalo, u programu debootstrap, linux и u-boot.

Pokretanje GNU/Linuxa na ARM ploči od nule (koristeći Kali i iMX.6 kao primjer)

Ako ste kupili neki ne baš popularni single-payer, mogli biste naići na nedostatak slike vašeg omiljenog distribucijskog kompleta za njega. Otprilike se ista stvar dogodila planirani Flipper One. Jednostavno nema Kali Linuxa za IMX6 (kuham) pa ga moram sam sastaviti.

Proces preuzimanja je prilično jednostavan:

  1. Hardver je inicijaliziran.
  2. Iz nekog područja na uređaju za pohranu (SD kartica/eMMC/itd.) čita se i izvršava bootloader.
  3. Učitavač traži jezgru operativnog sustava i učitava je u neko memorijsko područje te je izvršava.
  4. Kernel učitava ostatak OS-a.

Za moj zadatak, ova razina detalja je dovoljna, možete pročitati detalje u drugom članku. Gore navedena "neka" područja razlikuju se od ploče do ploče, što stvara određene poteškoće pri instalaciji. Učitavanje poslužiteljskih ARM platformi pokušavajući standardizirati koristeći UEFI, ali dokle god nije dostupan svima, morat ćete skupljati sve zasebno.

Izgradnja korijenskog datotečnog sustava

Prvo morate pripremiti odjeljke. Das U-Boot podržava različite datotečne sustave, za koje sam odabrao FAT32 /boot i ext3 za root, ovo je standardna oznaka slike za Kali pod ARM-om. Koristit ću GNU Parted, ali vi ga možete učiniti poznatijim fdisk. Također ćete trebati dosfstools и e2fsprogs za stvaranje datotečnog sustava: apt install parted dosfstools e2fsprogs.

Particioniranje SD kartice:

  1. Označite da SD kartica koristi MBR particioniranje: parted -s /dev/mmcblk0 mklabel msdos
  2. Napravite odjeljak za /boot za 128 megabajta: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Prvi propušteni megabajt mora se ostaviti za samo označavanje i za bootloader.
  3. Stvorite root FS za ostatak kapaciteta: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ako iznenada niste stvorili ili promijenili particijske datoteke, trebate izvršiti `partprobe`, tada će particijska tablica biti ponovno pročitana.
  5. Stvorite datotečni sustav particije za pokretanje s oznakom BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Stvorite korijenski datotečni sustav s oznakom ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Odlično, sada ga možete ispuniti. Ovo će dodatno zahtijevati debootstrap, uslužni program za stvaranje root FS-a na operativnim sustavima sličnim Debianu: apt install debootstrap.

Prikupljamo FS:

  1. Montirajte particiju na /mnt/ (koristite prikladniju točku montiranja za sebe): mount /dev/mmcblk0p2 /mnt
  2. Zapravo popunjavamo datotečni sustav: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametar --include navodi da se dodatno instaliraju neki paketi, specificirao sam statički izgrađen QEMU emulator. Omogućuje vam izvođenje chroot u ARM okruženje. Značenje ostalih opcija možete pronaći u man debootstrap. Ne zaboravite da svaka ARM ploča ne podržava arhitekturu armhf.
  3. Zbog razlike u arhitekturama debootstrap izvodi se u dvije faze, druga se izvodi na sljedeći način: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Sada morate vrtjeti: chroot /mnt /bin/bash
  5. Ispunjavamo /etc/hosts и /etc/hostname ciljani FS. Ispunite isto kao i sadržaj na vašem lokalnom računalu, ne zaboravite zamijeniti samo naziv glavnog računala.
  6. Sve ostalo možete prilagoditi. Konkretno, instaliram locales (ključevi spremišta), rekonfiguracija lokaliteta i vremenske zone (dpkg-reconfigure locales tzdata). Ne zaboravite postaviti lozinku s naredbom passwd.
  7. Postavite lozinku za root Tim passwd.
  8. Priprema slike za mene je završena punjenjem /etc/fstab u /mnt/.

Učitat ću u skladu s ranije kreiranim oznakama, tako da će sadržaj biti ovakav:

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

Konačno, možete montirati boot particiju, trebat će nam za kernel: `mount /dev/mmcblk0p1 /mnt/boot/`

Izgradnja Linuxa

Da biste izgradili kernel (a potom i bootloader) na Debian Testingu, trebate instalirati standardni skup GCC, GNU Make i datoteka zaglavlja GNU C knjižnice za ciljnu arhitekturu (imam armhf), kao i OpenSSL zaglavlja, konzolni kalkulator bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Budući da zadani učitavač traži datoteku zImage na datotečnom sustavu particije za pokretanje, vrijeme je za razbijanje flash pogona.

  1. Kloniranje kernela je predugo, pa ću samo preuzeti: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Raspakirajte i idite u izvorni direktorij: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigurirajte prije kompajliranja: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguracija je u direktoriju arch/arm/configs/. Ako nema nijedne, možete pokušati pronaći i preuzeti gotovu i proslijediti naziv datoteke u ovom direktoriju parametru KBUILD_DEFCONFIG. U ekstremnim slučajevima, odmah prijeđite na sljedeći odlomak.
  3. Po želji možete podesiti postavke: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. I unakrsno kompajlirajte sliku: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Sada možete kopirati kernel datoteku: cp arch/arm/boot/zImage /mnt/boot/
  6. I datoteke iz DeviceTree (opis hardvera dostupnog na ploči): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. I instalirajte module sastavljene kao zasebne datoteke: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernel je spreman. Možete demontirati sve: umount /mnt/boot/ /mnt/

Das U Boot

Budući da je bootloader interaktivan, sama ploča, uređaj za pohranu i dodatni USB-to-UART uređaj dovoljni su za testiranje njegovog rada. Odnosno, možete odgoditi kernel i OS za kasnije.

Velika većina proizvođača predlaže korištenje Das U-Boota za primarno pokretanje. Potpuna podrška obično se pruža u vlastitom forku, ali ne zaboravite dati svoj doprinos u uzvodnom. U mom slučaju, ploča je podržana glavna linija, dakle vilica ignorirao sam.

Sakupljamo sam bootloader:

  1. Klonirajte stabilnu granu repozitorija: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Idemo na sam imenik: cd u-boot
  3. Priprema konfiguracije izgradnje: make mx6ull_14x14_evk_defconfig. Ovo funkcionira samo ako je konfiguracija u samom Das U-Bootu, inače ćete morati pronaći konfiguraciju proizvođača i staviti je u korijen spremišta u datoteci .config, ili sastavljen na drugi način preporučen od strane proizvođača.
  4. Sakupljamo samu sliku bootloadera pomoću unakrsnog kompajlera armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Kao rezultat, dobivamo datoteku u-boot.imx, ovo je gotova slika koja se može zapisati na USB flash pogon. Zapisujemo na SD karticu, preskačući prva 1024 bajta. Zašto sam odabrao cilj u-boot.imx? Zašto ste propustili točno 1024 bajta? To je ono što oni predlažu učiniti u dokumentacija. Za druge ploče, proces izgradnje slike i snimanja može biti malo drugačiji.

Gotovo, možete preuzeti. Bootloader bi trebao prijaviti vlastitu verziju, neke informacije o ploči i pokušati pronaći sliku kernela na particiji. Ako ne uspije, pokušat će se pokrenuti preko mreže. Općenito, izlaz je prilično detaljan, možete pronaći pogrešku u slučaju problema.

Umjesto zaključka

Jeste li znali da čelo delfina nije koščato? To je doslovno treće oko, masna leća za eholokaciju!

Pokretanje GNU/Linuxa na ARM ploči od nule (koristeći Kali i iMX.6 kao primjer)

Pokretanje GNU/Linuxa na ARM ploči od nule (koristeći Kali i iMX.6 kao primjer)

Izvor: www.habr.com