Installera GNU/LINUX pÄ en ARM-plattform frÄn grunden (med Kali och iMX.6 som exempel)

tl;dr: jag bygger en Kali Linux-bild för ARM-datorer, med programmet debootstrap, linux och u-boot.

Installera GNU/LINUX pÄ en ARM-plattform frÄn grunden (med Kali och iMX.6 som exempel)

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 den planerade Flipper One. 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:

  1. HÄrdvaran initieras.
  2. FrÄn ett visst omrÄde pÄ lagringsenheten (SD-kort/eMMC/osv) lÀses en bootloader in och körs.
  3. Bootloadern söker efter operativsystemets kÀrna och laddar den i ett visst minnesomrÄde och kör den.
  4. KĂ€rnan laddar resten av operativsystemet.

För min uppgift rÀcker denna detaljnivÄ, detaljer kan du lÀsa i en annan artikel. De ovan nÀmnda "vissa" omrÄden varierar frÄn kort till kort, vilket skapar vissa problem med installationen. Laddning av serverbaserade ARM-plattformar försöker standardiseras 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:

  1. Markera SD-kortet som anvÀnder MBR-partitionering: parted -s /dev/mmcblk0 mklabel msdos
  2. Skapa en partition för /boot pÄ 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.
  3. Skapa rotfilsystemet med all kvarvarande kapacitet: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Om filerna för partitionerna inte skapades eller Àndrades, kör `partprobe`, dÄ kommer partitionstabellen att lÀsas om.
  5. Skapa filsystemet för bootpartitionen med etiketten BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. 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:

  1. Montera partitionen i /mnt/ (anvÀnd en mer bekvÀm monteringspunkt för dig): mount /dev/mmcblk0p2 /mnt
  2. Fyll i filsystemet: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametern --include anger att installera vissa paket, jag angav den statiskt sammanstÀllda emulatorn QEMU. Den möjliggör körning av chroot i ARM-miljön. Syftet med de andra alternativen kan ses i man debootstrap. TÀnk pÄ att inte alla ARM-kort stöder arkitekturen armhf.
  3. PÄ grund av arkitekturernas skillnader debootstrap utförs i tvÄ steg, det andra utförs sÄ hÀr: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Nu mÄste vi chroota: chroot /mnt /bin/bash
  5. Fyller i /etc/hosts och /etc/hostname mÄl-FS. Fyll pÄ liknande med innehÄllet pÄ din lokala dator, glöm inte att byta vÀrdnamnet.
  6. 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 kommandot passwd.
  7. StÀller in lösenord för root med kommandot passwd.
  8. För att förbereda bilden avslutas jag med att fylla i /etc/fstab inuti /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.

  1. 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
  2. Konfigurerar innan kompilering: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurationen finns i mappen arch/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 parameter KBUILD_DEFCONFIG. I vÀrsta fall gÄr du direkt till nÀsta steg.
  3. Valfritt kan instÀllningarna justeras: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Och vi krosskompilerar bilden: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Nu kan vi kopiera filen med kÀrnan: cp arch/arm/boot/zImage /mnt/boot/
  6. Och filer med DeviceTree (beskrivning av den befintliga hÄrdvaran pÄ kortet): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. 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 mainline, dÀrför fork ignorerade jag.

Vi bygger sjÀlva startprogrammet:

  1. Klona den stabila grenen av biblioteket: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Vi gÄr in i sjÀlva katalogen: cd u-boot
  3. 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.
  4. 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 баĐčта? йаĐș прДЎлагают ŃĐŽĐ”Đ»Đ°Ń‚ŃŒ ĐČ dokumentationen. 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!

Installera GNU/LINUX pÄ en ARM-plattform frÄn grunden (med Kali och iMX.6 som exempel)

Installera GNU/LINUX pÄ en ARM-plattform frÄn grunden (med Kali och iMX.6 som exempel)

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster