tl; dr: Jeg bygger et Kali Linux-image til en ARM-computer i programmet debootstrap
, linux
и u-boot
.
Hvis du har købt en ikke særlig populær enkeltbetaler, kan du støde på manglen på et billede af dit foretrukne distributionssæt til det. Der skete stort set det samme
Downloadprocessen er ret enkel:
- Hardware er initialiseret.
- Fra et eller andet område på lagerenheden (SD-kort/eMMC/etc) læses og udføres bootloaderen.
- Indlæseren leder efter kernen i operativsystemet og indlæser den i et eller andet hukommelsesområde og udfører den.
- Kernen indlæser resten af OS.
Til min opgave er dette detaljeringsniveau nok, du kan læse detaljerne
Opbygning af rodfilsystemet
Først skal du forberede sektioner. Das U-Boot understøtter forskellige filsystemer, jeg valgte FAT32 til /boot
og ext3 for root, dette er standardbilledmarkeringen for Kali under ARM. Jeg vil bruge GNU Parted, men du kan gøre det samme mere bekendt fdisk
. Du skal også bruge dosfstools
и e2fsprogs
for at oprette et filsystem: apt install parted dosfstools e2fsprogs
.
Partitionering af SD-kortet:
- Marker SD-kortet som bruger MBR-partitionering:
parted -s /dev/mmcblk0 mklabel msdos
- Opret en sektion til
/boot
for 128 megabyte:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Den første mistede megabyte skal efterlades til selve opmærkningen og til bootloaderen. - Opret en root FS for resten af kapaciteten:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Hvis du pludselig ikke har oprettet eller ændret partitionsfiler, skal du udføre `partprobe`, så bliver partitionstabellen genlæst.
- Opret et boot partition filsystem mærket
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Opret et rodfilsystem med en etiket
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Godt, nu kan du udfylde det. Dette vil desuden kræve debootstrap
, et værktøj til at skabe root FS på Debian-lignende operativsystemer: apt install debootstrap
.
Vi indsamler FS:
- Monter skillevæggen til
/mnt/
(brug et mere praktisk monteringspunkt til dig selv):mount /dev/mmcblk0p2 /mnt
- Faktisk fylder vi filsystemet:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. Parameter--include
specificerer yderligere at installere nogle pakker, specificerede jeg en statisk bygget QEMU-emulator. Det giver dig mulighed for at præsterechroot
til ARM-miljøet. Betydningen af de andre muligheder kan findes iman debootstrap
. Glem ikke, at ikke alle ARM-kort understøtter arkitekturenarmhf
. - På grund af forskellen i arkitekturer
debootstrap
udføres i to trin, den anden udføres som følger:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Nu skal du spinde:
chroot /mnt /bin/bash
- udfylde
/etc/hosts
и/etc/hostname
mål FS. Udfyld det samme som indholdet på din lokale computer, husk kun at erstatte værtsnavnet. - Du kan tilpasse alt andet. Især installerer jeg
locales
(lagernøgler), rekonfigurering af lokaliteter og tidszone (dpkg-reconfigure locales tzdata
). Glem ikke at indstille adgangskoden med kommandoenpasswd
. - Indstil en adgangskode til
root
holdpasswd
. - Forberedelsen af billedet for mig afsluttes ved at udfylde
/etc/fstab
inden/mnt/
.
Jeg vil uploade i overensstemmelse med de tags, der er oprettet tidligere, så indholdet bliver som dette:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto standard 0 0
Til sidst kan du montere opstartspartitionen, vi skal bruge den til kernen: `mount /dev/mmcblk0p1 /mnt/boot/`
Opbygning af Linux
For at bygge kernen (og derefter bootloaderen) på Debian Testing, skal du installere standardsættet af GCC, GNU Make og GNU C Library header-filerne til målarkitekturen (jeg har armhf
), samt OpenSSL headers, konsollommeregner bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Da standardindlæseren leder efter en fil zImage
på opstartspartitionens filsystem er det tid til at bryde flashdrevet.
- Kloning af kernen er for lang, så jeg vil bare downloade:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Pak ud og gå til kildebiblioteket:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Konfigurer før kompilering:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfigurationen er i mappenarch/arm/configs/
. Hvis der ikke er nogen, kan du prøve at finde og downloade en færdiglavet og videregive navnet på filen i denne mappe til parameterenKBUILD_DEFCONFIG
. I ekstreme tilfælde skal du straks fortsætte til næste afsnit. - Du kan valgfrit justere indstillingerne:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Og krydskompiler billedet:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Nu kan du kopiere kernefilen:
cp arch/arm/boot/zImage /mnt/boot/
- Og filer fra DeviceTree (beskrivelse af hardware tilgængelig på tavlen):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- Og installer modulerne samlet som separate filer:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Kernen er klar. Du kan afmontere alt: umount /mnt/boot/ /mnt/
Dens U-støvle
Da bootloaderen er interaktiv, er selve kortet, en lagerenhed og en valgfri USB-til-UART-enhed nok til at teste dens funktion. Det vil sige, at du kan udsætte kernen og OS til senere.
Langt de fleste producenter foreslår at bruge Das U-Boot til primær boot. Fuld støtte gives normalt i sin egen gaffel, men glem ikke at bidrage i opstrøms. I mit tilfælde er bestyrelsen støttet i
Vi samler selve bootloaderen:
- Klon den stabile gren af depotet:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Lad os gå til selve mappen:
cd u-boot
- Forberedelse af build-konfigurationen:
make mx6ull_14x14_evk_defconfig
. Dette virker kun, hvis konfigurationen er i selve Das U-Boot, ellers bliver du nødt til at finde producentens konfiguration og sætte den i roden af repository i filen.config
, eller samlet på anden måde anbefalet af producenten. - Vi samler selve bootloader-billedet med en cross-compiler
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Som et resultat får vi filen u-boot.imx
, dette er et færdiglavet billede, der kan skrives til et USB-flashdrev. Vi skriver til SD-kortet og springer de første 1024 bytes over. Hvorfor valgte jeg mål u-boot.imx
? Hvorfor gik glip af præcis 1024 bytes? Dette er, hvad de foreslår at gøre i
Færdig, du kan downloade. Bootloaderen skal rapportere sin egen version, nogle oplysninger om boardet og prøve at finde kernebilledet på partitionen. Hvis det mislykkes, vil det forsøge at starte over netværket. Generelt er output ret detaljeret, du kan finde en fejl i tilfælde af et problem.
I stedet for en konklusion
Vidste du, at en delfins pande ikke er knoglet? Det er bogstaveligt talt et tredje øje, en fed linse til ekkolokalisering!
Kilde: www.habr.com