tl; dr: Ik bouwe in Kali Linux-ôfbylding foar in ARM-kompjûter, yn it programma debootstrap
, linux
и u-boot
.
As jo wat net heul populêre single-beteller hawwe kocht, kinne jo miskien tsjinkomme op it ûntbrekken fan in ôfbylding fan jo favorite distribúsjekit dêrfoar. Der barde sawat itselde ding
It ynlaadproses is frij simpel:
- Hardware wurdt inisjalisearre.
- Fan wat gebiet op it opslachapparaat (SD-kaart / eMMC / ensfh) wurdt de bootloader lêzen en útfierd.
- De loader siket de kernel fan it bestjoeringssysteem en laadt it yn wat ûnthâldgebiet en fiert it út.
- De kernel laadt de rest fan it OS.
Foar myn taak is dit nivo fan detail genôch, jo kinne de details lêze
It bouwen fan it rootbestânsysteem
Earst moatte jo de seksjes tariede. Das U-Boot stipet ferskate triem systemen, Ik keas FAT32 foar /boot
en ext3 foar root, dit is de standertôfbyldingsmarkearring foar Kali ûnder ARM. Ik sil GNU Parted brûke, mar jo kinne itselde fertrouder meitsje fdisk
. Jo sille ek nedich dosfstools
и e2fsprogs
om in triemsysteem te meitsjen: apt install parted dosfstools e2fsprogs
.
Partitionearje de SD-kaart:
- Markearje de SD-kaart as gebrûk fan MBR-partitionering:
parted -s /dev/mmcblk0 mklabel msdos
- Meitsje in seksje foar
/boot
foar 128 megabytes:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. De earste miste megabyte moat wurde oerlitten foar de markup sels en foar de bootloader. - Meitsje in root FS foar de rest fan 'e kapasiteit:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- As jo ynienen gjin partitiontriemmen makke of feroare hawwe, moatte jo `partprobe` útfiere, dan sil de partitiontabel opnij lêzen wurde.
- Meitsje in bestânsysteem foar bootpartition markearre
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Meitsje in root-bestânsysteem mei in label
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Geweldich, no kinne jo it ynfolje. Dit sil ekstra fereaskje debootstrap
, in hulpprogramma foar it meitsjen fan root FS op Debian-like bestjoeringssystemen: apt install debootstrap
.
Wy sammelje FS:
- Befestigje de partysje oan
/mnt/
(brûk in handiger berchpunt foar josels):mount /dev/mmcblk0p2 /mnt
- Eigentlik folje wy it bestânsysteem:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
... Parameter--include
spesifisearret om ek guon pakketten te ynstallearjen, Ik spesifisearre in statysk boud QEMU-emulator. It kinne jo útfierechroot
nei de ARM-omjouwing. De betsjutting fan 'e oare opsjes kin fûn wurde ynman debootstrap
. Ferjit net dat net elk ARM-boerd de arsjitektuer stipetarmhf
. - Troch it ferskil yn arsjitektuer
debootstrap
wurdt útfierd yn twa etappes, de twadde wurdt útfierd as folget:chroot /mnt/ /debootstrap/debootstrap --second-stage
- No moatte jo draaie:
chroot /mnt /bin/bash
- Wy folje yn
/etc/hosts
и/etc/hostname
doel FS. Folje itselde yn as de ynhâld op jo lokale kompjûter, tink om allinich de hostnamme te ferfangen. - Jo kinne al it oare oanpasse. Benammen ik ynstallearje
locales
(repository-kaaien), pleatsen en tiidsône opnij konfigurearje (dpkg-reconfigure locales tzdata
). Ferjit net it wachtwurd yn te stellen mei it kommandopasswd
. - Stel in wachtwurd yn foar
root
ploechpasswd
. - De tarieding fan it byld foar my wurdt foltôge troch it ynfoljen
/etc/fstab
binnen/mnt/
.
Ik sil uploade yn oerienstimming mei de tags dy't earder makke binne, dus de ynhâld sil sa wêze:
LABEL=ROOTFS / auto flaters=remount-ro 0 1
LABEL=BOOT /boot auto standert 0 0
Uteinlik kinne jo de bootpartysje oanmeitsje, wy hawwe it nedich foar de kernel: `mount /dev/mmcblk0p1 /mnt/boot/`
Bouwe Linux
Om de kernel (en dan de bootloader) op Debian Testing te bouwen, moatte jo de standert set fan GCC, GNU Make en de GNU C Library header-bestannen ynstallearje foar de doelarsjitektuer (ik haw armhf
), lykas OpenSSL-koppen, konsole-kalkulator bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Sûnt de standert loader siket nei in triem zImage
op it bestânsysteem fan 'e bootpartysje is it tiid om it flash-drive te brekken.
- Klonen fan de kernel is te lang, dus ik sil gewoan downloade:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Utpakke en gean nei de boarne map:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Konfigurearje foardat jo kompilearje:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. De konfiguraasje is yn 'e maparch/arm/configs/
. As d'r gjin is, kinne jo besykje in klearmakke te finen en te downloaden en de namme fan it bestân yn dizze map troch te jaan oan de parameterKBUILD_DEFCONFIG
. Gean yn ekstreme gefallen fuort nei de folgjende paragraaf. - Jo kinne de ynstellings opsjoneel oanpasse:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- En kompilearje de ôfbylding:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- No kinne jo it kernelbestân kopiearje:
cp arch/arm/boot/zImage /mnt/boot/
- En bestannen fan DeviceTree (beskriuwing fan hardware beskikber op it boerd):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- En ynstallearje de modules gearstald as aparte bestannen:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
De kernel is klear. Jo kinne alles demontearje: umount /mnt/boot/ /mnt/
Das U Boot
Sûnt de bootloader ynteraktyf is, binne it boerd sels, in opslachapparaat en in opsjoneel USB-to-UART-apparaat genôch om de wurking te testen. Dat is, jo kinne de kernel en OS foar letter útstelle.
De grutte mearderheid fan fabrikanten suggerearret it brûken fan Das U-Boot foar primêre boot. Folsleine stipe wurdt normaal levere yn syn eigen foarke, mar ferjit net om by te dragen yn 'e streamop. Yn myn gefal wurdt it bestjoer stipe yn
Wy sammelje de bootloader sels:
- Kloon de stabile tûke fan 'e repository:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Litte wy nei de map sels gean:
cd u-boot
- De boukonfiguraasje tariede:
make mx6ull_14x14_evk_defconfig
. Dit wurket allinich as de konfiguraasje yn Das U-Boot sels is, oars moatte jo de konfiguraasje fan de fabrikant fine en it yn 'e root fan' e repository yn 'e triem pleatse.config
, of gearstald op in oare wize oanrikkemandearre troch de fabrikant. - Wy sammelje de bootloader-ôfbylding sels mei in cross-compiler
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
As gefolch krije wy it bestân u-boot.imx
, dit is in klearmakke ôfbylding dy't skreaun wurde kin nei in USB-flashdrive. Wy skriuwe nei de SD-kaart, oerslaan de earste 1024 bytes. Wêrom haw ik doel keazen u-boot.imx
? Wêrom miste krekt 1024 bytes? Dit is wat se foarstelle om te dwaan yn
Dien, kinne jo downloade. De bootloader moat syn eigen ferzje rapportearje, wat ynformaasje oer it boerd, en besykje de kernelôfbylding op 'e partysje te finen. As it mislearret, sil it besykje te booten oer it netwurk. Yn 't algemien is de útfier frij detaillearre, jo kinne in flater fine yn gefal fan in probleem.
Yn stee fan in konklúzje
Wisten jo dat de foarholle fan in dolfyn net bonkich is? It is letterlik in tredde each, in fettige lens foar echolokaasje!
Boarne: www.habr.com