tl; dr: Programoje kuriu Kali Linux vaizdą ARM kompiuteriui debootstrap
, linux
и u-boot
.
Jei įsigijote ne itin populiarią vienos plokštės programinę įrangą, galite susidurti su mėgstamiausio jos platinimo vaizdo trūkumu. Maždaug tas pats nutiko ir su
Atsisiuntimo procesas yra gana paprastas:
- Aparatinė įranga inicijuojama.
- Iš tam tikros vietos saugojimo įrenginyje (SD kortelės/eMMC/tt) nuskaitoma ir vykdoma įkrovos programa.
- Įkrovos įkroviklis ieško operacinės sistemos branduolio ir įkelia jį į tam tikrą atminties sritį ir jį vykdo.
- Branduolys įkelia likusią OS dalį.
Tokio detalumo pakanka mano užduočiai, galite perskaityti detales
Kurti šakninę failų sistemą
Pirmiausia turite paruošti skyrius. Das U-Boot palaiko skirtingas failų sistemas, aš pasirinkau FAT32 /boot
ir ext3 šakniniam, tai yra standartinis Kali vaizdo išdėstymas ARM. Aš naudosiu GNU Parted, bet jūs galite padaryti tą patį labiau pažįstamu būdu fdisk
. Jums taip pat reikės dosfstools
и e2fsprogs
Norėdami sukurti failų sistemą: apt install parted dosfstools e2fsprogs
.
Pažymime SD kortelę:
- Pažymėkite SD kortelę kaip naudojančią MBR skaidymą:
parted -s /dev/mmcblk0 mklabel msdos
- Sukurkite skyrių žemiau
/boot
128 megabaitams:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Pirmasis praleistas megabaitas turi būti paliktas pačiam žymėjimui ir įkrovos įkrovikliui. - Sukuriame šakninę failų sistemą visai likusiai talpai:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Jei staiga jūsų skaidinio failai nebuvo sukurti arba nepasikeitė, turite paleisti „partprobe“, tada skaidinių lentelė bus perskaityta iš naujo.
- Sukurkite įkrovos skaidinio failų sistemą su etikete
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Sukurkite šakninę failų sistemą su etikete
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Puiku, dabar galite jį užpildyti. Tam papildomai reikės debootstrap
, įrankis, skirtas kurti pagrindines failų sistemas į Debianą panašioms operacinėms sistemoms: apt install debootstrap
.
Mes renkame FS:
- Sumontuokite pertvarą
/mnt/
(naudokite patogesnį tvirtinimo tašką):mount /dev/mmcblk0p2 /mnt
- Iš tikrųjų užpildome failų sistemą:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
. Parametras--include
nurodo papildomai įdiegti kai kuriuos paketus, nurodžiau statiškai pastatytą QEMU emuliatorių. Tai leidžia atliktichroot
ARM aplinkoje. Likusių parinkčių reikšmę galite rastiman debootstrap
. Nepamirškite, kad ne kiekviena ARM plokštė palaiko architektūrąarmhf
. - Dėl architektūros skirtumo
debootstrap
atliekamas dviem etapais, antrasis atliekamas taip:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Dabar reikia susukti:
chroot /mnt /bin/bash
- Mes užpildome
/etc/hosts
и/etc/hostname
taikinys FS. Užpildykite taip pat, kaip ir vietinio kompiuterio turinį, tik nepamirškite pakeisti pagrindinio kompiuterio pavadinimo. - Visa kita galite pritaikyti. Visų pirma, aš montuoju
locales
(saugyklos raktai), iš naujo sukonfigūruokite lokales ir laiko juostą (dpkg-reconfigure locales tzdata
). Nepamirškite su komanda nustatyti slaptažodįpasswd
. - Nustatykite slaptažodį
root
komandapasswd
. - Vaizdo paruošimas man baigiasi užpildymu
/etc/fstab
per/mnt/
.
Įkelsiu pagal anksčiau sukurtas žymas, todėl turinys bus toks:
LABEL=ROOTFS/auto errors=remount-ro 0 1
LABEL=BOOT / boot auto defaults 0 0
Galiausiai galite prijungti įkrovos skaidinį, jo mums reikės branduoliui: `mount /dev/mmcblk0p1 /mnt/boot/
Linux kūrimas
Norėdami sukurti branduolį (o tada įkrovos įkroviklį) naudodami Debian Testing, turite įdiegti standartinį GCC, GNU Make ir GNU C Library antraštės failų rinkinį tikslinei architektūrai (man armhf
), taip pat OpenSSL antraštes, konsolės skaičiuotuvą bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Kadangi numatytasis įkroviklis ieško failo zImage
įkrovos skaidinio failų sistemoje laikas padalinti „flash drive“.
- Branduolio klonavimas užtrunka per ilgai, todėl tiesiog atsisiųsiu:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Išpakuosime ir eikime į šaltinio katalogą:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Prieš kompiliavimą sukonfigūruokite:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Konfigūracija yra katalogearch/arm/configs/
. Jei jo nėra, galite pabandyti rasti ir atsisiųsti paruoštą failą ir kaip parametrą perduoti failo pavadinimą šiame katalogeKBUILD_DEFCONFIG
. Kraštutiniu atveju nedelsdami pereikite prie kito punkto. - Pasirinktinai galite koreguoti nustatymus:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Ir sukompiliuokite vaizdą:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Dabar galite nukopijuoti branduolio failą:
cp arch/arm/boot/zImage /mnt/boot/
- Ir failai iš „DeviceTree“ (aparatinės įrangos aprašymas lentoje):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- Ir įdiekite modulius, surinktus atskirų failų pavidalu:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Branduolys yra paruoštas. Galite atjungti viską: umount /mnt/boot/ /mnt/
Das U-Boot
Kadangi įkrovos įkroviklis yra interaktyvus, norint patikrinti jo veikimą tereikia pačios plokštės, saugojimo įrenginio ir pasirinktinai USB į UART įrenginį. Tai reiškia, kad branduolį ir OS galite atidėti vėlesniam laikui.
Didžioji dauguma gamintojų siūlo naudoti Das U-Boot pradiniam įkrovimui. Visa parama paprastai teikiama jų pačių šakėje, tačiau jie nepamiršta prisidėti prie prieš srovę. Mano atveju lenta palaikoma
Surinkime patį įkrovos įkroviklį:
- Klonuojame stabilią saugyklos šaką:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Eikime į patį katalogą:
cd u-boot
- Konfigūracijos paruošimas:
make mx6ull_14x14_evk_defconfig
. Tai veikia tik jei konfigūracija yra pačiame Das U-Boot, kitaip turėsite rasti gamintojo konfigūraciją ir įdėti ją į saugyklos šaknį faile.config
, arba surinkti kitu gamintojo rekomenduojamu būdu. - Mes surenkame patį įkrovos įkrovos vaizdą naudodami kryžminį kompiliatorių
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Kaip rezultatas, mes gauname failą u-boot.imx
, tai yra paruoštas vaizdas, kurį galima įrašyti į „flash drive“. Rašome į SD kortelę, praleidžiame pirmuosius 1024 baitus. Kodėl pasirinkau Target u-boot.imx
? Kodėl praleidau būtent 1024 baitus? Būtent tai jie siūlo padaryti
Atlikta, galite paleisti. Įkrovos įkroviklis turi pranešti apie savo versiją, šiek tiek informacijos apie plokštę ir bandyti rasti branduolio vaizdą skaidinyje. Jei nepavyks, jis bandys paleisti per tinklą. Apskritai išvestis yra gana išsami, galite rasti klaidą, jei yra problema.
Vietoj išvados
Ar žinojote, kad delfino kakta nėra kaulėta? Tai tiesiogine prasme trečioji akis, riebalinis lęšis echolokacijai!
Šaltinis: www.habr.com