Nisja e GNU/Linux në një tabelë ARM nga e para (duke përdorur Kali dhe iMX.6 si shembull)

tl; dr: Po ndërtoj një imazh Kali Linux për një kompjuter ARM, në program debootstrap, linux и u-boot.

Nisja e GNU/Linux në një tabelë ARM nga e para (duke përdorur Kali dhe iMX.6 si shembull)

Nëse keni blerë disa softuer jo shumë të njohur me një tabelë, mund të përballeni me mungesën e një imazhi të shpërndarjes suaj të preferuar për të. Përafërsisht e njëjta gjë ndodhi me planifikuar Flipper One. Thjesht nuk ka Kali Linux për IMX6 (po përgatitem), kështu që duhet ta mbledh vetë.

Procesi i shkarkimit është mjaft i thjeshtë:

  1. Pajisja është inicializuar.
  2. Nga disa zona në pajisjen e ruajtjes (karta SD/eMMC/etj) ngarkuesi i ngarkimit lexohet dhe ekzekutohet.
  3. Bootloader kërkon kernelin e sistemit operativ dhe e ngarkon atë në një zonë memorie dhe e ekzekuton atë.
  4. Kerneli ngarkon pjesën tjetër të OS.

Ky nivel detajesh është i mjaftueshëm për detyrën time, ju mund të lexoni detajet në një artikull tjetër. "Disa" zona të përmendura më sipër ndryshojnë nga bordi në bord, gjë që krijon disa vështirësi instalimi. Po ngarkon platformat e serverit ARM duke u përpjekur për të standardizuar duke përdorur UEFI, por ndërsa kjo nuk është e disponueshme për të gjithë, do t'ju duhet të mblidhni gjithçka veç e veç.

Ndërtimi i sistemit të skedarëve rrënjë

Së pari ju duhet të përgatisni seksionet. Das U-Boot mbështet sisteme të ndryshme skedarësh, unë zgjodha FAT32 për të /boot dhe ext3 për root, kjo është faqosja standarde e imazhit për Kali në ARM. Unë do të përdor GNU Parted, por ju mund të bëni të njëjtën gjë në një mënyrë më të njohur fdisk. Do t'ju duhet gjithashtu dosfstools и e2fsprogs për të krijuar një sistem skedari: apt install parted dosfstools e2fsprogs.

Ne shënojmë kartën SD:

  1. Shënoni kartën SD si duke përdorur ndarjen MBR: parted -s /dev/mmcblk0 mklabel msdos
  2. Krijo një seksion nën /boot për 128 megabajt: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Megabajti i parë i humbur duhet të lihet për vetë shënimin dhe për ngarkuesin.
  3. Ne krijojmë një sistem skedari rrënjësor për të gjithë kapacitetin e mbetur: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Nëse papritmas skedarët e ndarjes nuk janë krijuar ose nuk janë ndryshuar, ju duhet të ekzekutoni 'partprobe', atëherë tabela e ndarjes do të rilexohet.
  5. Krijo një sistem skedari për ndarjen e nisjes me etiketën BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Krijo një sistem skedari rrënjë me një etiketë ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Shkëlqyeshëm, tani mund ta plotësoni. Për këtë do t'ju duhet gjithashtu debootstrap, një mjet për krijimin e sistemeve të skedarëve rrënjë për sistemet operative të ngjashme me Debian: apt install debootstrap.

Ne mbledhim FS:

  1. Montoni ndarjen brenda /mnt/ (përdor një pikë montimi më të përshtatshme): mount /dev/mmcblk0p2 /mnt
  2. Ne në fakt mbushim sistemin e skedarëve: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Parametri --include tregon për të instaluar shtesë disa paketa, kam specifikuar një emulator QEMU të ndërtuar në mënyrë statike. Ju lejon të performoni chroot në mjedisin ARM. Kuptimi i opsioneve të mbetura mund të gjendet në man debootstrap. Mos harroni se jo çdo bord ARM e mbështet arkitekturën armhf.
  3. Për shkak të ndryshimit në arkitekturë debootstrap kryhet në dy faza, e dyta kryhet si kjo: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Tani ju duhet ta vidhosni atë: chroot /mnt /bin/bash
  5. Ne plotësojmë /etc/hosts и /etc/hostname objektiv FS. Plotësoni njësoj si përmbajtjen në kompjuterin tuaj lokal, thjesht mos harroni të zëvendësoni emrin e hostit.
  6. Ju mund të personalizoni gjithçka tjetër. Në veçanti, unë instaloj locales (çelësat e depove), rikonfiguroni vendndodhjet dhe zonën kohore (dpkg-reconfigure locales tzdata). Mos harroni të vendosni fjalëkalimin me komandën passwd.
  7. Vendosni një fjalëkalim për root ekipi passwd.
  8. Përgatitja e imazhit për mua përfundon me mbushje /etc/fstab brenda /mnt/.

