tl; dr: izgradnja Kali slike Linux za ARM računalo, u programu debootstrap, linux и u-boot.
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 Kali Linux Jednostavno nema nikoga za IMX6 (pripremam jednog), pa ga moram sam sastaviti.
Proces preuzimanja je prilično jednostavan:
- Hardver je inicijaliziran.
- Iz nekog područja na uređaju za pohranu (SD kartica/eMMC/itd.) čita se i izvršava bootloader.
- Učitavač traži jezgru operativnog sustava i učitava je u neko memorijsko područje te je izvršava.
- Kernel učitava ostatak OS-a.
Za moj zadatak, ova razina detalja je dovoljna, možete pročitati detalje . 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 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:
- Označite da SD kartica koristi MBR particioniranje:
parted -s /dev/mmcblk0 mklabel msdos - Napravite odjeljak za
/bootza 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. - Stvorite root FS za ostatak kapaciteta:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Ako iznenada niste stvorili ili promijenili particijske datoteke, trebate izvršiti `partprobe`, tada će particijska tablica biti ponovno pročitana.
- Stvorite datotečni sustav particije za pokretanje s oznakom
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - 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 Debian- slični operativni sustavi: apt install debootstrap.
Prikupljamo FS:
- Montirajte particiju na
/mnt/(koristite prikladniju točku montiranja za sebe):mount /dev/mmcblk0p2 /mnt - Zapravo popunjavamo datotečni sustav:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametar--includenavodi da se dodatno instaliraju neki paketi, specificirao sam statički izgrađen QEMU emulator. Omogućuje vam izvođenjechrootu ARM okruženje. Značenje ostalih opcija možete pronaći uman debootstrap. Ne zaboravite da svaka ARM ploča ne podržava arhitekturuarmhf. - Zbog razlike u arhitekturama
debootstrapizvodi se u dvije faze, druga se izvodi na sljedeći način:chroot /mnt/ /debootstrap/debootstrap --second-stage - Sada morate vrtjeti:
chroot /mnt /bin/bash - Ispunjavamo
/etc/hostsи/etc/hostnameciljani FS. Ispunite isto kao i sadržaj na vašem lokalnom računalu, ne zaboravite zamijeniti samo naziv glavnog računala. - 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 naredbompasswd. - Postavite lozinku za
rootTimpasswd. - Priprema slike za mene je završena punjenjem
/etc/fstabu/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/`
zbor Linux
Za izgradnju kernela (i bootloadera kasnije) na Debian Testiranje zahtijeva instaliranje standardnog skupa GCC, GNU Make i GNU C Library zaglavnih datoteka 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.
- 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 - Konfigurirajte prije kompajliranja:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguracija je u direktorijuarch/arm/configs/. Ako nema nijedne, možete pokušati pronaći i preuzeti gotovu i proslijediti naziv datoteke u ovom direktoriju parametruKBUILD_DEFCONFIG. U ekstremnim slučajevima, odmah prijeđite na sljedeći odlomak. - Po želji možete podesiti postavke:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - I unakrsno kompajlirajte sliku:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Sada možete kopirati kernel datoteku:
cp arch/arm/boot/zImage /mnt/boot/ - I datoteke iz DeviceTree (opis hardvera dostupnog na ploči):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - 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 , dakle ignorirao sam.
Sakupljamo sam bootloader:
- Klonirajte stabilnu granu repozitorija:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Idemo na sam imenik:
cd u-boot - 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. - 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 . 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!
Izvor: www.habr.com
