tl;dr: po bëj një imazh të Kali Linux për një kompjuter ARM, në programin debootstrap, linux dhe u-boot.
Nëse keni blerë ndonjë njësi të vetme jo shumë të njohur, mund të jeni përballur me mungesën e imazhit të shpërndarjes suaj të preferuar. Njësoj ndodhi me . Kali Linux për IMX6 thjesht nuk ekziston (po përgatis), kështu që duhet ta ndërtosh vetë.
Procesi i ngarkimit është mjaft i thjeshtë:
- Hidhen në funksion pajisjet.
- Nga disa zona në pajisjen e ruajtjes (SD kartë/eMMC/etj) lexohen dhe ekzekutohen ngarkuesit.
- Ngarkuesi kërkon bërthamën e sistemit operativ dhe e ngarkon atë në një zonë të caktuar të memorjes dhe e ekzekuton.
- Bërthama ngarkon gjithë sistemin tjetër operativ.
Për detyrën time, ky nivel detajesh është i mjaftueshëm, mund të lexoni më shumë për këtë . Zonat "disa" të përmendura më sipër ndryshojnë nga një pllakë në tjetrën, që krijon disa vështirësi në instalim. Ngarkimi i platformave ARM server nëpërmjet UEFI, por për momentin kjo nuk është e disponueshme për të gjithë, do të duhet ta ndërtoni gjithçka veçmas.
Ndërtoni sistemin e fichiers rrënjësor
Për të filluar, nevojitet të përgatiten seksionet. Das U-Boot mbështet sisteme të ndryshme skedarësh, unë zgjodha FAT32 për /boot dhe ext3 për rrënjën, kjo është një ndarje standart për imazhet e Kali nën ARM. Unë do të përdor GNU Parted, por ju mund të bëni të njëjtën gjë me fdisk. Gjithashtu do të nevojiten dosfstools dhe e2fsprogs për krijimin e sistemeve të skedarëve: apt install parted dosfstools e2fsprogs.
Ndajmë SD-kartën:
- Përcaktojmë SD-kartën si të përdorë ndarjen MBR:
parted -s /dev/mmcblk0 mklabel msdos - Krijojmë një seksion për
/bootnë 128 megabajt:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Megabajti i parë i harxhuar duhet të lihet për ndarjen vetë dhe për boot loader-in. - Krijojmë sistemin e skedarëve të rrënjës në gjithë kapacitetin e mbetur:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Nëse ndodhi që skedarët e ndarjeve të mos krijohen ose të ndryshohen, duhet të kryeni `partprobe`, atëherë tabela e ndarjeve do të lexohet përsëri.
- Krijojmë sistemin e skedarëve për ndarjen e ngarkesës me etiketën
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Krijojmë sistemin e skedarëve të rrënjës me etiketën
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Shumë mirë, tani mund ta mbushim atë. Për këtë do të nevojitet gjithashtu debootstrap, një utilitare për krijimin e sistemëve të skedarëve në operacionet e ngjashme me Debian: apt install debootstrap.
Krijojmë sistemin e skedarëve:
- Montojmë seksionin në
/mnt/(përdorni një pikë montimi që ju përshtatet më mirë):mount /dev/mmcblk0p2 /mnt - Të vërtetë mbushim sistemin e skedarëve:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametri--includetregon të instalohet disa paketa shtesë, unë kam përmendur emulatorin e ndërtuar statikisht QEMU. Ai lejon ekzekutiminchrootnë mjedisin ARM. Kuptimin e opsioneve të tjera mund ta shihni nëman debootstrap. Mos harroni, që çdo bord ARM nuk mbështet arkitekturënarmhf. - Për shkak të ndryshimit të arkitekturave
debootstrapizbatohet në dy faza, faza e dytë zbatohet kështu:chroot /mnt/ /debootstrap/debootstrap --second-stage - Tani duhet të chroot:
chroot /mnt /bin/bash - Mbushim
/etc/hostsdhe/etc/hostnameFS-in e synuar. Mbushni sipas analogjisë me përmbajtjen në kompjuterin tuaj lokal, vetëm mos harroni të zëvendësoni emrin e hostit. - Mund të konfiguroj gjithçka tjetër. Në veçanti po instaloj
locales(çelësat e depozitës), rikonfiguroj lokalitetet dhe zonën e kohës (dpkg-reconfigure locales tzdata). Mos harroni të caktoni fjalëkalimin me komandënpasswd. - Caktoni fjalëkalimin për
rootme komandënpasswd. - Përgatitjet e imazhit për mua përfundojnë duke mbushur
/etc/fstabbrenda/mnt/.
Do ta ngarkoj në përputhje me etiketat e krijuara më parë, kështu që përmbajtja do të jetë e tillë:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Më në fund, mund të montojmë pjesën e ngarkimit, që na nevojitet për bërthamën: `mount /dev/mmcblk0p1 /mnt/boot/`
Ndërtimi i Linux
Për të ndërtuar bërthamën (dhe pastaj ngarkuesin) në Debian Testing, duhet të instaloni paketën standarde të GCC, GNU Make dhe skedarët e titujve të Bibliotekës GNU C për arkitekturën e synuar (e kam) armhf), si dhe titujt OpenSSL, kalkulatorin e nivelit të komandës bc, bison dhe flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Duke qenë se ngarkuesi në mënyrë default kërkon skedarin zImage në sistemin e skedarëve të pjesës së ngarkimit, është koha të ndajmë flash diskun.
- Klonimi i bërthamës merr shumë kohë, prandaj thjesht do ta shkarkoj:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Ta shpërndajmë dhe të kalojmë në direktorinë me burimet:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1 - Konfigurojmë para kompilimit:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfig kjo ndodhet në direktorinëarch/arm/configs/. Nëse nuk ka të tillë, mund të provoni të gjeni dhe shkarkoni një gati dhe ta kaloni emrin e skedarit në këtë direktori në parametrinKBUILD_DEFCONFIG. Në rastin më të keq kaloni direkt në pikën tjetër. - Mundësisht mund të rregulloni cilësimet:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - Dhe të kryejmë ndërtime kroskompleks.
bëni ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Tani mund të kopjoni skedarin me bërthamën:
cp arch/arm/boot/zImage /mnt/boot/ - Dhe skedarët me DeviceTree (përshkrimi i harduerit në bord):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - Dhe instaloni modulo të zbuluara si skedarë të veçantë:
bëni ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Bërthama është gati. Tani mund të çmontoni gjithçka: umount /mnt/boot/ /mnt/
Das U-Boot
Duke qenë se ngarkuesi është interaktiv, për të verifikuar funksionimin e tij mjafton vetë bordi, mediumi i ruajtjes, dhe opsionalisht një pajisje USB-to-UART. Kështu, mund të shtyni bërthamën dhe OS-në për më vonë.
Absolutisht shumica e prodhuesve ofrojnë përdorimin e Das U-Boot për ngarkimin fillestar. Mbështetje e plotë zakonisht ofrohet në fork-un e tyre, por edhe në upstream kontribuoni nuk harrojnë. Në rastin tim, bordi mbështetet në , prandaj e injorova.
Të krijojmë vetë ngarkuesin:
- Klononi degën stabile të depozitës:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Shkoni në direktoren përkatëse:
cd u-boot - Përgatitni konfigurimin e ndërtimit:
bëni mx6ull_14x14_evk_defconfig. Kjo funksionon vetëm nëse konfigurimi ndodhet në vetë Das U-Boot; në të kundërt, do t'ju duhet të gjeni konfigurimin e prodhuesit dhe ta vendosni atë në rrënjën e repertorit në një skedë..config, ose të ndërtosh një imazh në mënyrën e rekomanduar nga prodhuesi. - Ndërtojmë imazhin e bootloader-it me cross-compiler.
armhf:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Si rezultat, ne marrim skedarin u-boot.imx, ky është një imazh i gatshëm që mund të regjistrohet në një USB. Regjistrojmë në SD kartën, duke kaluar 1024 byte të parë. Pse zgjodha targetin u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в . Për pllakata të tjera, procesi i ndërtimit të imazhit dhe regjistrimit mund të ndryshojë pak.
Përfundoi, mund të startojmë. Bootloader-i duhet të raportojë versionin e tij, disa informacion rreth pllakës dhe të përpiqet të gjeni imazhin e bërthamës në ndarjen e caktuar. Në rast dështimi, do të përpiqet të niste përmes rrjetit. Në përgjithësi, dalja është mjaft e detajuar, duke mundësuar gjetjen e gabimeve në rast probleme.
Në vend të përfundimit
A e dinit se balli i delfinëve nuk është kockor? Kjo është për të vërtetë një sy i tretë, një lente dhjami për ekolokacionin!
Burimi: habr.com
