tl;dr: po krijoj një imazh të Kali Linux për kompjuterin ARM, në programin debootstrap, linux dhe u-boot.
Nëse keni blerë ndonjë njësi me një pllakë që nuk është shumë e njohur, mund të keni hasur në mungesën e një imazhi të distribucionit tuaj të preferuar. Mëngjesin e njëjtë ndodhi me . Kali Linux për IMX6 thjesht nuk ekziston (po e përgatis), prandaj duhet ta krijoj vetë.
Procesi i ngarkimit është mjaft i thjeshtë:
- Pajisja inicializohet.
- Nga një zonë e caktuar në pajisjen e memories (SD-kartelë/eMMC/etc), ngarkohet dhe ekzekutohet ngarkuesi.
- Ngarkuesi kërkon bërthamën e sistemit operativ dhe e ngarkon në një zonë të caktuar të memories dhe e ekzekuton.
- Bërthama ngarkon të gjithë OS-në tjetër.
Për nevojat e mia, ky nivel detajesh mjafton, të dhënat e tjera mund të lexoni . Zonalet e përmendura më sipër ndryshojnë nga llamba në llambë, gjë që krijon disa vështirësi me instalimin. Ngarkimi i platformave ARM server nëpërmjet UEFI, por deri tani kjo nuk është e disponueshme për të gjithë, do të duhet ta krijojmë gjithçka veçmas.
Ndërtimi i sistemit të skedave
Së pari, duhet të përgatitni ndarjet. U-Boot mbështet FS të ndryshme, unë zgjodha FAT32 për /boot dhe ext3 për rrënjën, kjo është ndarja standarde e imazheve për Kali në ARM. Do të përdor GNU Parted, por ju mund ta bëni të njëjtën gjë me më të njohurin fdisk. Po ashtu, do të duhen dosfstools dhe e2fsprogs për krijimin e FS: apt install parted dosfstools e2fsprogs.
E ndarim SD-kartelën:
- Shënojmë SD-kartelën si duke përdorur ndarjen MBR:
parted -s /dev/mmcblk0 mklabel msdos - Krijojmë një ndarje për
/bootnë 128 megabajt:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Megabajt i parë i lënë është për vetë ndarjen dhe për ngarkuesin. - Krijojmë sistemin rrënjësor në të gjithë kapacitetin e mbetur:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Nëse ndonjëherë nuk u krijuan ose nuk u ndryshuan skedarët e ndarjeve, duhet të ekzekutoni `partprobe`, atëherë tabela e ndarjeve do të rilexohet.
- Krijojmë sistemin e skedave të ndarjes së ngarkimit me etiketë
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Krijojmë sistemin rrënjor me etiketë
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Shkëlqyeshëm, tani mund ta mbushim. Për këtë do të nevojitet gjithashtu debootstrap, një mjet për krijimin e sistemeve rrënjësore të sistemeve operuese të ngjashme me Debian: apt install debootstrap.
Krijojmë FS:
- Monte ndarjen në
/mnt/(përdorni një pikë montimi më të përshtatshme për ju):mount /dev/mmcblk0p2 /mnt - Faqi që plani do të mbushet systems file:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parametri--includetregon për të instaluar disa paketa shtesë, unë kam përmendur emulatorin QEMU të ndërtuar statikisht. Ai lejon të ekzekutohetchrootnë mjedisin ARM. Kuptimi i opsioneve të tjera mund të shikohet nëman debootstrap. Mos harroni, që jo çdo pllakë ARM mbështet arkitekturënarmhf. - Për shkak të ndryshimeve në arkitekturë
debootstrapekzekutohet në dy faza, faza e dytë ekzekutohet kështu:chroot /mnt/ /debootstrap/debootstrap --second-stage - Tani duhet të bëjmë chroot:
chroot /mnt /bin/bash - Plotësojmë
/etc/hostsdhe/etc/hostnameFS i synuar. Plani do të mbushet në përputhje me përmbajtjen në kompjuterin tuaj lokal, vetëm mos harroni të zëvendësoni emrin e host-it. - Mund të përshtatni gjithçka tjetër. Në veçanti unë instaloj përsëri
locales(çelësat e repositorit), konfiguroj lokalet dhe zonën e kohës (dpkg-reconfigure locales tzdata). Mos harroni të caktoni një fjalëkalim me komandënpasswd. - Duke caktuar fjalëkalim për
rootnëpërmjet komandës.passwd. - Përgatitja e imazhit për mua përfundon duke mbushur
/etc/fstabbrenda/mnt/.
Do ta ngarkoj sipas etiketave të krijuara më parë, prandaj përmbajtja do të jetë kështu:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Së fundi, mund të montoni seksionin e ngarkesës, do 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 ngarkuesin më vonë) në Debian Testing, është e nevojshme të instalohet seti standard i GCC, GNU Make dhe skedarët e titullit nga GNU C Library për arkitekturën e synuar (për mua armhf), si dhe skedarët e titullit OpenSSL, kalkulatori i konsolës bc, bison dhe flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Ashtu siç ngarkuesi i paracaktuar kërkon skedarin zImage në sistemin e skedave të seksionit të ngarkesës, është koha për të ndarë flash drive-in.
- Kloni bërthamën është shumë e gjatë, prandaj thjesht do ta shkarkoj:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Zbërthejmë dhe 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. Konfigurimi ndodhet në direktorinëarch/arm/configs/. Nëse nuk ka një të tillë, mund të provoni ta gjeni dhe shkarkoni një të gatshëm dhe të transmetoni emrin e skedarit në këtë direktori si një parametërKBUILD_DEFCONFIG. Në rastin më të keq, kaloni menjëherë në pikën tjetër. - Opsionalisht mund të rregulloni cilësimet:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - Dhe kryejmë ndër-kompilimin e imazhit:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Tani mund të kopjoni skedarin me bërthamat:
cp arch/arm/boot/zImage /mnt/boot/ - Dhe skedarët me DeviceTree (përshkrimi i harduerit të pranishëm në bord):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - Dhe instaloni modulat që janë ndarë si skedarë të veçantë:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Kernel-i është gati. Mund të shkëputni 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, pajisja e ruajtjes dhe opcionalisht pajisja USB-to-UART. Kuptohet, mund t’i lëmë kernel-in dhe OS-in për më vonë.
Absolutisht shumica e prodhuesve ofrojnë të përdorin Das U-Boot për ngarkimin fillestar. Mbështetje e plotë zakonisht ofrohet në fork-un e tyre të veçantë, por nuk harrojnë të kontribuojnë as në upstream. Në rastin tim, bordi mbështetet në , prandaj e kam injoruar.
Po mbledhim vetë ngarkuesin:
- Klonojmë degën stabile të depove:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Shkonte në drejtorinë përkatëse:
cd u-boot - Përgatisim konfigurimin për ndërtim:
make mx6ull_14x14_evk_defconfig. Kjo funksionon vetëm nëse konfigurimi ekziston në vetë Das U-Boot, në të kundërt do t’ju nevojitet të gjeni konfigurimin e prodhuesit dhe ta vendosni atë në rrënjën e depove në skedarin.config, ose të ndërtoni ndryshe një imazh sipas rekomandimeve të prodhuesit. - Po mbledhim vetë imazhin e ngarkuesit me ndihmën e cross-compiler-it
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ë shkruhet në një flash disk. Shkruajmë në kartën SD, duke kaluar 1024 bytes e para. Pse e zgjodha targetin u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в . Për bordet e tjera, procesi i ndërtimit të imazhit dhe shkrimit mund të ndryshojë pak.
Gati, mund të ngarkohemi. Ngarkuesi duhet të raportojë versionin e tij, disa informacione rreth bordit dhe të përpiqet të gjejë imazhin e kernel-it në ndarjen. Në rast të dështimit, do të përpiqet të ngarkohet përmes rrjetit. Në përgjithësi, dalja është mjaft e detajuar, mund të gjeni gabimin në rast problemi.
Në përfundim
A e dinit se balli i delfinit nuk është kockë? Ky është aq në të vërtetë një sy i tretë, një lente dhjami për ekolokacionin!
Burimi: habr.com
