tl;: Pravim Kali Linux sliku za ARM računar, u programu debootstrap
, linux
и u-boot
.
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
Proces preuzimanja je prilično jednostavan:
- Hardver je inicijaliziran.
- Iz nekog područja na uređaju za pohranu (SD kartica/eMMC/itd) se čita i izvršava bootloader.
- Bootloader traži kernel operativnog sistema i učitava ga u neko memorijsko područje i izvršava ga.
- Kernel učitava ostatak OS-a.
Ovaj nivo detalja je dovoljan za moj zadatak, možete pročitati detalje
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:
- Označite SD karticu da koristi MBR particioniranje:
parted -s /dev/mmcblk0 mklabel msdos
- 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. - Kreiramo root sistem datoteka za cijeli preostali kapacitet:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Ako odjednom fajlovi vaše particije nisu kreirani ili se nisu promijenili, trebate pokrenuti `partprobe`, tada će se tabela particija ponovo pročitati.
- Kreirajte sistem datoteka za particiju za pokretanje sa oznakom
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- 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:
- Montirajte particiju
/mnt/
(koristite pogodniju tačku za montiranje):mount /dev/mmcblk0p2 /mnt
- 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đenjechroot
u ARM okruženju. Značenje preostalih opcija može se pronaći uman debootstrap
. Ne zaboravite da svaka ARM ploča ne podržava arhitekturuarmhf
. - Zbog razlike u arhitekturi
debootstrap
se izvodi u dvije faze, druga se izvodi ovako:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Sada treba da zeznete:
chroot /mnt /bin/bash
- 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. - 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 naredbepasswd
. - Postavite lozinku za
root
timpasswd
. - 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.
- 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
- Konfigurirajte prije kompilacije:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfiguracija se nalazi u direktorijuarch/arm/configs/
. Ako ga nema, možete pokušati pronaći i preuzeti gotovu i proslijediti ime datoteke u ovom direktoriju kao parametarKBUILD_DEFCONFIG
. U krajnjem slučaju, odmah pređite na sljedeću tačku. - Opciono 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 fajl:
cp arch/arm/boot/zImage /mnt/boot/
- I fajlovi sa DeviceTree (opis hardvera na ploči):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- 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
Hajde da sastavimo sam bootloader:
- Kloniramo stabilnu granu spremišta:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Idemo na sam direktorij:
cd u-boot
- 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. - 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
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!
izvor: www.habr.com