Unë do të ngarkoj në përputhje me etiketat e krijuara më parë, kështu që përmbajtja do të jetë si kjo:

LABEL=ROOTFS / gabime automatike=rimontim-ro 0 1
LABEL=BOOT /parazgjedhjet automatike të nisjes 0 0

Më në fund, mund të montoni ndarjen e nisjes, do të na duhet për kernelin: `mount /dev/mmcblk0p1 /mnt/boot/`

Ndërtimi i Linux-it

Për të ndërtuar kernelin (dhe më pas ngarkuesin) në Debian Testing, ju duhet të instaloni një grup standard të skedarëve të titullit GCC, GNU Make dhe GNU C për arkitekturën e synuar (për mua armhf), si dhe kokat e OpenSSL, kalkulatori i konsolës bc, bison и flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Meqenëse ngarkuesi i paracaktuar kërkon skedarin zImage në sistemin e skedarëve të ndarjes së nisjes, është koha për të ndarë flash drive.

  1. Duhet shumë kohë për të klonuar kernelin, kështu që unë thjesht do të shkarkoj: wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Le të shpaketojmë dhe të shkojmë te drejtoria e burimit: tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
  2. Konfiguro para përpilimit: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurimi ndodhet në drejtori arch/arm/configs/. Nëse nuk ka asnjë, mund të provoni të gjeni dhe shkarkoni një të gatshme dhe të kaloni emrin e skedarit në këtë drejtori si parametër. KBUILD_DEFCONFIG. Si mjet i fundit, kaloni menjëherë në pikën tjetër.
  3. Opsionale mund të ndryshoni cilësimet: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. Dhe ndërthurni imazhin: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Tani mund të kopjoni skedarin e kernelit: cp arch/arm/boot/zImage /mnt/boot/
  6. Dhe skedarët nga DeviceTree (përshkrimi i harduerit në tabelë): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. Dhe instaloni modulet e mbledhura në formën e skedarëve të veçantë: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install

Bërthama është gati. Mund të çmontoni gjithçka: umount /mnt/boot/ /mnt/

Das U-Boot

Meqenëse ngarkuesi është interaktiv, gjithçka që ju nevojitet për të testuar funksionimin e tij është vetë bordi, një pajisje ruajtëse dhe opsionalisht një pajisje USB-në-UART. Kjo do të thotë, ju mund ta shtyni kernelin dhe OS për më vonë.

Shumica dërrmuese e prodhuesve ofrojnë të përdorin Das U-Boot për çizmet fillestare. Mbështetja e plotë zakonisht ofrohet në pirunin e tyre, por ata nuk harrojnë të kontribuojnë në rrjedhën e sipërme. Në rastin tim, bordi mbështetet brenda kryesore, poitom pirun E injorova.

Le të mbledhim vetë ngarkuesin:

  1. Ne klonojmë degën e qëndrueshme të depove: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Le të shkojmë te vetë drejtoria: cd u-boot
  3. Përgatitja e konfigurimit të ndërtimit: make mx6ull_14x14_evk_defconfig. Kjo funksionon vetëm nëse konfigurimi është në vetë Das U-Boot, përndryshe do t'ju duhet të gjeni konfigurimin e prodhuesit dhe ta vendosni në rrënjën e depove në një skedar .config, ose montoni në çdo mënyrë tjetër të rekomanduar nga prodhuesi.
  4. Ne mbledhim vetë imazhin e ngarkuesit duke përdorur një ndër-përpilues armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Si rezultat marrim skedarin u-boot.imx, ky është një imazh i gatshëm që mund të shkruhet në një flash drive. Ne shkruajmë në kartën SD, duke kapërcyer 1024 bajtët e parë. Pse zgjodha Target u-boot.imx? Pse humba saktësisht 1024 bajt? Kjo është ajo që ata propozojnë të bëjnë në dokumentacionin. Për bordet e tjera, procesi i krijimit dhe regjistrimit të imazhit mund të jetë paksa i ndryshëm.

U krye, mund të nisësh. Bootloader duhet të raportojë versionin e tij, disa informacione rreth bordit dhe të përpiqet të gjejë imazhin e kernelit në ndarje. Nëse nuk ka sukses, do të përpiqet të niset përmes rrjetit. Në përgjithësi, dalja është mjaft e detajuar, mund ta gjeni gabimin nëse ka një problem.

Në vend të një përfundimi

A e dini se balli i një delfini nuk është kockor? Është fjalë për fjalë një sy i tretë, një lente yndyrore për ekolokacion!

Nisja e GNU/Linux në një tabelë ARM nga e para (duke përdorur Kali dhe iMX.6 si shembull)

Nisja e GNU/Linux në një tabelë ARM nga e para (duke përdorur Kali dhe iMX.6 si shembull)

Burimi: www.habr.com