tl;dr: Kali Linux képét készítek ARM számítógéphez a következő programban debootstrap, Linux és u-boot.
Ha vásároltál egy kevésbé népszerű egylapos számítógépet, akkor találkozhattál azzal, hogy hiányzik a kedvenc disztribúciód képe. Hasonló dolog történt a . Kali Linux IMX6-ra egyszerűen nem elérhető (én készítem), ezért magamnak kell összeraknom.
A betöltési folyamat meglehetősen egyszerű:
- A hardver inicializálódik.
- A tárolóeszköz (SD-kártya/eMMC/stb.) egy bizonyos területéről betöltésre kerül a bootloader.
- A bootloader megkeresi az operációs rendszer kernelét, és betölti azt egy bizonyos memória területre, majd végrehajtja.
- A kernel betölti a többi operációs rendszert.
Az én feladatomhoz elegendő ez a részletesség, a részleteket elolvashatod . A fent említett "bizonyos" területek alaplaponként eltérnek, ami bizonyos nehézségeket okoz a telepítés során. A szerver ARM platformok UEFI segítségével, de míg ez nem érhető el mindenhol, külön kell összeraknunk mindent.
A gyökér fájlrendszer összeállítása
Először is elő kell készítenünk a partíciókat. A U-Boot különböző fájlrendszereket támogat, én FAT32-t választottam a /boot és ext3-t a gyökérhez, ez a standard elrendezés a Kali ARM-hoz. A GNU Parted-ot fogom használni, de te is megteheted a megszokott fdisk-kel. Szintén szükség lesz a dosfstools és e2fsprogs fájlrendszer létrehozásához: apt install parted dosfstools e2fsprogs.
Particionáljuk az SD-kártyát:
- Megjelöljük az SD-kártyát MBR elrendezés használatával:
parted -s /dev/mmcblk0 mklabel msdos - Létrehozunk egy 128 megabájtos partíciót a
/boot:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Az első kihagyott megabájtot szükséges fenntartani a partíció számára és a bootloadernek. - Létrehozunk egy gyökér fájlrendszert a fennmaradó kapacitásra:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100% - Ha esetleg nincsenek létrehozva vagy megváltoztatva a partíciós fájlok, futtassuk a `partprobe` parancsot, így a partíciós táblázat át lesz olvasva.
- Létrehozzuk a boot partíció fájlrendszerét a címkével
BOOT:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1 - Létrehozzuk a gyökér fájlrendszert a címkével
ROOTFS:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Remek, most már tölthetjük fel. Ehhez további szükség lesz debootstrap, a Debian-alapú operációs rendszerek gyökér fájlrendszerének létrehozásának segédprogramja: apt install debootstrap.
Összeállítjuk a fájlrendszert:
- Csatlakoztatjuk a partíciót a
/mnt/(használj egy számodra kényelmesebb csatolási pontot):mount /dev/mmcblk0p2 /mnt - Töltsük ki a fájlrendszert:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. A paraméter--includetovábbi csomagok telepítését jelöli, én a statikusan összeállított QEMU emulátort adtam meg. Ez lehetővé teszi a futtatástchrootARM környezetben. A többi opció jelentését a következő helyen találhatja:man debootstrap. Ne feledje, hogy nem minden ARM lapka támogatja azarmhf. - architektúrák közötti eltérések miatt
debootstrapkét lépésben hajtódik végre, a második így történik:chroot /mnt/ /debootstrap/debootstrap --second-stage - Most be kell lépnünk a chroot környezetbe:
chroot /mnt /bin/bash - Kitöltjük
/etc/hostsés/etc/hostnamecél FS. Töltse ki a saját számítógépének tartalmához hasonlóan, csak ne felejtse el megváltoztatni a gazdagép nevét. - Mindent finomhangolhatunk. Különösen telepítem a
locales(tárolókulcsok), újrakonfigurálom a lokalizációt és az időzónát (dpkg-reconfigure locales tzdata). Ne feledje beállítani a jelszót a következő parancs végrehajtásával:passwd. - Jelszót állítunk be a
, felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik.parancsotpasswd. - Kép készítési folyamataim az alábbiakkal fejeződnek be:
/etc/fstabbent/mnt/.
Az alábbi címkék szerint fogok tölteni, így a tartalom a következő lesz:
LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0
Végül csatlakoztatjuk a boot partíciót, szükségünk lesz rá a kernelhez: `mount /dev/mmcblk0p1 /mnt/boot/`
Linux build
A kernel (és később a bootloader) Debian Testing alatt történő összeállításához telepítenie kell az alap GCC, GNU Make és GNU C Library fejléc fájlok készletét a cél architektúrához (nálam armhf), valamint az OpenSSL fejléc fájlokat, a parancssori kalkulátort bc, bison és flex: apt install crossbuild-essential-armhf bison flex libssl-dev bc. Mivel a bootloader alapértelmezés szerint a zImage fájlt keresi a boot partíció fájlrendszerében, ideje lebontani a flash meghajtót.
- Túl sok idő a kernel klónozása, így inkább letöltöm:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz. Kicsomagoljuk, és lépjünk be a forráskód mappába:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1 - Konfiguráljuk a fordítás előtt:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. A konfiguráció a következő mappában található:arch/arm/configs/. Ha nincs ilyen, megpróbálhatja keresni, letölteni és megadni a fájl nevét ennek a mappának a paraméterében:KBUILD_DEFCONFIG. Végső esetben egyből lépjen a következő pontra. - Opcionálisan finomíthatók a beállítások:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig - És cross-compiláljuk a képet:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- - Most másoljuk át a kernel fájlt:
cp arch/arm/boot/zImage /mnt/boot/ - és a DeviceTree fájlokat (a lapon található hardver leírása):
cp arch/arm/boot/dts/*.dtb /mnt/boot/ - És telepíteni a különálló 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. Minden leválasztható: umount /mnt/boot/ /mnt/
Das U-Boot
Mivel a bootloader interaktív, a működésének ellenőrzéséhez elegendő csak az alaplap, a tárolóeszköz és opcionálisan egy USB-to-UART eszköz. Azaz a kernelt és az operációs rendszert későbbre halaszthatjuk.
A gyártók túlnyomó többsége a Das U-Boot használatát ajánlja az első betöltéshez. A teljes körű támogatást általában a saját forkjukban biztosítják, de az upstreambe való hozzájárulásra sem felejtenek el. , így a eltérítettem.
Összegyűjtjük magát a bootloadert:
- A stabil ág klónozása a tárolóból:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10 - Bemenet a mappába:
cd u-boot - Előkészítjük a build konfigurációt:
make mx6ull_14x14_evk_defconfig. Ez csak akkor működik, ha a konfiguráció szerepel a Das U-Bootban, különben meg kell találni a gyártó konfigurációját, és elhelyezni a tároló gyökerében egy.config, vagy más ajánlott gyártó szerint kell összeállítani. - Összegyűjtjük magát a bootloader képet a cross compilerrel
armhf:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
Ennek eredményeként egy fájlt kapunk u-boot.imx, ez egy kész kép, amelyet fel lehet írni egy USB meghajtóra. Írjunk az SD-kártyára, kihagyva az első 1024 byte-ot. Miért választottam ezt a célt u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в . Más alaplapok esetén a kép előállítási és írási folyamata kicsit eltérhet.
Kész, indítható. A bootloadernek meg kell jelenítenie a saját verzióját, néhány információt az alaplapról, és megpróbálja megtalálni a kernelt az partíción. Sikertelenség esetén a hálózaton próbálkozik bootolni. Összességében a kimenet eléggé részletes, hiba esetén megtalálható a probléma.
Összegzésként
Tudtad, hogy a delfin homloka nem csontos? Ez szó szerint a harmadik szem, zsírlencse az echolokációhoz!
Forrás: habr.com
