tl; dr: Sò custruendu una maghjina Kali Linux per un computer ARM, in u prugramma debootstrap
, linux
и u-boot
.
Sè avete compru qualchì pagatore unicu micca assai populari, pudete scuntrà a mancanza di una maghjina di u vostru kit di distribuzione favuritu per questu. Praticamente a listessa cosa hè accaduta
U prucessu di scaricamentu hè abbastanza simplice:
- L'hardware hè inizializatu.
- Da una certa zona di u dispositivu di almacenamiento (carta SD/eMMC/etc) u bootloader hè lettu è eseguitu.
- U caricatore cerca u kernel di u sistema operatore è u carica in una zona di memoria è eseguisce.
- U kernel carica u restu di u SO.
Per u mo compitu, stu livellu di dettagliu hè abbastanza, pudete leghje i dettagli
Custruì u filesystem root
Prima avete bisognu di preparà e rùbbriche. Das U-Boot supporta diversi sistemi di fugliale, aghju sceltu FAT32 per /boot
è ext3 per root, questu hè u marcatu standard di l'imagine per Kali sottu ARM. Aduprà GNU Parted, ma pudete fà u listessu più familiar fdisk
. Averete ancu bisognu dosfstools
и e2fsprogs
per creà un filesystem: apt install parted dosfstools e2fsprogs
.
Particionà a carta SD:
- Marcate a carta SD cum'è utilizendu a particionazione MBR:
parted -s /dev/mmcblk0 mklabel msdos
- Crea una sezione per
/boot
per 128 megabytes:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. U primu megabyte mancatu deve esse lasciatu per u marcatu stessu è per u bootloader. - Crea un FS root per u restu di a capacità:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Se di colpu ùn avete micca creatu o cambiatu i schedarii di partizioni, avete bisognu di eseguisce `partprobe', allora a tavola di partizioni serà riletturata.
- Crea un sistema di filesystem di partizioni di boot marcatu
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Crea un sistema di filesystem root cù una etichetta
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Grande, avà pudete riempie. Questu averebbe ancu bisognu debootstrap
, una utilità per creà FS root in sistemi operativi simili à Debian: apt install debootstrap
.
Raccogliemu FS:
- Muntà a partizione à
/mnt/
(utilizate un puntu di muntagna più convenientu per voi stessu):mount /dev/mmcblk0p2 /mnt
- In fatti, riempia u sistema di schedari:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. Parametru--include
specifica per installà in più alcuni pacchetti, aghju specificatu un emulatore QEMU custruitu staticu. Permette di fàchroot
à l'ambiente ARM. U significatu di l'altri opzioni pò esse truvatu inman debootstrap
. Ùn vi scurdate micca chì micca ogni bordu ARM sustene l'architetturaarmhf
. - A causa di a diffarenza in l'architettura
debootstrap
hè realizatu in dui fasi, u sicondu hè realizatu cum'è seguita:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Avà avete bisognu di spin:
chroot /mnt /bin/bash
- Cumpigliemu
/etc/hosts
и/etc/hostname
target FS. Inserite u listessu cum'è u cuntenutu in u vostru urdinatore locale, ricordate di rimpiazzà solu u nome d'ospitu. - Pudete persunalizà tuttu u restu. In particulare, aghju installatu
locales
(chjavi di repository), cunfigurà i locali è u fusu orariu (dpkg-reconfigure locales tzdata
). Ùn vi scurdate di stabilisce a password cù u cumandimupasswd
. - Stabilisci una password per
root
squadrapasswd
. - A preparazione di l'imaghjini per mè hè cumpletata da u pienu
/etc/fstab
ind'u/mnt/
.
Caricà in cunfurmità cù e tag create prima, cusì u cuntenutu serà cusì:
LABEL=ROOTFS/errori auto=remount-ro 0 1
LABEL=BOOT /boot auto predefiniti 0 0
Infine, pudete muntà a partizione di boot, avemu bisognu per u kernel: `mount /dev/mmcblk0p1 /mnt/boot/`
Custruì Linux
Per custruisce u kernel (è dopu u bootloader) nantu à Debian Testing, avete bisognu di installà u set standard di GCC, GNU Make è i file di header di a Biblioteca C GNU per l'architettura di destinazione (aghju armhf
), è ancu intestazioni OpenSSL, calculatrice di cunsola bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Siccomu u caricatore predeterminatu cerca un schedariu zImage
nantu à u sistema di fugliale di a partizione di boot, hè ora di rompe u flash drive.
- A clonazione di u kernel hè troppu longa, dunque aghju da scaricà solu:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Unpack è andate à u cartulare fonte:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Configurate prima di cumpilà:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. A cunfigurazione hè in u cartularearch/arm/configs/
. Se ùn ci hè nimu, pudete pruvà à truvà è scaricà una pronta è passà u nome di u schedariu in questu cartulare à u paràmetru.KBUILD_DEFCONFIG
. In casi estremi, procedi immediatamente à u paràgrafu prossimu. - Opzionalmente, pudete aghjustà i paràmetri:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- È compie incruciate l'imaghjini:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Avà pudete copià u schedariu kernel:
cp arch/arm/boot/zImage /mnt/boot/
- È i fugliali da DeviceTree (descrizzione di hardware dispunibule nantu à u bordu):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- È installate i moduli assemblati cum'è schedarii separati:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
U kernel hè prontu. Pudete smuntà tuttu: umount /mnt/boot/ /mnt/
Das U Boot
Siccomu u bootloader hè interattivu, u bordu stessu, un dispositivu di almacenamiento è un dispositivu USB-à-UART opzionale sò abbastanza per pruvà u so funziunamentu. Questu hè, pudete posponà u kernel è l'OS per più tardi.
A maiò parte di i pruduttori suggerisce l'usu di Das U-Boot per u boot primariu. U sustegnu tutale hè generalmente furnitu in u so propiu forchetta, ma ùn vi scurdate di cuntribuisce in upstream. In u mo casu, u cunsigliu hè supportatu
Cullemu u bootloader stessu:
- Clona a ramu stabile di u repositariu:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Andemu à u cartulare stessu:
cd u-boot
- Preparazione di a cunfigurazione di custruzzione:
make mx6ull_14x14_evk_defconfig
. Questu funziona solu se a cunfigurazione hè in Das U-Boot stessu, altrimenti avete bisognu di truvà a cunfigurazione di u fabricatore è mette in a radica di u repository in u schedariu..config
, o assemblatu in un altru modu cunsigliatu da u fabricatore. - Cullemu l'imagine di bootloader stessu cù un compilatore cross-compiler
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
In u risultatu, avemu u schedariu u-boot.imx
, Questa hè una maghjina pronta chì pò esse scritta à una unità flash USB. Scrivemu à a carta SD, saltendu i primi 1024 bytes. Perchè aghju sceltu u mira u-boot.imx
? Perchè mancate esattamente 1024 bytes? Questu hè ciò chì pruponenu di fà
Fattu, pudete scaricà. U bootloader deve riportà a so propria versione, qualchì infurmazione nantu à u bordu, è pruvate à truvà l'imaghjini di u kernel nantu à a partizione. S'ellu falla, pruvarà à boot nantu à a reta. In generale, l'output hè abbastanza detallatu, pudete truvà un errore in casu di prublema.
Inveci di 'na cunchiusioni
Sapete chì a fronte di un delfinu ùn hè micca ossu ? Hè literalmente un terzu ochju, una lente grassa per l'echolocation !
Source: www.habr.com