tl; dr: Kali Linux image-et készítek ARM számítógéphez, a programban debootstrap
, linux
и u-boot
.
Ha vásárolt néhány nem túl népszerű, egykártyás szoftvert, akkor előfordulhat, hogy nincs kép a kedvenc disztribúciójáról. Körülbelül ugyanez történt vele
A letöltési folyamat meglehetősen egyszerű:
- A hardver inicializálva van.
- A tárolóeszköz bizonyos területeiről (SD-kártya/eMMC/stb) a rendszer beolvassa és végrehajtja a rendszerbetöltőt.
- A rendszerbetöltő megkeresi az operációs rendszer kernelt, betölti valamilyen memóriaterületre, és végrehajtja.
- A kernel betölti az operációs rendszer többi részét.
Ez a részletezettség elég a feladatomhoz, a részleteket olvashatjátok
A root fájlrendszer felépítése
Először elő kell készítenie a szakaszokat. A Das U-Boot különböző fájlrendszereket támogat, én a FAT32-t választottam /boot
és az ext3 a root számára, ez a Kali szabványos képelrendezése az ARM-en. Én a GNU Partedet fogom használni, de ugyanezt megteheted ismerősebb módon is fdisk
. Önnek is szüksége lesz dosfstools
и e2fsprogs
fájlrendszer létrehozásához: apt install parted dosfstools e2fsprogs
.
Megjelöljük az SD-kártyát:
- Jelölje meg az SD-kártyát MBR-particionálást használóként:
parted -s /dev/mmcblk0 mklabel msdos
- Hozzon létre egy szakaszt az alatt
/boot
128 megabájt esetén:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Az első kihagyott megabájtot magának a jelölésnek és a rendszerbetöltőnek kell hagyni. - Létrehozunk egy gyökér fájlrendszert a teljes fennmaradó kapacitásra:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Ha hirtelen a partíciós fájlok nem jöttek létre, vagy nem változtak, akkor futtassa a `partprobe' parancsot, ekkor a partíciós tábla újra beolvasásra kerül.
- Hozzon létre egy fájlrendszert a címkével ellátott rendszerindító partícióhoz
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Hozzon létre egy gyökér fájlrendszert címkével
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Remek, most már kitöltheti. Ehhez még szüksége lesz debootstrap
, egy segédprogram gyökérfájlrendszerek létrehozására Debian-szerű operációs rendszerekhez: apt install debootstrap
.
FS-t gyűjtünk:
- Szerelje be a partíciót
/mnt/
(használjon kényelmesebb rögzítési pontot):mount /dev/mmcblk0p2 /mnt
- Valójában kitöltjük a fájlrendszert:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
... Paraméter--include
azt jelzi, hogy további csomagokat kell telepíteni, megadtam egy statikusan felépített QEMU emulátort. Lehetővé teszi a teljesítménytchroot
ARM környezetben. A fennmaradó opciók jelentése a következő helyen található:man debootstrap
. Ne felejtse el, hogy nem minden ARM kártya támogatja az architektúrátarmhf
. - Az építészeti különbségek miatt
debootstrap
két szakaszban hajtják végre, a másodikat a következőképpen hajtják végre:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Most el kell csavarni:
chroot /mnt /bin/bash
- tölt
/etc/hosts
и/etc/hostname
cél FS. Töltse ki ugyanazt a tartalmat, mint a helyi számítógépén, csak ne felejtse el lecserélni a gazdagép nevét. - Minden mást személyre szabhat. Konkrétan telepítem
locales
(lerakatkulcsok), konfigurálja újra a területi beállításokat és az időzónát (dpkg-reconfigure locales tzdata
). Ne felejtse el beállítani a jelszót a paranccsalpasswd
. - Állítson be jelszót
root
csapatpasswd
. - A kép elkészítése számomra töltéssel zárul
/etc/fstab
belső/mnt/
.
A korábban elkészített címkéknek megfelelően fogom feltölteni, így a tartalom a következő lesz:
LABEL=ROOTFS/auto errors=remount-ro 0 1
LABEL=BOOT /boot auto alapértékek 0 0
Végül felcsatolhatja a rendszerindító partíciót, szükségünk lesz rá a kernelhez: `mount /dev/mmcblk0p1 /mnt/boot/`
Linux build
A kernel (majd a rendszerbetöltő) Debian Testingen való felépítéséhez telepítenie kell a GCC, a GNU Make és a GNU C Library fejlécfájljainak szabványos készletét a cél architektúrához (számomra armhf
), valamint OpenSSL-fejlécek, konzolszámítógép bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Mivel az alapértelmezett betöltő keresi a fájlt zImage
a rendszerindító partíció fájlrendszerén itt az ideje felosztani a flash meghajtót.
- Túl sokáig tart a kernel klónozása, ezért csak letöltöm:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Csomagoljuk ki, és menjünk a forráskönyvtárba:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Konfigurálás a fordítás előtt:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. A konfiguráció a könyvtárban találhatóarch/arm/configs/
. Ha nincs ilyen, megpróbálhat egy kész fájlt keresni és letölteni, és paraméterként megadni a fájl nevét ebben a könyvtárbanKBUILD_DEFCONFIG
. Utolsó lehetőségként azonnal lépjen tovább a következő pontra. - Opcionálisan módosíthatja a beállításokat:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- És fordítsd össze a képet:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Most átmásolhatja a kernelfájlt:
cp arch/arm/boot/zImage /mnt/boot/
- És a DeviceTree fájlok (a hardver leírása a táblán):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- És telepítse a külön fájlok formájában összegyűjtött modulokat:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
A kernel készen áll. Mindent le lehet szerelni: umount /mnt/boot/ /mnt/
Das U-Boot
Mivel a rendszerbetöltő interaktív, működésének teszteléséhez csak magára a kártyára, egy tárolóeszközre és opcionálisan egy USB-UART eszközre van szükség. Vagyis későbbre halaszthatja a kernelt és az operációs rendszert.
A gyártók túlnyomó többsége a Das U-Boot használatát ajánlja az első rendszerindításhoz. A teljes támogatást általában a saját villájukban biztosítják, de nem felejtenek el hozzájárulni az upstreamhez. Az én esetemben a tábla be van támasztva
Állítsuk össze magát a rendszerbetöltőt:
- A tároló stabil ágát klónozzuk:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Menjünk magához a könyvtárhoz:
cd u-boot
- A build konfigurációjának előkészítése:
make mx6ull_14x14_evk_defconfig
. Ez csak akkor működik, ha a konfiguráció magában a Das U-Bootban van, ellenkező esetben meg kell találnia a gyártó konfigurációját, és el kell helyeznie a tároló gyökérébe egy fájlban.config
vagy a gyártó által javasolt egyéb módon szerelje össze. - Magát a rendszerbetöltő képfájlt állítjuk össze egy keresztfordító segítségével
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Ennek eredményeként megkapjuk a fájlt u-boot.imx
, ez egy kész kép, ami pendrive-ra írható. Az első 1024 bájtot kihagyva írunk az SD kártyára. Miért választottam a Targetet? u-boot.imx
? Miért hiányzott pontosan 1024 bájt? Ezt javasolják benn
Kész, indulhat. A rendszerbetöltőnek jelentenie kell a saját verzióját, néhány információt a kártyáról, és meg kell próbálnia megtalálni a rendszermag képét a partíción. Ha nem sikerül, akkor megpróbálja elindítani a hálózaton keresztül. Általánosságban elmondható, hogy a kimenet elég részletes, megtalálja a hibát, ha probléma van.
Ahelyett, hogy egy következtetés
Tudtad, hogy a delfin homloka nem csontos? Szó szerint egy harmadik szem, egy zsíros lencse az echolokációhoz!
Forrás: will.com