Nisëm me GNU/Linux në një pllakë ARM nga zero (me shembullin e Kali dhe iMX.6)

tl;dr: po bëj një imazh të Kali Linux për një kompjuter ARM, në programin debootstrap, linux dhe u-boot.

Nisëm me GNU/Linux në një pllakë ARM nga zero (me shembullin e Kali dhe iMX.6)

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 Flipper One. 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ë:

  1. Hidhen në funksion pajisjet.
  2. Nga disa zona në pajisjen e ruajtjes (SD kartë/eMMC/etj) lexohen dhe ekzekutohen ngarkuesit.
  3. Ngarkuesi kërkon bërthamën e sistemit operativ dhe e ngarkon atë në një zonë të caktuar të memorjes dhe e ekzekuton.
  4. 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ë në një artikull tjetër. 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 përpiqet të standardizohet 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:

  1. Përcaktojmë SD-kartën si të përdorë ndarjen MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Krijojmë një seksion për /boot në 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.
  3. Krijojmë sistemin e skedarëve të rrënjës në gjithë kapacitetin e mbetur: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. 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.
  5. Krijojmë sistemin e skedarëve për ndarjen e ngarkesës me etiketën BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. 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:

  1. Montojmë seksionin në /mnt/ (përdorni një pikë montimi që ju përshtatet më mirë): mount /dev/mmcblk0p2 /mnt
  2. 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 --include tregon të instalohet disa paketa shtesë, unë kam përmendur emulatorin e ndërtuar statikisht QEMU. Ai lejon ekzekutimin chroot në mjedisin ARM. Kuptimin e opsioneve të tjera mund ta shihni në man debootstrap. Mos harroni, që çdo bord ARM nuk mbështet arkitekturën armhf.
  3. Për shkak të ndryshimit të arkitekturave debootstrap izbatohet në dy faza, faza e dytë zbatohet kështu: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Tani duhet të chroot: chroot /mnt /bin/bash
  5. Mbushim /etc/hosts dhe /etc/hostname FS-in e synuar. Mbushni sipas analogjisë me përmbajtjen në kompjuterin tuaj lokal, vetëm mos harroni të zëvendësoni emrin e hostit.
  6. 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ën passwd.
  7. Caktoni fjalëkalimin për root me komandën passwd.
  8. Përgatitjet e imazhit për mua përfundojnë duke mbushur /etc/fstab brenda /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.

  1. 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
  2. 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ë parametrin KBUILD_DEFCONFIG. Në rastin më të keq kaloni direkt në pikën tjetër.
  3. Mundësisht mund të rregulloni cilësimet: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Dhe të kryejmë ndërtime kroskompleks. bëni ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Tani mund të kopjoni skedarin me bërthamën: cp arch/arm/boot/zImage /mnt/boot/
  6. Dhe skedarët me DeviceTree (përshkrimi i harduerit në bord): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. 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ë marrëveshjen kryesore, prandaj fork e injorova.

Të krijojmë vetë ngarkuesin:

  1. Klononi degën stabile të depozitës: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Shkoni në direktoren përkatëse: cd u-boot
  3. 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.
  4. 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 байта? Так предлагают сделать в dokumentacion. 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!

Nisëm me GNU/Linux në një pllakë ARM nga zero (me shembullin e Kali dhe iMX.6)

Nisëm me GNU/Linux në një pllakë ARM nga zero (me shembullin e Kali dhe iMX.6)

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster