tl;dr: vytváram obraz Kali Linux pre ARM počítač, v programe debootstrap, linux a u-boot.
Ak ste kupovali nejaký menej populárny jednoplatový počítač, mohli ste sa stretnúť s absenciou obrazu vášho obľúbeného distribučného systému. Približne to isté sa stalo aj s . Kali Linux pre IMX6 jednoducho neexistuje (pripravujem), takže musím zbierať sám.
Proces bootovania je dosť jednoduchý:
- Hardvér sa inicializuje.
- Z určitej oblasti na pamäťovom médiu (SD-karta/eMMC/etc) sa načíta a vykoná bootloader.
- Bootloader hľadá jadro operačného systému a načíta ho do určitej oblasti pamäte a vykonáva ho.
- Jadro načíta celý zvyšok operačného systému.
Pre moju úlohu stačí takáto úroveň detailov, podrobnosti si môžete prečítať . Uvedené vyššie "určité" oblasti sa líšia od dosky k doske, čo spôsobuje niektoré ťažkosti s inštaláciou. Načítanie serverových ARM platforiem pomocou UEFI, ale kým to nie je dostupné pre všetkých, bude potrebné všetko zostaviť osobitne.
Zostavenie koreňového súborového systému
Najprv je potrebné pripraviť oddiely. Das U-Boot podporuje rôzne súborové systémy, zvolil som FAT32 pre /boot a ext3 pre koreň, je to štandardné rozdelenie obrazov pre Kali na ARM. Použijem GNU Parted, ale môžete urobiť to isté viac známy fdisk. Tiež budete potrebovať dosfstools a e2fsprogs na vytvorenie súborového systému: apt install parted dosfstools e2fsprogs.
Rozdeľujeme SD kartu:
- Označujeme SD kartu ako používajúcu MBR rozdelenie:
parted -s /dev/mmcblk0 mklabel msdos - Vytvárame oddiel pre
/bootna 128 megabajtov:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Prvý preskočený megabajt je potrebné nechať pod samotným rozdelením a pod bootloaderom. - Vytvárame koreňový FS na celú zostávajúcu kapacitu:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Ak sa náhodou nevytvorili alebo nezmenili súbory oddielov, musíte vykonať `partprobe`, potom sa tabuľka oddielov prečíta znova.
- Vytvárame súborový systém bootovacieho oddielu s označením
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Vytvárame koreňový FS s označením
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Skvele, teraz ju môžeme naplniť. Na to budeme potrebovať navyše debootstrap, nástroj na vytváranie koreňových FS Debian podobných operačných systémov: apt install debootstrap.
Zbierame FS:
- Pripojujeme oddiel do
/mnt/(použite pre seba pohodlnejšiu montážnu bod):mount /dev/mmcblk0p2 /mnt - Vlastne vyplňujeme súborový systém:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Parameter--includeoznačuje dodatočne nainštalovať niektoré balíky, uviedol som staticky zostavený emulátor QEMU. Umožňuje vykonávaťchrootv ARM prostredí. Zmysel ostatných možností si môžete pozrieť vman debootstrap. Nezabudnite, že nie každý ARM board podporuje architektúruarmhf. - Vzhľadom na rozdiely v architektúrach
debootstrapsa vykonáva v dvoch stupňoch, druhý sa vykonáva takto:chroot /mnt/ /debootstrap/debootstrap --second-stage - Teraz sa potrebujeme chrootovať:
chroot /mnt /bin/bash - Vyplňujeme
/etc/hostsa/etc/hostnamecieľový FS. Vyplňte podľa obsahu na vašom lokálnom počítači, nezabudnite iba vymeniť názov hostiteľa. - Môžete doladiť všetko ostatné. V prípade potreby doinštalujem
locales(klúče repozitára), nastavím lokality a časové pásmo (dpkg-reconfigure locales tzdata). Nezabudnite nastaviť heslo príkazompasswd. - Nastavujeme heslo pre
rootpríkazompasswd. - Prípravy obrazu pre mňa končia naplnením
/etc/fstabvnútri/mnt/.
Sťahovať budem v súlade s predtým vytvorenými etiketami, preto bude obsah takýto:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Nakoniec môžeme namontovať zavádzací oddiel, ten budeme potrebovať pre jadro: `mount /dev/mmcblk0p1 /mnt/boot/`
Zostavenie Linuxu
Na zostavenie jadra (a neskôr zavádzača) na Debian Testing je potrebné nainštalovať štandardnú sadu z GCC, GNU Make a hlavičkových súborov GNU C Library pre cieľovú architektúru (mám armhf), ako aj hlavičky OpenSSL, konzolový kalkulátor bc, bison a flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Keďže zavádzač predvolene hľadá súbor zImage na súborovom systéme zavádzacieho oddielu, je čas rozdeliť flash disk.
- Klónovať jadro je príliš zdĺhavé, preto jednoducho sťahujem:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Rozbalíme a prejdeme do adresára so zdrojovými kódmi:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1 - Konfigurujeme pred kompiláciou:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Konfigurácia sa nachádza v adresáriarch/arm/configs/. Ak takýto nie je, môžete sa pokúsiť nájsť a stiahnuť hotový a zadať názov súboru v tejto adresári v parametreKBUILD_DEFCONFIG. V najhoršom prípade ihneď prejdite k ďalšiemu bodu. - Voliteľne môžete doladiť nastavenia:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - A crosskompilujeme obraz:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Teraz môžeme skopírovať súbor s jadrom:
cp arch/arm/boot/zImage /mnt/boot/ - A súbory s DeviceTree (popis existujúceho hardvéru na doske):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - A doinštalujte zostavené ako samostatné súbory moduly:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Jadro je pripravené. Môžete všetko odmontovať: umount /mnt/boot/ /mnt/
Das U-Boot
Keďže je bootloader interaktívny, na overenie jeho funkčnosti stačí samotná doska, pamäťové zariadenie a voliteľne zariadenie USB-to-UART. To znamená, že môžeme odložiť jadro a OS na neskôr.
Absolútna väčšina výrobcov ponúka použiť Das U-Boot na primárne načítanie. Kompletná podpora sa zvyčajne zabezpečuje vo vlastnom forku, no ani v upstream nezabúdajú prispievať. V mojom prípade je doska podporovaná v , takže som ignoroval.
Zostavujeme samotný bootloader:
- Klóňte stabilnú vetvu repozitára:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Prejdite do samotného adresára:
cd u-boot - Pripravujeme konfiguráciu zostavenia:
make mx6ull_14x14_evk_defconfig. Toto funguje len ak je konfigurácia v samotnom Das U-Boot, inak bude potrebné nájsť konfiguračný súbor výrobcu a umiestniť ho do koreňa repozitára do súboru.config, alebo zostaviť iným odporúčaným spôsobom výrobcu. - Zostavujeme samotný obraz bootloadera krížovým kompilátorom
armhf:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Ako výsledok dostaneme súbor u-boot.imx, je to hotový obraz, ktorý môžeme zapísať na USB kľúč. Zapíšeme na SD kartu, vynechajúc prvých 1024 bajtov. Prečo som si vybral cieľ u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в . Pre iné dosky sa proces zostavenia obrazu a zápisu môže mierne líšiť.
Hotovo, môžeme sa naštartovať. Bootloader by mal oznámiť vlastnú verziu, niektoré informácie o doske a pokúsiť sa nájsť obraz jadra na oddiele. V prípade neúspechu sa pokúsi načítať zo siete. Celkovo je výstup dosť podrobný, môžete nájsť chybu v prípade problému.
Na záver
Vedeli ste, že čelo delfína nie je kostnaté? Je to doslovne tretie oko, tuková šošovka pre echolokáciu!
Zdroj: habr.com
