tl;dr: kogun Kali Linuxi pilti ARM-arvutit, kasutades programmi debootstrap, linux ja u-boot.
Kui olete ostnud mõne mitte väga populaarse üheplaadi arvuti, olete tõenäoliselt kokku puutunud sellega, et lemmikdistributsioonile pole pilti. Umbes sama toimus ka . Kali Linuxi IMX6 jaoks lihtsalt ei ole (ma valmistan seda), seega pean selle ise kokku panema.
Laadimisprotsess on piisavalt lihtne:
- Riistvara initsialiseeritakse.
- Mäluseadmest (SD-kaart/eMMC/jne) loetakse ja käivitatakse bootloader.
- Bootloader otsib operatsioonisüsteemi kernelit ja laadib selle teatud mälupiirkonda ning käivitab selle.
- Kernel laadib kogu ülejäänud operatsioonisüsteemi.
Minu ülesande jaoks piisab sellisest detailitasemest, täiendavaid üksikasju võite lugeda . Ülalmainitud "teatud" piirkonnad erinevad plaadilt plaadile, mis tekitab mõned paigaldamisega seotud raskused. Serverite ARM-platvormide laadimist UEFI abil, kuid kuna see pole veel kõikidele saadaval, tuleb kõik eraldi kokku panna.
Kasutaja failisüsteemi kokku panemine
Alustamiseks tuleb osad ette valmistada. Das U-Boot toetab erinevaid failisüsteeme, valisin FAT32 ja /boot ext3 juurena, see on standardne partitsioonide jaotus Kali jaoks ARM-i all. Kasutan GNU Parted'i, kuid saate teha sama tuttavama fdisk. Samuti on vajalikud dosfstools ja e2fsprogs failisüsteemide loomiseks: apt install parted dosfstools e2fsprogs.
Partitsioneerime SD-kaardi:
- Märgistame SD-kaardi MBR-partitsiooniga:
parted -s /dev/mmcblk0 mklabel msdos - Loome partitsiooni
/boot128 megabaidi peale:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Esimene vahele jäetud megabait tuleb jätta partitsiooni ja laadija jaoks. - Loome juurfailisüsteemi kogu ülejäänud mahule:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Kui teie osade failid ei loonud või ei muutunud, tuleb käivitada `partprobe`, siis loetakse partitsioonide tabel uuesti.
- Loome käivitamispartitsiooni failisüsteemi märgisega
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Loome juurfailisüsteemi märgisega
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Suurepärane, nüüd saab seda täita. Selleks on lisaks vajalik debootstrap, utiliit Debian-põhiste operatsioonisüsteemide juurfailisüsteemide loomiseks: apt install debootstrap.
Kogume failisüsteemi:
- Kandke partitsioon punkti
/mnt/(kasutage endale mugavamat paigalduspunkti):mount /dev/mmcblk0p2 /mnt - Hakkame failisüsteemi täitma:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameeter--includenäitab, et tuleb lisada mõned paketid, ma märkisin staatiliselt ehitatud QEMU emulaatori. See võimaldab käivitadachrootARM-keskkonnas. Ülejäänud valikute tähendust saab vaadataman debootstrap. Ärge unustage, et mitte iga ARM-plaadiga ei toeta arhitektuuriarmhf. - Arhitektuuride erinevuste tõttu
debootstraptoimub see kahes etapis, teine etapp viiakse läbi nii:chroot /mnt/ /debootstrap/debootstrap --second-stage - Nüüd peame chrootima:
chroot /mnt /bin/bash - Täidame
/etc/hostsja/etc/hostnamesihtfailisüsteemi. Täitke sarnaselt oma lokaalse arvuti sisu, ärge unustage ainult hostinime vahetada. - Saame muuta ülejäänud seadeid. Täpsemalt paigaldan ma
locales(repository võtmed), seadistan uuesti lokaalid ja ajavööndi (dpkg-reconfigure locales tzdata). Ärge unustage määrata parool käskupasswd. - Määrame parooli
rootkäskupasswd. - Pildi valmistamine lõpeb minu jaoks täitmisega
/etc/fstabsisemine/mnt/.
Laadin üles vastavalt varem loodud siltidele, seega sisu on järgmine:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Lõpuks saame mountida käivitamisosa, seda on meil kerneliks vaja: `mount /dev/mmcblk0p1 /mnt/boot/`
Linuxi koostamine
Kernel'i (ja seejärel laadija) koostamiseks Debian Testingus tuleb installida standardkomplekt GCC-st, GNU Make'ist ja GNU C Library pealdisfailidest sihtarchitectuurile (mul on armhf), samuti OpenSSL pealdised ja konsooli kalkulaator bc, bison ja flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Kuna laadija otsib vaikimisi faili zImage käivitamisosa failisüsteemist, on aeg jagada mälupulk.
- Kerneli kloonimine võtaks liiga kaua, seega lasen lihtsalt alla:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Lahti pakkime ja liigume allika kausta:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1 - Konfigureerime enne kompileerimist:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfiguratsioon asub kataloogisarch/arm/configs/. Kui seda ei ole, võite proovida leida ja alla laadida valmis ja edastada faili nime selle katalooge parameetriksKBUILD_DEFCONFIG. Äärmuslikul juhul minge kohe järgmisse punkti. - Valikuliselt saate seadeid kohandada:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - Ja cross-kompileerime pildi:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Nüüd saab kopeerida kernelfaili:
cp arch/arm/boot/zImage /mnt/boot/ - Ja seadme puu failid (olemas oleva riistvara kirjeldus):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - Ja installige eraldi failidena koostatud moodulid:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Kern on valmis. Võib kõik lahti monteerida: umount /mnt/boot/ /mnt/
Das U-Boot
Kuna laadija on interaktiivne, piisab tema töö kontrollimiseks lihtsalt plaadist, salvestusseadmest ja valikulisest USB-to-UART seadmest. See tähendab, et võite tuuma ja operatsioonisüsteemi jätta hilisemaks.
Enamik tootjatest pakub Das U-Booti kasutamiseks alglaadimiseks. Täielikku tuge pakutakse tavaliselt oma fork'is, kuid ülesvoolu katkestada ei unustata. Minu puhul toetatakse plaati , seega ma ignoreerisin.
Koostame laadija ise:
- Kloonime stabiilse haru hoidlast:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Liigume otse kausta:
cd u-boot - Valmistame koostamiseks konfiguratsiooni:
make mx6ull_14x14_evk_defconfig. See töötab ainult siis, kui konfiguratsioon on Das U-Booti sees, vastasel juhul peate leidma tootja konfi ja panema selle oma repo juurese faili..config, või koguda muul tootjalt soovitatud viisil. - Kogume laadurite kujutise ristkompilaatori abil.
armhf:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Sellega saame faili u-boot.imx, see on valmis kuvand, mille saab salvestada mälupulgale. Salvestame SD-kaardile, mööda minnes esimestest 1024 baitidest. Miks ma valisin sihtmärgi u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в . Muude plaatide puhul võib pildi koostamise ja salvestamise protsess veidi erineda.
Valmis, nüüd saab käivitada. Laadur peaks teatama oma versioonist, teatud teavet plaadi kohta ja proovima leida tuuma kuvandit jaotises. Edasi lähenedes proovitakse käivitada võrgust. Üldiselt on väljund üsna detailne, saate probleemi korral leida vea.
Kokkuvõtte asemel
Kas te teadsite, et delfiini ots ei ole luustikuline? See on sõna-sõnalt kolmas silm, rasva lääts ehholokatsiooni jaoks!
Allikas: habr.com
