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

tl;: Pravim Kali Linux sliku za ARM računar, 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š popularan softver za jednu ploču, možda ćete se suočiti s nedostatkom slike vaše omiljene distribucije za njega. Otprilike ista stvar se desila i sa planirani Flipper One. Kali Linuxa za IMX6 jednostavno nema (pripremam), 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) se čita i izvršava bootloader.
  3. Bootloader traži kernel operativnog sistema i učitava ga u neko memorijsko područje i izvršava ga.
  4. Kernel učitava ostatak OS-a.

Ovaj nivo detalja je dovoljan za moj zadatak, možete pročitati detalje u drugom članku. Gore navedene „neke“ oblasti se razlikuju od ploče do ploče, što stvara određene poteškoće u instalaciji. Učitavanje ARM serverskih platformi pokušava standardizovati koristeći UEFI, ali iako ovo nije dostupno svima, morat ćete sve sastaviti zasebno.

Izgradnja korijenskog sistema datoteka

Prvo morate pripremiti sekcije. Das U-Boot podržava različite sisteme datoteka, ja sam izabrao FAT32 za /boot i ext3 za root, ovo je standardni raspored slike za Kali na ARM-u. Koristiću GNU Parted, ali vi možete učiniti isto na poznatiji način fdisk. Takođe će vam trebati dosfstools и e2fsprogs da kreirate sistem datoteka: apt install parted dosfstools e2fsprogs.

Označavamo SD karticu:

  1. Označite SD karticu da koristi MBR particioniranje: parted -s /dev/mmcblk0 mklabel msdos
  2. Kreirajte odjeljak ispod /boot za 128 megabajta: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Prvi propušteni megabajt mora se ostaviti za samu oznaku i za bootloader.
  3. Kreiramo root sistem datoteka za cijeli preostali kapacitet: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ako odjednom fajlovi vaše particije nisu kreirani ili se nisu promijenili, trebate pokrenuti `partprobe`, tada će se tabela particija ponovo pročitati.
  5. Kreirajte sistem datoteka za particiju za pokretanje sa oznakom BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Kreirajte korijenski sistem datoteka s oznakom ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Odlično, sada možete popuniti. Za ovo će vam dodatno trebati debootstrap, uslužni program za kreiranje root datotečnih sustava za operativne sustave slične Debianu: apt install debootstrap.

Prikupljamo FS:

  1. Montirajte particiju /mnt/ (koristite pogodniju tačku za montiranje): mount /dev/mmcblk0p2 /mnt
  2. Mi zapravo popunjavamo sistem datoteka: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametar --include ukazuje na dodatnu instalaciju nekih paketa, naveo sam statički izgrađen QEMU emulator. Omogućava vam izvođenje chroot u ARM okruženju. Značenje preostalih opcija može se pronaći u man debootstrap. Ne zaboravite da svaka ARM ploča ne podržava arhitekturu armhf.
  3. Zbog razlike u arhitekturi debootstrap se izvodi u dvije faze, druga se izvodi ovako: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Sada treba da zeznete: chroot /mnt /bin/bash
  5. Mi popunjavamo /etc/hosts и /etc/hostname ciljni FS. Popunite isto kao i sadržaj na vašem lokalnom računalu, samo ne zaboravite zamijeniti ime hosta.
  6. Sve ostalo možete prilagoditi. Posebno instaliram locales (ključevi spremišta), rekonfigurirati lokalizaciju i vremensku zonu (dpkg-reconfigure locales tzdata). Ne zaboravite da postavite lozinku pomoću naredbe passwd.
  7. Postavite lozinku za root tim passwd.
  8. Priprema slike za mene se završava punjenjem /etc/fstab unutar /mnt/.

Uploadat ću u skladu sa prethodno kreiranim oznakama, tako da će sadržaj biti ovakav:

LABEL=ROOTFS / automatske greške=remount-ro 0 1
LABEL=BOOT /automatsko pokretanje 0 0

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

Linux build

Da biste izgradili kernel (a zatim i bootloader) na Debian Testingu, trebate instalirati standardni set datoteka zaglavlja GCC, GNU Make i GNU C biblioteke za ciljnu arhitekturu (za mene armhf), kao i OpenSSL zaglavlja, konzolni kalkulator bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Pošto podrazumevani loader traži datoteku zImage na sistemu datoteka particije za pokretanje, vrijeme je da podijelite fleš disk.

  1. Predugo je potrebno za kloniranje kernela, pa ću samo preuzeti: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Raspakiramo i idemo u izvorni direktorij: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfigurirajte prije kompilacije: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguracija se nalazi u direktoriju arch/arm/configs/. Ako ga nema, možete pokušati pronaći i preuzeti gotovu i proslijediti ime datoteke u ovom direktoriju kao parametar KBUILD_DEFCONFIG. U krajnjem slučaju, odmah pređite na sljedeću tačku.
  3. Opciono 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 fajl: cp arch/arm/boot/zImage /mnt/boot/
  6. I fajlovi sa DeviceTree (opis hardvera na ploči): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. I instalirajte module prikupljene u obliku zasebnih datoteka: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Kernel je spreman. Sve možete demontirati: umount /mnt/boot/ /mnt/

Das U-Boot

Pošto je bootloader interaktivan, sve što trebate da testirate njegov rad je sama ploča, uređaj za skladištenje i opciono USB-to-UART uređaj. To jest, kernel i OS možete odložiti za kasnije.

Velika većina proizvođača nudi korištenje Das U-Boot za početno pokretanje. Potpuna podrška se obično pruža u njihovoj vlastitoj vilici, ali ne zaboravljaju da doprinesu uzvodnoj. U mom slučaju, ploča je podržana mainline, tako viljuška Ignorirao sam to.

Hajde da sastavimo sam bootloader:

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

Kao rezultat dobijamo fajl u-boot.imx, ovo je gotova slika koja se može upisati na fleš disk. Pišemo na SD karticu, preskačući prvih 1024 bajta. Zašto sam izabrao Target u-boot.imx? Zašto sam propustio tačno 1024 bajta? To je ono što oni predlažu da urade dokumentaciju. Za druge ploče, proces izgradnje slike i snimanja može biti malo drugačiji.

Gotovo, možete pokrenuti. Bootloader mora prijaviti svoju 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 grešku ako postoji problem.

Umjesto zaključka

Da li ste znali da čelo delfina nije koščato? To je bukvalno treće oko, masno sočivo 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