tl; dr: Ehitan programmis Kali Linuxi pilti ARM-arvutile debootstrap
, linux
и u-boot
.
Kui ostsite mõne mitte eriti populaarse ühe plaadi tarkvara, võite silmitsi seista sellega, et teie lemmiklevituse pilt puudub. Umbes sama juhtus ka
Allalaadimise protsess on üsna lihtne:
- Riistvara initsialiseeritakse.
- Salvestusseadme mõnes piirkonnas (SD-kaart/eMMC/jne) loetakse alglaadurit ja see käivitatakse.
- Alglaadur otsib operatsioonisüsteemi tuuma ja laadib selle mõnda mälupiirkonda ja käivitab selle.
- Kernel laadib ülejäänud OS-i.
Minu ülesande jaoks piisab sellisest detailsusest, saate lugeda üksikasju
Juurfailisüsteemi loomine
Kõigepealt peate sektsioonid ette valmistama. Das U-Boot toetab erinevaid failisüsteeme, valisin FAT32 jaoks /boot
ja ext3 root jaoks, see on Kali standardne pildipaigutus ARM-is. Ma kasutan GNU Partedi, kuid saate seda teha tuttavamal viisil fdisk
. Sul läheb ka vaja dosfstools
и e2fsprogs
failisüsteemi loomiseks: apt install parted dosfstools e2fsprogs
.
Märgistame SD-kaardi:
- Märkige SD-kaart MBR-i partitsiooni kasutavaks:
parted -s /dev/mmcblk0 mklabel msdos
- Looge jaotis alla
/boot
128 megabaidi jaoks:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Esimene vahelejäänud megabait tuleb jätta märgistuse enda ja alglaaduri jaoks. - Loome juurfailisüsteemi kogu ülejäänud mahu jaoks:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Kui teie partitsioonifaile pole äkki loodud või neid pole muudetud, peate käivitama `partprobe', seejärel loetakse partitsioonitabel uuesti.
- Looge sildiga alglaadimise partitsiooni jaoks failisüsteem
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Looge sildiga juurfailisüsteem
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Suurepärane, nüüd saate selle täita. Selleks vajate lisaks debootstrap
, utiliit juurfailisüsteemide loomiseks Debiani-sarnaste operatsioonisüsteemide jaoks: apt install debootstrap
.
Kogume FS-i:
- Paigaldage vahesein sisse
/mnt/
(kasutage mugavamat kinnituspunkti):mount /dev/mmcblk0p2 /mnt
- Tegelikult täidame failisüsteemi:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
... Parameeter--include
viitab mõne paketi täiendavale installimisele, määrasin staatiliselt ehitatud QEMU emulaatori. See võimaldab teil esinedachroot
ARM keskkonnas. Ülejäänud valikute tähenduse leiate aadressiltman debootstrap
. Ärge unustage, et mitte iga ARM-plaat ei toeta seda arhitektuuriarmhf
. - Arhitektuuri erinevuse tõttu
debootstrap
viiakse läbi kahes etapis, teine toimub järgmiselt:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Nüüd peate selle üles keerama:
chroot /mnt /bin/bash
- Täidame
/etc/hosts
и/etc/hostname
sihtmärk FS. Täitke sama, mis kohalikus arvutis, kuid ärge unustage asendada hostinimi. - Saate kohandada kõike muud. Eelkõige paigaldan
locales
(hoidla võtmed), seadistage ümber lokaadid ja ajavöönd (dpkg-reconfigure locales tzdata
). Ärge unustage käsuga parooli määratapasswd
. - Määra parool
root
meeskondpasswd
. - Pildi ettevalmistamine minu jaoks lõppeb täidisega
/etc/fstab
jooksul/mnt/
.
Laen üles vastavalt eelnevalt loodud siltidele, nii et sisu on järgmine:
LABEL=ROOTFS / automaatsed vead=remount-ro 0 1
LABEL=BOOT /boot auto vaikeseaded 0 0
Lõpuks saate ühendada alglaadimise partitsiooni, vajame seda kerneli jaoks: `mount /dev/mmcblk0p1 /mnt/boot/
Linuxi ehitamine
Kerneli (ja seejärel alglaaduri) ehitamiseks Debiani testimisel peate installima sihtarhitektuuri jaoks standardse komplekti GCC, GNU Make ja GNU C Library päisefaile (minu jaoks armhf
), samuti OpenSSL-i päised, konsoolikalkulaator bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Kuna vaikelaadur otsib faili zImage
alglaadimispartitsiooni failisüsteemis on aeg mälupulk poolitada.
- Kerneli kloonimine võtab liiga kaua aega, nii et laadin lihtsalt alla:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Pakime lahti ja läheme allikatega kataloogi:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Seadistage enne kompileerimist:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfiguratsioon asub kataloogisarch/arm/configs/
. Kui seda pole, võite proovida valmis faili otsida ja alla laadida ning anda parameetrina selles kataloogis oleva faili nimiKBUILD_DEFCONFIG
. Viimase abinõuna liikuge kohe järgmise punkti juurde. - Valikuliselt saate sätteid muuta:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Ja kompileerige pilt:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Nüüd saate kerneli faili kopeerida:
cp arch/arm/boot/zImage /mnt/boot/
- Ja DeviceTree failid (riistvara kirjeldus tahvlil):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- Ja installige eraldi failidena kogutud moodulid:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Kernel on valmis. Saate kõik lahti ühendada: umount /mnt/boot/ /mnt/
Das U-Boot
Kuna alglaadur on interaktiivne, on selle toimimise testimiseks vaja ainult plaati ennast, salvestusseadet ja valikuliselt USB-UART-seadet. See tähendab, et saate tuuma ja OS-i hilisemaks edasi lükata.
Valdav enamus tootjaid pakub esmaseks käivitamiseks kasutada Das U-Booti. Tavaliselt pakutakse täielikku tuge nende enda hargis, kuid nad ei unusta panustada ülesvoolu. Minu puhul on tahvel sisse toetatud
Paneme alglaaduri ise kokku:
- Kloonime hoidla stabiilse haru:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Läheme kataloogi enda juurde:
cd u-boot
- Ehituskonfiguratsiooni ettevalmistamine:
make mx6ull_14x14_evk_defconfig
. See töötab ainult siis, kui konfiguratsioon on Das U-Boot'is endas, vastasel juhul peate leidma tootja konfiguratsiooni ja panema selle failis hoidla juure.config
või kokku panna muul tootja soovitatud viisil. - Bootloaderi pildi ise koostame ristkompilaatori abil
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Selle tulemusena saame faili u-boot.imx
, see on valmis pilt, mida saab kirjutada mälupulgale. Kirjutame SD-kaardile, jättes vahele esimesed 1024 baiti. Miks ma valisin Targeti? u-boot.imx
? Miks jäi mul täpselt 1024 baiti vahele? See on see, mida nad kavatsevad teha
Valmis, saate käivitada. Alglaadur peab teatama oma versioonist, osa teabest plaadi kohta ja proovima leida partitsioonilt kerneli kujutist. Kui see ebaõnnestub, proovib see käivitada võrgu kaudu. Üldiselt on väljund üsna detailne, vea leiab, kui on probleem.
Selle asemel, et järeldus
Kas teadsite, et delfiini otsaesine ei ole kondine? See on sõna otseses mõttes kolmas silm, rasvane lääts kajalokatsiooni jaoks!
Allikas: www.habr.com