bzt 31d20593cf More docs 1 month ago
..
ABI.md 9a39125970 Added partition UUIDs 1 month ago
README.md 31d20593cf More docs 1 month ago
debug.md 356f8517e0 Docs 1 month ago
menu.cfg e229ccde24 SMP became a built-in feature, no plugin needed 1 month ago
plugins.md 9f40559ac6 Added exFAT, MenuetOS UEFI support, GUDT 11 months ago
secureboot.md 847c7a266c More docs 1 year ago
stivale.md 172a44c711 Updated binaries 1 year ago

README.md

Kernelek betöltése Easyboot-al

Az Easyboot egy minden-az-egyben rendszerbetöltő menedzser és indítható lemezkép készítő, ami különböző operációs rendszer kerneleket és különféle bináris formátumú, Multiboot2 kompatíbilis kerneleket tud betölteni.

[[TOC]]

Telepítés

 easyboot [-v|-vv] [-s <mb>] [-b <mb>] [-u <guid>] [-p <t> <u> <i>] [-e] [-c] <indir> <outfile|device>

  -v, -vv         bőbeszédűség / ellenőrzés szintjének növelése
  -s <mb>         lemezkép méretének megadása (alapból 35M)
  -b <mb>         boot partíció méretének megadása (alapból 33M)
  -u <guid>       boot partíció egyedi azonosítójának megadása (alapból véletlen)
  -p <t> <u> <i>  további partitió hozzáadása (típus guid, egyedi guid, képfájl)
  -e              El Torito Boot Catalog hozzáadása (BIOS / EFI CDROM bootolás)
  -c              mindig új lemezkép létrehozása, ha létezik, akkor is
  <indir>         ennek a mappának a tartalmából csinálja a boot partíciót
  <outfile>       kimeneti lemezkép vagy eszközfájl neve

