tl;dr: jag bygger en Kali Linux-bild för ARM-datorer, med programmet debootstrap, linux och u-boot.
Om du har köpt nÄgon mindre populÀr enkortsdator kan du ha stött pÄ bristen pÄ en bild av din favoritdistribution. UngefÀr samma sak har hÀnt med . Det finns helt enkelt ingen Kali Linux för IMX6 (jag förbereder det), sÄ jag mÄste bygga den sjÀlv.
Laddningsprocessen Àr ganska enkel:
- HÄrdvaran initieras.
- FrÄn ett visst omrÄde pÄ lagringsenheten (SD-kort/eMMC/osv) lÀses en bootloader in och körs.
- Bootloadern söker efter operativsystemets kÀrna och laddar den i ett visst minnesomrÄde och kör den.
- KĂ€rnan laddar resten av operativsystemet.
För min uppgift rÀcker denna detaljnivÄ, detaljer kan du lÀsa . De ovan nÀmnda "vissa" omrÄden varierar frÄn kort till kort, vilket skapar vissa problem med installationen. Laddning av serverbaserade ARM-plattformar genom UEFI, men sÄ lÀnge detta inte Àr tillgÀngligt för alla mÄste man sÀtta ihop allt separat.
Bygga rotfilsystemet
Först mÄste partitionerna förberedas. Das U-Boot stöder olika filsystem, jag valde FAT32 för /boot och ext3 för roten, detta Àr standardpartitioneringen för Kali för ARM. Jag kommer att anvÀnda GNU Parted, men du kan göra det pÄ ett mer bekant fdisk. Du kommer ocksÄ att behöva dosfstools och e2fsprogs för att skapa filsystem: apt install parted dosfstools e2fsprogs.
Partitionera SD-kortet:
- Markera SD-kortet som anvÀnder MBR-partitionering:
parted -s /dev/mmcblk0 mklabel msdos - Skapa en partition för
/bootpÄ 128 megabyte:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Den första uteslutna megabyte mÄste lÀmnas för sjÀlva partitioneringen och bootloadern. - Skapa rotfilsystemet med all kvarvarande kapacitet:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Om filerna för partitionerna inte skapades eller Àndrades, kör `partprobe`, dÄ kommer partitionstabellen att lÀsas om.
- Skapa filsystemet för bootpartitionen med etiketten
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Skapa rotfilsystemet med etiketten
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
UtmÀrkt, nu kan det fyllas. För detta behövs Àven debootstrap, ett verktyg för att skapa rotfilsystem för Debian-liknande operativsystem: apt install debootstrap.
Bygger filsystemet:
- Montera partitionen i
/mnt/(anvÀnd en mer bekvÀm monteringspunkt för dig):mount /dev/mmcblk0p2 /mnt - Fyll i filsystemet:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametern--includeanger att installera vissa paket, jag angav den statiskt sammanstÀllda emulatorn QEMU. Den möjliggör körning avchrooti ARM-miljön. Syftet med de andra alternativen kan ses iman debootstrap. TÀnk pÄ att inte alla ARM-kort stöder arkitekturenarmhf. - PÄ grund av arkitekturernas skillnader
debootstraputförs i tvÄ steg, det andra utförs sÄ hÀr:chroot /mnt/ /debootstrap/debootstrap --second-stage - Nu mÄste vi chroota:
chroot /mnt /bin/bash - Fyller i
/etc/hostsoch/etc/hostnamemÄl-FS. Fyll pÄ liknande med innehÄllet pÄ din lokala dator, glöm inte att byta vÀrdnamnet. - Allt annat kan justeras. Specifikt installerar jag
locales(förvaringsnycklar), konfigurerar om lokaler och tidszon (dpkg-reconfigure locales tzdata). Glöm inte att stÀlla in ett lösenord med kommandotpasswd. - StÀller in lösenord för
rootmed kommandotpasswd. - För att förbereda bilden avslutas jag med att fylla i
/etc/fstabinuti/mnt/.
Jag kommer att ladda upp i enlighet med de tidigare skapade etiketterna, sÄ innehÄllet kommer att vara sÄ hÀr:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Till sist kan vi montera startpartitionen, den kommer att behövas för kÀrnan: `mount /dev/mmcblk0p1 /mnt/boot/`
Bygg Linux
För att bygga kÀrnan (och i nÀsta steg bootloadern) pÄ Debian Testing mÄste du installera standardpaketet med GCC, GNU Make och headerfiler för GNU C Library för den mÄlarkitekturen (jag har armhf), samt headerfiler för OpenSSL, en konsolrÀknare bc, bison och flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Eftersom bootloadern som standard letar efter filen zImage i filsystemet för startpartitionen, Àr det dags att partitionera USB-minnet.
- Att klona kÀrnan tar för lÄng tid, sÄ jag laddar ner den istÀllet:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Vi packar upp och gÄr in i mappen med kÀllkoden:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1 - Konfigurerar innan kompilering:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurationen finns i mappenarch/arm/configs/. Om den inte finns kan du försöka hitta och ladda ner en fÀrdig och ange filnamnet i den hÀr mappen som parameterKBUILD_DEFCONFIG. I vÀrsta fall gÄr du direkt till nÀsta steg. - Valfritt kan instÀllningarna justeras:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - Och vi krosskompilerar bilden:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Nu kan vi kopiera filen med kÀrnan:
cp arch/arm/boot/zImage /mnt/boot/ - Och filer med DeviceTree (beskrivning av den befintliga hÄrdvaran pÄ kortet):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - Och installera de samlade modulerna som separata filer:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
KÀrnan Àr klar. Du kan avmontera allt: umount /mnt/boot/ /mnt/
Das U-Boot
Eftersom startprogrammet Àr interaktivt, rÀcker det med sjÀlva kortet, lagringsenheten och eventuellt en USB-to-UART-enhet för att kontrollera dess funktion. Det vill sÀga, du kan skjuta upp kÀrnan och OS till senare.
NÀstan alla tillverkare rekommenderar att anvÀnda Das U-Boot för den primÀra inladdningen. FullstÀndig support erbjuds oftast i sin egen fork, men de glömmer inte att bidra till upstream. I mitt fall stöds kortet i , dÀrför ignorerade jag.
Vi bygger sjÀlva startprogrammet:
- Klona den stabila grenen av biblioteket:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Vi gÄr in i sjÀlva katalogen:
cd u-boot - Förbered byggkonfigurationen:
make mx6ull_14x14_evk_defconfig. Detta fungerar bara om konfigurationen finns i sjÀlva Das U-Boot, annars mÄste du hitta tillverkarens konfigurationsfil och lÀgga den i roten av biblioteket i filen.config, eller bygga enligt nÄgot annat rekommenderat av tillverkaren. - Vi bygger sjÀlva starten med krosskompilatorn
armhf:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Som resultat fĂ„r vi filen u-boot.imx, detta Ă€r en fĂ€rdig bild som kan skrivas pĂ„ ett USB-minne. Vi skriver till SD-kortet och hoppar över de första 1024 byte. Varför valde jag mĂ„let u-boot.imx? ĐĐŸŃĐ”ĐŒŃ ĐżŃĐŸĐżŃŃŃОл ĐžĐŒĐ”ĐœĐœĐŸ 1024 баĐčŃа? йаĐș ĐżŃДЎлагаŃŃ ŃЎДлаŃŃ ĐČ . För andra kort kan processen för att bygga bilden och skriva skilja sig nĂ„got.
Klart, du kan starta. Startprogrammet bör rapportera sin egen version, viss information om kortet och försöka hitta kÀrnbilden pÄ partitionen. Om det misslyckas kommer det att försöka starta över nÀtverket. Totalt Àr output ganska detaljerad, man kan hitta misstag om det uppstÄr problem.
Avslutande
Visste du att delfinens panna inte Àr benig? Det Àr bokstavligen den tredje ögat, en fet linse för ekolokalisering!
KĂ€lla: habr.com
