Nibda GNU/Linux fuq bord ARM mill-bidu (bl-użu ta' Kali u iMX.6 bħala eżempju)

tl; dr: Qed nibni immaġni Kali Linux għal kompjuter ARM, fil-programm debootstrap, linux и u-boot.

Nibda GNU/Linux fuq bord ARM mill-bidu (bl-użu ta' Kali u iMX.6 bħala eżempju)

Jekk xtrajt xi softwer single-board mhux popolari ħafna, tista 'tiffaċċja n-nuqqas ta' immaġni tad-distribuzzjoni favorita tiegħek għaliha. Madwar l-istess ħaġa ġara biha ippjanat Flipper One. Sempliċement m'hemm l-ebda Kali Linux għal IMX6 (qed nipprepara), għalhekk għandi niġbor jien.

Il-proċess tat-tniżżil huwa pjuttost sempliċi:

  1. Il-ħardwer huwa inizjalizzat.
  2. Minn xi żona fuq l-apparat tal-ħażna (karta SD/eMMC/eċċ) il-bootloader jinqara u jiġi esegwit.
  3. Il-bootloader ifittex il-qalba tas-sistema operattiva u jgħabbiha f'xi żona tal-memorja u tesegwixxiha.
  4. Il-qalba jgħabbi l-bqija tal-OS.

Dan il-livell ta 'dettall huwa biżżejjed għall-kompitu tiegħi, tista' taqra d-dettalji f'artiklu ieħor. Iż-żoni "xi" imsemmija hawn fuq ivarjaw minn bord għal bord, li joħloq xi diffikultajiet ta 'installazzjoni. Tagħbija tal-pjattaformi tas-server ARM tipprova tistandardizza tuża UEFI, iżda filwaqt li dan mhux disponibbli għal kulħadd, ikollok tiġbor kollox separatament.

Bini tas-sistema tal-fajl tal-għeruq

L-ewwel trid tipprepara s-sezzjonijiet. Das U-Boot jappoġġja sistemi ta 'fajls differenti, għażilt FAT32 għal /boot u ext3 għall-għeruq, dan huwa t-tqassim tal-immaġni standard għal Kali fuq ARM. Ser nuża GNU Parted, imma int tista' tagħmel l-istess b'mod aktar familjari fdisk. Ikollok bżonn ukoll dosfstools и e2fsprogs biex toħloq sistema ta' fajls: apt install parted dosfstools e2fsprogs.

Aħna nimmarkaw il-karta SD:

  1. Immarka l-karta SD bħala li tuża partizzjoni MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Oħloq taqsima taħt /boot għal 128 megabytes: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. L-ewwel megabyte mitluf irid jitħalla għall-markup innifsu u għall-bootloader.
  3. Aħna noħolqu sistema ta' fajls tal-għeruq għall-kapaċità kollha li fadal: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Jekk f'daqqa waħda l-fajls tal-partizzjoni tiegħek ma nħolqux jew ma nbidlux, għandek bżonn tmexxi `partprobe`, allura t-tabella tal-partizzjoni terġa' tinqara.
  5. Oħloq sistema ta 'fajls għall-partizzjoni tal-boot bit-tikketta BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Oħloq sistema ta 'fajls ta' l-għeruq b'tikketta ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Kbir, issa tista' timlaha. Għal dan ser ikollok bżonn ukoll debootstrap, utilità għall-ħolqien ta' sistemi ta' fajls ta' għerq għal sistemi operattivi bħal Debian: apt install debootstrap.

Aħna niġbru FS:

  1. Immonta l-partizzjoni ġewwa /mnt/ (uża punt ta' muntaġġ aktar konvenjenti): mount /dev/mmcblk0p2 /mnt
  2. Fil-fatt nimlew is-sistema tal-fajls: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametru --include jindika li addizzjonalment tinstalla xi pakketti, speċifikajt emulatur QEMU mibni b'mod statiku. Jippermettilek twettaq chroot fl-ambjent ARM. It-tifsira tal-għażliet li fadal tista' tinstab fi man debootstrap. Tinsiex li mhux kull bord ARM jappoġġja l-arkitettura armhf.
  3. Minħabba d-differenza fl-arkitettura debootstrap titwettaq f'żewġ stadji, it-tieni titwettaq hekk: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Issa trid tisvitaha: chroot /mnt /bin/bash
  5. Nimlew /etc/hosts и /etc/hostname mira FS. Imla l-istess bħall-kontenut fuq il-kompjuter lokali tiegħek, ftakar biss li tissostitwixxi l-hostname.
  6. Tista 'tippersonalizza kull ħaġa oħra. B'mod partikolari, ninstalla locales (ċwievet repożitorju), ikkonfigura mill-ġdid lokali u żona tal-ħin (dpkg-reconfigure locales tzdata). Tinsiex issettja l-password mal-kmand passwd.
  7. Issettja password għal root tim passwd.
  8. Il-preparazzjoni tal-immaġni għalija tispiċċa bil-mili /etc/fstab внутри /mnt/.

Se ntella' skont it-tikketti maħluqa qabel, għalhekk il-kontenut se jkun bħal dan:

LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT/boot awtomatika defaults 0 0

Fl-aħħarnett, tista 'timmonta l-partizzjoni tal-boot, ikollna bżonnha għall-qalba: `mount /dev/mmcblk0p1 /mnt/boot/`

Bini Linux

Biex tibni l-kernel (u mbagħad il-boot loader) fuq Debian Testing, għandek bżonn tinstalla sett standard ta 'GCC, GNU Make u GNU C Library header files għall-arkitettura fil-mira (għalija armhf), kif ukoll headers OpenSSL, console calculator bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Peress li l-loader default ifittex il-fajl zImage fuq is-sistema tal-fajls tal-partizzjoni tal-but, wasal iż-żmien li taqsam il-flash drive.

  1. Jieħu wisq żmien biex nikklona l-qalba, għalhekk niżżel biss: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Ejja nispakkjaw u mmorru fid-direttorju tas-sors: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Ikkonfigura qabel il-kumpilazzjoni: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Il-konfigurazzjoni tinsab fid-direttorju arch/arm/configs/. Jekk m'hemmx, tista' tipprova ssib u tniżżel waħda lesta u tgħaddi l-isem tal-fajl f'dan id-direttorju bħala parametru KBUILD_DEFCONFIG. Bħala l-aħħar għażla, immedjatament imxi għall-punt li jmiss.
  3. B'għażla tista' ttejjeb is-settings: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. U kompila l-immaġni: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Issa tista' tikkopja l-fajl tal-kernel: cp arch/arm/boot/zImage /mnt/boot/
  6. U fajls minn DeviceTree (deskrizzjoni tal-ħardwer fuq il-bord): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. U installa l-moduli miġbura fil-forma ta 'fajls separati: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Il-qalba hija lesta. Tista' tneħħi kollox: umount /mnt/boot/ /mnt/

Das U-Boot

Peress li l-bootloader huwa interattiv, kull ma għandek bżonn biex tittestja l-operat tiegħu huwa l-bord innifsu, apparat ta 'ħażna, u b'mod fakultattiv apparat USB-to-UART. Jiġifieri, tista' tipposponi l-qalba u l-OS għal aktar tard.

Il-maġġoranza l-kbira tal-manifatturi joffru li jużaw Das U-Boot għall-but inizjali. L-appoġġ sħiħ normalment jiġi pprovdut fil-furketta tagħhom stess, iżda ma jinsewx li jikkontribwixxu għall-upstream. Fil-każ tiegħi, il-bord huwa appoġġjat fi linja prinċipaligħalhekk furketta Injorajtha.

Ejja niġbru l-bootloader innifsu:

  1. Aħna nikklonu l-fergħa stabbli tar-repożitorju: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Ejja mmorru fid-direttorju innifsu: cd u-boot
  3. Tħejjija tal-konfigurazzjoni tal-bini: make mx6ull_14x14_evk_defconfig. Dan jaħdem biss jekk il-konfigurazzjoni tkun f'Das U-Boot innifsu, inkella jkollok bżonn issib il-konfigurazzjoni tal-manifattur u poġġiha fl-għerq tar-repożitorju f'fajl .config, jew tiġbor b'xi mod ieħor rakkomandat mill-manifattur.
  4. Aħna niġbru l-immaġni tal-bootloader nnifisha billi tuża cross-compiler armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Bħala riżultat aħna jiksbu l-fajl u-boot.imx, din hija immaġni lesta li tista 'tinkiteb fuq flash drive. Aħna niktbu lill-karta SD, naqbżu l-ewwel 1024 bytes. Għaliex għażilt Target u-boot.imx? Għaliex tlift eżattament 1024 bytes? Dan huwa dak li jipproponu li jagħmlu fih dokumentazzjoni. Għal bordijiet oħra, il-proċess tal-bini tal-immaġni u tar-reġistrazzjoni jista 'jkun kemmxejn differenti.

Lest, tista 'tibbutja. Il-bootloader għandu jirrapporta l-verżjoni tiegħu stess, xi informazzjoni dwar il-bord, u jipprova jsib l-immaġni tal-kernel fuq il-partizzjoni. Jekk ma tirnexxix, se tipprova tibbotja fuq in-netwerk. B'mod ġenerali, l-output huwa pjuttost dettaljat, tista 'ssib l-iżball jekk ikun hemm problema.

Minflok ma tikkonkludi

Kont taf li forehead tad-delfini mhix għadam? Huwa litteralment it-tielet għajn, lenti grassa għall-ekolokazzjoni!

Nibda GNU/Linux fuq bord ARM mill-bidu (bl-użu ta' Kali u iMX.6 bħala eżempju)

Nibda GNU/Linux fuq bord ARM mill-bidu (bl-użu ta' Kali u iMX.6 bħala eżempju)

Sors: www.habr.com