Begjin fan GNU/Linux op in ARM-boerd fanôf it begjin (mei Kali en iMX.6 as foarbyld)

tl; dr: Ik bouwe in Kali Linux-ôfbylding foar in ARM-kompjûter, yn it programma debootstrap, linux и u-boot.

Begjin fan GNU/Linux op in ARM-boerd fanôf it begjin (mei Kali en iMX.6 as foarbyld)

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 plande Flipper One. D'r is gewoan gjin Kali Linux foar IMX6 (ik koken), dus ik moat it sels gearstalle.

It ynlaadproses is frij simpel:

  1. Hardware wurdt inisjalisearre.
  2. Fan wat gebiet op it opslachapparaat (SD-kaart / eMMC / ensfh) wurdt de bootloader lêzen en útfierd.
  3. De loader siket de kernel fan it bestjoeringssysteem en laadt it yn wat ûnthâldgebiet en fiert it út.
  4. De kernel laadt de rest fan it OS.

Foar myn taak is dit nivo fan detail genôch, jo kinne de details lêze yn in oar artikel. De hjirboppe neamde "guon" gebieten ferskille fan boerd nei boerd, wat soarget foar guon ynstallaasjeswierrichheden. It laden fan tsjinner ARM platfoarms besykje te standardisearjen mei help fan UEFI, mar sa lang as it is net beskikber foar elkenien, do silst moatte sammelje alles apart.

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:

  1. Markearje de SD-kaart as gebrûk fan MBR-partitionering: parted -s /dev/mmcblk0 mklabel msdos
  2. 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.
  3. Meitsje in root FS foar de rest fan 'e kapasiteit: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. As jo ​​ynienen gjin partitiontriemmen makke of feroare hawwe, moatte jo `partprobe` útfiere, dan sil de partitiontabel opnij lêzen wurde.
  5. Meitsje in bestânsysteem foar bootpartition markearre BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. 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:

  1. Befestigje de partysje oan /mnt/ (brûk in handiger berchpunt foar josels): mount /dev/mmcblk0p2 /mnt
  2. 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 útfiere chroot nei de ARM-omjouwing. De betsjutting fan 'e oare opsjes kin fûn wurde yn man debootstrap. Ferjit net dat net elk ARM-boerd de arsjitektuer stipet armhf.
  3. Troch it ferskil yn arsjitektuer debootstrap wurdt útfierd yn twa etappes, de twadde wurdt útfierd as folget: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. No moatte jo draaie: chroot /mnt /bin/bash
  5. 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.
  6. 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 kommando passwd.
  7. Stel in wachtwurd yn foar root ploech passwd.
  8. 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.

  1. 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
  2. Konfigurearje foardat jo kompilearje: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. De konfiguraasje is yn 'e map arch/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 parameter KBUILD_DEFCONFIG. Gean yn ekstreme gefallen fuort nei de folgjende paragraaf.
  3. Jo kinne de ynstellings opsjoneel oanpasse: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. En kompilearje de ôfbylding: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. No kinne jo it kernelbestân kopiearje: cp arch/arm/boot/zImage /mnt/boot/
  6. En bestannen fan DeviceTree (beskriuwing fan hardware beskikber op it boerd): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. 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 haadlinedêrom foarke Ik negearre.

Wy sammelje de bootloader sels:

  1. Kloon de stabile tûke fan 'e repository: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Litte wy nei de map sels gean: cd u-boot
  3. 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.
  4. 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 dokumintaasje. Foar oare boards kin it byldbou- en baarnproses wat oars wêze.

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!

Begjin fan GNU/Linux op in ARM-boerd fanôf it begjin (mei Kali en iMX.6 as foarbyld)

Begjin fan GNU/Linux op in ARM-boerd fanôf it begjin (mei Kali en iMX.6 as foarbyld)

Boarne: www.habr.com