tl; dr: Gradim Kali Linux sliku 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
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
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
/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. - 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 na operativnim sustavima sličnim Debianu: 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--include
navodi da se dodatno instaliraju neki paketi, specificirao sam statički izgrađen QEMU emulator. Omogućuje vam izvođenjechroot
u 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
debootstrap
izvodi 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/hostname
ciljani 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
root
Timpasswd
. - 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.
- 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
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
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