Az Easyboot eszköz egy (outfile) nevű, indítható lemezképet hoz létre GUID Partíciós Táblával és egyetlen, FAT32-re formázott partícióval, aminek a neve "EFI System Partition" (röviden ESP). A partíció tartalmát a felhasználó által megadott (indir) könyvtárból veszi. Ebbe a könyvtárba el kell helyezni egy sima szöveges fájlt easyboot/menu.cfg néven. Akár NL, akár CRLF sorvégekkel ez könnyen szerkeszthető bármilyen szövegszerkesztő programmal. A konfigurációtól függően szükség lehet még easyboot/*.plg nevű beépülőkre is ebben a könyvtárban.

A lemezkép működik Raspberry Pi-n is, és el fog indulni qemu-n; de ahhoz, hogy igazi vason is fusson, szükség lesz további förmver fájlokra, bootcode.bin, fixup.dat, start.elf és egy .dtb fájlra az (indir) könyvtárban, ezeket a Raspberry Pi hivatalos repójából lehet letölteni.

A parancsnak van néhány opcionális parancssori kapcsolója: -s (mb) beállítja a generálandó teljes lemezkép méretét Megabájtokban, míg a -b (mb) a boot partíció méretét állítja, szintén Megabájtokban. Nyilvánvalóan az előbbinek nagyobbnak kell lennie, mint az utóbbinak. Ha nincs megadva, akkor a partíció mérete a megadott könyvtár méretéből számítódik (de legalább 33 Mb, ez a lehető legkissebb FAT32-es fájlrendszer méret) és a lemezméret pedig ennél 2 Mb-al nagyobb (igazítások és a partíciós tábla által elfoglalt hely miatt). Ha e két megadott méret között több, mint 2 Mb a különbség, akkor külsős programmal, például az fdisk-el szabadon, kedved szerint hozzáadhatsz további partíciókat a lemezképhez (vagy lásd a -p kapcsolót alább). Ha kiszámítható kimenetre van szükség, akkor a boot partíció egyedi azonosítója (UniquePartitionGUID) megadható a -u <guid> kapcsolóval.

Opcionálisan hozzáadható további partíció is a -p kapcsolóval. Ennek 3 paramétere van: (PartitionTypeGUID), (UniquePartitionGUID) és annak a képfájlnak a neve, ami a partíció adatait tartalmazza. Ez a kapcsoló többször is megadható.

A -e kapcsoló hatására El Torito Boot Catalog is generálódik a lemezképbe, így az nemcsak USB pendrájvon lesz használható, hanem BIOS / EFI CDROM lemezképként is indítható lesz.

Amennyiben az (outfile) egy eszközfájl (pl. /dev/sda Linuxon, /dev/disk0 BSD-ken, vagy \\.\PhysicalDrive0 Windowson), akkor nem hoz létre sem GPT-t, sem ESP-t, hanem megkeresi az eszközön már meglévőket, és azokat használja. Ilyenkor is minden fájlt felmásol az (indir) könyvtárból a boot partícióra és telepíti a betöltő programokat. Ez akkor is így működik, ha a megadott lemezkép egy már létező fájl (ez esetben használható a -c kapcsoló, ami először mindig egy új, üres lemezképet kreál).

Konfigurálás

Az easyboot/menu.cfg fájlban a következő sorok szerepelhetnek (nagyon hasonló a grub.cfg szintaktikájához, példa konfigurációs fájlt itt találsz):

Megjegyzések

Minden sor, ami a # karakterrel kezdődik, kommentnek minősül és a sor végéig kihagyásra kerül.

Bőbeszédűség

A bőbeszédűség szintje a verbose kezdetű sorral állítható.

verbose (0-3)

Ez megmondja a betöltőnek, hogy mennyi információt írjon ki az induló konzolra. A 0 teljesen csendes (alapértelmezett), míg a 3 kiírja a betöltött kernelszegmenseket és még a belépési pont gépikódját is dumpolja.

Framebuffer

Kérhető egy bizonyos képernyő felbontás a framebuffer kezdetű sorral. A formátuma a következő:

framebuffer (szélesség) (magasság) (pixelenkénti bitméret) [#(betűszín)] [#(háttérszín)] [#(foly.háttér)]

Az Easyboot mindenképp beállítja a framebuffert, még akkor is, ha ez a sor nem szerepel (alapból 800 x 600 x 32bpp). De ha szerepel, akkor megpróbálja az itt megadott felbontást beállítani. Palettás módokat nem támogat, ezért a pixelenkénti bitméretnek legalább 15-nek kell lennie.

Ha a negyedik opcionális szín paraméter meg van adva, akkor HTML formátumúnak kell lennie, egy kettőskereszttel indítva, amit 6 hexadecimális szám követ, PPZZKK. Például a #ff0000 egy teljes fényerejű piros és a #007f7f egy sötétebb cián. Ez mondja meg a betű színét. Hasonlóan, ha az ötödik opcionális szín paraméter meg van adva, annak is HTML formátumúnak kell lennie, ez a háttér színét állítja. Az utolsó opcionális szín paraméter szintúgy, ez a folyamatjelző háttérszínét állítja.

Ha a szinek nincsenek megadva, akkor alapból fehér színnel ír fekete háttére, és a folyamatjelző sötétszürke.

Alapértelmezett boot opció

A default-al kezdődő sor adja meg, hogy melyik menüpontot kell elindítani adott idő után, ha a felhasználó addig nem választ.

default (menüpont sorszám) (időkeret msec)

A menüpont sorszám egy szám 1-től 9-ig. Az időkeret milliszekundumokban van megadva (egy ezred másodperc), tehát 1000 jelent egy másodpercet.

Menü elrendezés

A menualign kezdetű sor állítja, hogyan jelenjenek meg a boot opciók.

menualign ("vertical"|"horizontal")

Alapból a menü horizontal (vízszintes), de ez átállítható vertical-ra (függőleges).

Boot opciók

Összesen 9 boot opciót lehet megadni a menuentry kezdetű sorokkal. A formátuma a következő:

menuentry (ikon) [cimke]

Minden ikonhoz léteznie kell egy easyboot/(ikon).tga fájlnak a boot partíción. A képnek run length encoded, color-mapped Targa formátumúnak kell lennie, mert az a legjobban tömörített változat (az első három bájt a fájlban rendre 0, 1 és 9, lásd Data Type 9 a specifikációban). A dimenziója pontosan 64 pixel magas és 64 pixel széles.

GIMP alatt ebben a formátumban úgy kell menteni, hogy először kiválasztjuk az "Image > Mode > Indexed..." menüpontot, a felugró ablakban beállítjuk a "Maximum number of colors"-t 256-ra. Aztán "File > Export As..." és a fájlnévnek olyant adunk meg, ami .tga-ra végződik, aztán a felugró ablakban bepipáljuk az "RLE compression" opciót. Parancssori megoldáshoz használható az ImageMagick, convert (bármilyen formátumú kép) -colors 256 -compress RLE ikon.tga.

Az opcionális cimke főleg arra való, hogy ASCII verzió vagy kiadás információt jelenítsünk meg a menüben, nem pedig tetszőleges szövegekre, ezért helytakarékosságból az UTF-8 csak akkor van támogatva, ha létezik egy easyboot/font.sfn fájl is. (Egy UNICODE font rengeteg helyet foglal, még úgy is, hogy a Scalable Screen Font roppant hatékony, kábé 820K. Összehasonlításképp a GRUB unicode.pf2-je még ennél is jóval több, 2392K, annak ellenére, hogy mindkét font kb. 55600 glifet tartalmaz 8x16-os és 16x16-os bitmapekben. A beépített ASCII fontban 8x16-os bitmap és 96 glif van csak.)

Minden sor, ami egy menuentry sort követ, ahhoz a menüponthoz tartozik, kivéve, ha az is egy újabb menuentry sor. Kényelmi okokból használhatók blokkok, mint a GRUB-ban, de ezek csak szemgyönyörködtetésre valók. Igazából ugyanúgy kezeli a kapcsoszárójeleket, mint bármilyen más szóköz karaktert. Elhagyhatók, és tab használható helyettük, mint Pythonban vagy a Makefileokban, ha valakinek az lenne a heppje.

Például

menuentry FreeBSD backup
{
    kernel bsd.old/boot
}

Partícióválasztás

Az olyan sor, ami partition-al kezdődik, egy GPT partíciót választ ki. Meg kell előznie egy menuentry sornak.

partition (partíció egyedi UUID)

Ezt a partíciót fogja root fájlrendszernek használni a boot opció. A kernel valamint a modulok erről a partícióról fognak betöltődni, és a boot protokolltól függően a kernelnek is ez adódik át. A megadott partíció lehet bármelyik lemezen, nem kell feltétlenül az indítólemezen lennie, az Easyboot induláskor végignézi az összes GPT partícionált lemezt, hogy megkeresse.

Kényelmi okokból a partíció megadható a kernel sorral is (lásd alább). Ha az induló parancssor tartalmaz root=(UUID) vagy root=*=(UUID) sztringet, akkor nincs szükség külön partition sorra.

Ha a partíció nincs kifejezetten megadva, akkor a kernel és a modulok a boot partícióról töltődnek be.

Kernel megadása

A kernel kezdetű sor mondja meg, hogy melyik fájlt kell bebootolni és hogy milyen paraméterekkel. Meg kell előznie egy menuentry sornak.

kernel (kernel fájl elérési út) (opcionális induláskori parancssor)

Az UTF-8 elérési útnak abszolútnak kell lennie, és egy létező, futtatható kernel fájlra kell mutatnia a root (vagy boot) partíción. Ha a kernel nem a partíció gyökérkönyvtárában található, akkor a könyvtárelvasztó mindig a /, még UEFI rendszereken is. Ha a névben szóköz található, akkor azt egy \ előtaggal kell ellátni. Az elérési út után egy szóközzel elválasztva jöhet az induló parancssor. Multiboot2 kompatíbilis kernelek esetén ez a Induló parancssor (1-es típusú) tegben kerül átadásra. Ezt az Easyboot nem módosítja, és nem is értelmezi, leszámítva, hogy root partíció specifikációt keres benne.

Alapból az Easyboot Multiboot2 kompatíbilis ELF64 és PE32+/COFF formátumú kerneleket kezel (valamint UEFI rendszereken UEFI applikációkat is). Alapesetben ez a boot protokoll nem támogatja a magas címtérbe töltést, de az Easyboot megszegi kicsit a protokollt úgy, hogy az a normál, alacsony címterű kerneleket ne zavarja. Bármilyen más fajta kernel bootolásához kernel betöltő beépülőre van szükség.

FONTOS: a GRUB-bal ellentétben, ahol külön "linux" meg "multiboot" parancsok vannak a boot protokoll kiválasztására, itt csak egyetlen parancs van, és a protokollt futás időben autodetektálja a kernelből.

További modulok betöltése

Tetszőleges fájlok (induló memória lemezképek, kernel meghajtók, stb.) tölthetők be a kernellel együtt a module kezdetű sorokkal. Ezeket meg kell előznie egy menuentry sornak. Fontos, hogy ilyen sorból több is lehet egy menuentry alatt. Ha a boot protokoll támogat initrd-t, akkor a legelső module sort veszi initrd-nek.

module (fájl elérési út) (opcionális modul paraméterek)

Az UTF-8 elérési útnak abszolútnak kell lennie, és egy létező fájlra kell mutatnia a root (vagy boot) partíción. Ezt követheti egy paraméterlista, szóközzel elválasztva. Ha a fájl tömörített, és van hozzá kitömörítő beépülő, akkor a modul transzparensen ki lesz csomagolva. A betöltött (és kitömörített) modulok listája a Multiboot2 kompatíbilis kerneleknek a Modulok (3-as típusú) tegekben adódik át.

Van egy speciális eset, amikor a modul a DSDT, GUDT vagy a 0xD00DFEED bájtokkal kezdődik. Ebben az esetben a fájl nem kerül a Modulok tegekbe, hanem az ACPI tábla kerül módosításra úgy, hogy a benne lévő DSDT mutató ennek a fájlnak a tartalmára mutasson. Ezáltal könnyedén kicserélhető egy bugos BIOS ACPI táblája a felhasználó által megadottra.

Boot logó

A boot opció kiválasztásakor a képernyő közepén megjeleníthető egy logó, ha van egy bootsplash kezdetű sor. Meg kell előznie egy menuentry sornak.

bootsplash [#(háttérszín)] (tga fájl elérési út)

A háttérszín opcionális, és ha meg van adva, akkor HTML formátumúnak kell lennie, egy kettőskereszttel indítva, amit 6 hexadecimális szám követ, PPZZKK. Ha az első paraméter nem #-el kezdődik, akkor azt elérési útnak veszi.

Az UTF-8 elérési útnak abszolútnak kell lennie, és egy létező fájlra kell mutatnia a boot (és NEM a root) partíción. A képnek run length encoded, color-mapped Targa formátumúnak kell lennie, akár csak az ikonoknak. A mérete bármi lehet, ami kifér a képernyőre.

Többmagos támogatás

Hogy a kernel minden processzormagon elinduljon egyszerre, a multicore direktívát kell megadni (csak 64-bites kerneleknél használható). Meg kell előznie egy menuentry sornak.

multicore

Hibakeresés

Ha bármilyen probléma merülne fel, akkor csak az easyboot -vv kapcsolókkal kell futtatni. Ez egyben ellenőriz is és részletes kimenetet ír ki a létrehozáskor. Egyébként pedig hozzá kell adni a verbose 3 sort az easyboot/menu.cfg-hoz, hogy megjelenjenek az induláskori üzenetek.

Ha a bal felső sarokban piros háttérrel az látszik, hogy PMBR-ERR, akkor az azt jelenti, hogy a processzorod túl régi, nem támogatja a 64-bites long módot vagy az indulószektor nem találta a betöltőt. Ez csakis BIOS gépeken fordulhat elő, UEFI-n és RaspberryPi-n soha.

Üzenet Leírás
Booting [X]... jelzi, hogy melyik boot opció (menuentry sorszám) lett kiválasztva
Loading 'X' (Y bytes)... az X nevű és Y hosszú fájlt készül betölteni
Parsing kernel... a kernelt megtalálta, most meghatározza a formátumát
Starting X boot... azt jelenti, hogy az X operációs rendszer betöltőjét találta meg
Starting X kernel... azt jelenti, hogy az X operációs rendszer kernelét találta meg
Transfering X control to Y jelzi, hogy átadja a vezérlést az X módú belépési pontra az Y címen

Ha egy hiba azután jönne elő, hogy ez a legutolsó üzenet is megjelent, akkor a probléma az operációs rendszer indítási folyamatában keletkezett, és nem pedig az Easyboot betöltőben, ezért az adott operációs rendszer dokumentációjában található meg rá a válasz. Egyébként meg bátran nyiss egy gitlab hibajegyet a hibabejelentőben.

Multiboot1

Szükséges beépülők: grubmb1

Multiboot2

Ez a legrugalmasabb, többféle variáció is támogatott a beépülők által:

  • ELF64 vagy PE32+ egyszerűsített Multiboot2-al: nincs szükség beépülőre
  • ELF32 egyszerűsített Multiboot2-al és 32-bites belépési ponttal: elf32
  • a.out (struct exec) egyszerűsített Multiboot2-al és 32-bites belépési ponttal: aout
  • GRUB-kompatíbilis Multiboot2, 32-bites belépési ponttal: grubmb2

Fontos a kölönbség: az egyszerűsített Multiboot2 esetén nincsenek beágyazott tegek, felső címtér is támogatva van akárcsak a tisztán 64-bites belépési pont, a paraméterek pedig mind Multiboot2, SysV és fastcall ABI szerint is átadódnak.

Ezzel szemben a GRUB-kompatíbilis Multiboot2 esetén kellenek a beágyazott tegek, nem támogatja a felső címteret sem a 64-bites kerneleket, a belépési pont csakis 32-bites lehet, a paraméterek pedig csak az eax, ebx regiszterekben adódnak át.

Windows

Nincs szükség beépülőre, de be kell konfigurálni a Secure Boot-ot.

menuentry win {
  kernel EFI/Microsoft/BOOT/BOOTMGRW.EFI
}

Linux

Szükséges beépülők: linux, ext234

Ha a kernel nem a boot partíción található, akkor a parancssorban is megadható a root partíció.

menuentry linux {
  kernel vmlinuz-linux root=PARTUUID=01020304-0506-0708-0a0b0c0d0e0f1011
}

OpenBSD

Szükséges beépülők: obsdboot, ufs44

menuentry openbsd {
  partition 01020304-0506-0708-0a0b0c0d0e0f1011
  kernel boot
}

VIGYÁZAT! Nem használható az elf32 beépülő, ha OpenBSD-t is indítunk! A boot-ja valótlanul állítja magáról, hogy egy ELF 32-bites SysV ABI belépési ponttal, holott valójában 16-bites valós módú belépési pontja van.

FreeBSD

Szükséges beépülők: fbsdboot, ufs2

A hagyományos BIOS rendszereken a boot betöltőt kell megadni.

menuentry freebsd {
  partition 01020304-0506-0708-0a0b0c0d0e0f1011
  kernel boot/boot
}

UEFI gépeken pedig a loader.efi betöltőt a boot partíción (ehhez nincs szükség beépülőkre).

menuentry freebsd {
  kernel boot/loader.efi
}

Ha a root fájlrendszer ZFS, akkor ezt az egy fájlt (boot BIOS-on, loader.efi UEFI-n) be kell másolni az (indir)-be és NEM kell megadni root partíciót.

FreeDOS

Szükséges beépülők: fdos

A FreeDOS fájljait be kell másolni az (indir)-be (a FreeDOS a boot partíciót használja root partícióként).

menuentry freedos {
  kernel KERNEL.SYS
}

Ha a bootolás a jogi figyelmeztetés és az - InitDisk kiírása után megáll, akkor a FreeDOS kernel FAT32 támogatás nélkül lett fordítva. Egy másik kernelt kell letölteni, olyant, aminek a nevében szerepel az f32.

ReactOS

Szükséges beépülők: reactos

menuentry reactos {
  kernel FREELDR.SYS
}

MenuetOS

Szükséges beépülők: menuet

menuentry menuetos {
  kernel KERNEL.MNT
  module CONFIG.MNT
  module RAMDISK.MNT
}

Az automatikus konfiguráció kikapcsolható a noauto parancssori kapcsolóval.

KolibriOS

Szükséges beépülők: kolibri

menuentry kolibrios {
  kernel KERNEL.MNT syspath=/rd/1/ launcher_start=1
  module KOLIBRI.IMG
  module DEVICES.DAT
}

A beépülő működik UEFI gépeken is, de használható akár az uefi4kos.efi is a boot partíción (ehhez nincs szükség beépülőkre).

SerenityOS

Szükséges beépülők: grubmb1

menuentry serenityos {
  kernel boot/Prekernel
  module boot/Kernel
}

Haiku

Szükséges beépülők: grubmb1, befs

menuentry haiku {
  partition 01020304-0506-0708-0a0b0c0d0e0f1011
  kernel system/packages/haiku_loader-r1~beta4_hrev56578_59-1-x86_64.hpkg
}

UEFI gépeken pedig a haiku_loader.efi betöltőt kell megadni a boot partíción (ehhez nincs szükség beépülőkre).

OS/Z

menuentry osz {
  kernel ibmpc/core
  module ibmpc/initrd
}

Ehhez nincs szükség beépülőkre.