tl; dr: Qed nibni immaġni Kali Linux għal kompjuter ARM, fil-programm debootstrap
, linux
и u-boot
.
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
Il-proċess tat-tniżżil huwa pjuttost sempliċi:
- Il-ħardwer huwa inizjalizzat.
- Minn xi żona fuq l-apparat tal-ħażna (karta SD/eMMC/eċċ) il-bootloader jinqara u jiġi esegwit.
- Il-bootloader ifittex il-qalba tas-sistema operattiva u jgħabbiha f'xi żona tal-memorja u tesegwixxiha.
- 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
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:
- Immarka l-karta SD bħala li tuża partizzjoni MBR:
parted -s /dev/mmcblk0 mklabel msdos
- 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. - 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%
- 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.
- Oħloq sistema ta 'fajls għall-partizzjoni tal-boot bit-tikketta
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- 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:
- Immonta l-partizzjoni ġewwa
/mnt/
(uża punt ta' muntaġġ aktar konvenjenti):mount /dev/mmcblk0p2 /mnt
- 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 twettaqchroot
fl-ambjent ARM. It-tifsira tal-għażliet li fadal tista' tinstab fiman debootstrap
. Tinsiex li mhux kull bord ARM jappoġġja l-arkitetturaarmhf
. - Minħabba d-differenza fl-arkitettura
debootstrap
titwettaq f'żewġ stadji, it-tieni titwettaq hekk:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Issa trid tisvitaha:
chroot /mnt /bin/bash
- 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. - 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-kmandpasswd
. - Issettja password għal
root
timpasswd
. - 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.
- 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
- Ikkonfigura qabel il-kumpilazzjoni:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Il-konfigurazzjoni tinsab fid-direttorjuarch/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 parametruKBUILD_DEFCONFIG
. Bħala l-aħħar għażla, immedjatament imxi għall-punt li jmiss. - B'għażla tista' ttejjeb is-settings:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- U kompila l-immaġni:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Issa tista' tikkopja l-fajl tal-kernel:
cp arch/arm/boot/zImage /mnt/boot/
- U fajls minn DeviceTree (deskrizzjoni tal-ħardwer fuq il-bord):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- 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
Ejja niġbru l-bootloader innifsu:
- Aħna nikklonu l-fergħa stabbli tar-repożitorju:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Ejja mmorru fid-direttorju innifsu:
cd u-boot
- 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. - 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
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!
Sors: www.habr.com