1
0
Fork 0
mirror of https://gitlab.com/bztsrc/bootboot.git synced 2023-02-13 20:54:32 -05:00

Translations

This commit is contained in:
bzt 2019-03-15 02:48:34 +01:00
parent 9fc09f8155
commit 43c867d27c
6 changed files with 577 additions and 3 deletions

423
OLVASSEL.md Normal file
View file

@ -0,0 +1,423 @@
BOOTBOOT Referencia implementációk
==================================
Előre lefordított binárisok mellékelve, egyből használhatók.
1. *x86_64-efi* a preferált indítási mód x86_64-en.
Szabvány GNU eszköztár plusz néhány fájl a gnuefi-ből (mellékelve).
[bootboot.efi](https://gitlab.com/bztsrc/bootboot/raw/master/bootboot.efi) (94k), [bootboot.rom](https://gitlab.com/bztsrc/bootboot/raw/master/bootboot.rom) (94k)
2. *x86_64-bios* BIOS, Multiboot (GRUB), El Torito (CDROM), bővítő ROM és Linux boot kompatíbilis, RÉGI betöltő.
Ha újra akarod fordítani, szükséged lesz a fasm-ra (nincs mellékelve).
[boot.bin](https://gitlab.com/bztsrc/bootboot/raw/master/boot.bin) (512 bájt, egyszerre MBR, VBR és CDROM indító szektor), [bootboot.bin](https://gitlab.com/bztsrc/bootboot/raw/master/bootboot.bin) (11k, a boot.bin tölti be, valamint BBS bővítő ROM és Multiboot kompatíbilis is)
3. *aarch64-rpi* ARMv8 betöltő Raspberry Pi 3-hoz
[bootboot.img](https://gitlab.com/bztsrc/bootboot/raw/master/bootboot.img) (31k)
4. *mykernel* egy példa BOOTBOOT [kompatíbilis kernel](https://gitlab.com/bztsrc/bootboot/tree/master/mykernel) C-ben írva, ami vonalakat húz meg színes dobozokat rajzol
Vedd figyelembe, hogy a referencia implementációk nem támogatják a teljes 2-es protokollt,
csak statikus memórialeképezéseket kezelnek, ami az 1-es protokoll szintnek felel meg.
BOOTBOOT Protokoll
==================
Célközönség
-----------
A protokoll definiálja, hogyan kell betölteni ELF64 vagy PE32+ futtathatókat egy induló ramlemezről tisztán
64 bites módban, mindenféle konfiguráció vagy akár a ramlemezkép formátumának ismerete nélkül.
A [BIOS](https://gitlab.com/bztsrc/bootboot/tree/master/x86_64-bios)-t támogató gépeken ugyanaz a betöltő működik
Multiboottal, láncbetöltéssel MBR, VBR (GPT hibrid indítás) és CDROM indító szektorból, vagy BIOS bővítő ROM-ból
(szóval nemcsak a ramlemez lehet a ROM-ban, de maga a betöltő is).
Az [UEFI gépek](https://gitlab.com/bztsrc/bootboot/tree/master/x86_64-efi)en egy szabványos OS Loader alkalmazás.
A [Raspberry Pi 3](https://gitlab.com/bztsrc/bootboot/tree/master/aarch64-rpi) gépen a bootboot.img-t a start.elf
tölti be kernel8.ig néven az SD kártya első partíciójáról.
A különbség más betöltő protokollokhoz képest a rugalmasság és a hordozhatóság; a tisztán 64 bit támogatás; és hogy
a BOOTBOOT a kernel-t a ramlemezképből tölti be. Ez ideális hobbi OS-ek és mikrokernelek számára. Ez biztosítja, hogy
a kerneled felbontható több fájlra, mégis megadja azt az előnyt, hogy egyszerre tölti be mind, mintha egy monolitikus
kernel lenne. Ráadásul mindehhez a saját fájl rendszeredet is használhatod.
Megjegyzés: a BOOTBOOT nem egy boot menedzser, hanem egy boot protokoll. Ha interaktív indítómenüt szeretnél, akkor
azt a BOOTBOOT kompatíbilis betöltő *elé* kell integrálnod. Például a GRUB lánctöltheti a boot.bin-t (vagy Multiboot
"kernel"-ként a bootboot.bin-t és modulként a ramlemezt) vagy a bootboot.efi hozzáadható az UEFI Boot menedzser menüjéhez.
Licensz
-------
A BOOTBOOT Protokoll és a referencia implementációk mind szabad szoftverek és az MIT licensz feltételei szerint kerülnek
terjesztésre.
```
Copyright (C) 2017 bzt (bztsrc@gitlab)
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
```
Szerzők
-------
efirom: Michael Brown
zlib: Mark Adler
tinflate: Joergen Ibsen
raspbootcom: (GPL) Goswin von Brederlow
BOOTBOOT, FS/Z: bzt
Kifejezések
-----------
* _boot partíció_: az első indítható lemez első indítható partíciója, lehetőleg egy kissebb.
Nagy valószínűséggel egy EFI Rendszer Partció FAT fájl rendszerrel, de lehet akármi más is,
ha az adott partíció indítható (az attribútumoknál a 2. bit be van állítva).
* _környezeti fájl_: legfeljebb egy lap méretű, utf-8 [fájl](https://gitlab.com/bztsrc/bootboot/blob/master/README.md#environment-file) a boot partíción
`BOOTBOOT\CONFIG` néven (vagy ha a ramlemez az egész partíciót elfoglalja, akkor `/sys/config`). Egyszerű
"kulcs=érték" párokat tartalmaz (újsor karakterrel elválasztva). A protokoll mindössze két
kulcsot definiál: "screen" a képernyő méretét adja meg, a "kernel" pedig a futtatható fájl nevét a ramlemezen.
* _initrd_: induló [ramlemez kép](https://gitlab.com/bztsrc/bootboot/blob/master/README.md#installation)
(lehet ROM-ban vagy flash-en, vagy egy GPT boot partíción BOOTBOOT\INITRD néven, vagy kitöltheti az egész partíciót, de akár
hálózatról vagy GRUB modulként is betöltehető). A formátuma és a holléte nincs meghatározva (a jó rész :-) ) és gzip tömörítést
is használhat.
* _betöltő_: (loader) egy natív futtatható a boot partíción vagy ROM-ban. Többarchitektúrás lemezeken több
betöltő implementáció is lehet egyszerre.
* _fájl rendszer meghajtó_: egy elkölönített funkció, ami az initrd-ben keresi meg a kernelt.
Ha nincs ilyen, akkor a legelső futtathatót tölti be az initrd-ről.
* _kernel fájl_: egy ELF64 / PE32+ [futtatható az initrd-ben](https://gitlab.com/bztsrc/bootboot/tree/master/mykernel),
opcionálisan a következő szimbólumokkal: `mmio`, `fb`, `environment`, `bootboot` (lásd gép állapot és linker szkript alább).
* _BOOTBOOT struktúra_: a [bootboot.h](https://gitlab.com/bztsrc/bootboot/blob/master/bootboot.h)-ban definiált struktúra.
Betöltés menete
---------------
1. a förmver megkeresi a betöltőt, betölti és elindítja.
2. a betöltő inicializálja a hardvert (64 bites mód, képernyőfelbontás, memória térkép stb.)
3. aztán betölti a környezeti fájlt és az initrd-t (valószínűleg a boot partícióról vagy ROM-ból).
4. sorra meghívja a fájl rendszer meghajtókat, hogy betöltse a kernelt az initrd-ről.
5. ha egyik meghajtó sem járt szerencsével, akkor megkeresi az első futtathatót az initrd-ben.
6. értelmezi a futtatható fejlécét és szimbólumat, hogy megtalálja a címeket (csak 2-es szintű betöltők).
7. ennek megfelelően leképezi a framebuffert, környezetet és a [bootboot struktúrá](https://gitlab.com/bztsrc/bootboot/blob/master/bootboot.h)t.
8. beállítja a vermet, regisztereket és a kernel belépési pontjára ugrik. Lásd [példa kernel](https://gitlab.com/bztsrc/bootboot/tree/master/mykernel).
Gép állapot
-----------
Amikor a kernel átveszi a vezérlést, a memória a következőket tartalmazza:
```
-128M "mmio" terület (0xFFFFFFFFF8000000)
-64M "fb" framebuffer (0xFFFFFFFFFC000000)
-2M "bootboot" struktúra (0xFFFFFFFFFFE00000)
-2M+1page "environment" sztring (0xFFFFFFFFFFE01000)
-2M+2page.. kód szegmens v (0xFFFFFFFFFFE02000)
..0 verem ^ (0x0000000000000000)
0-16G egy-az-egy leképzett RAM (0x0000000400000000)
```
Minden információ a linker által meghatározott címen kerül átadásra. Nincs szükség API-ra, ezért a BOOTBOOT Protokoll
teljesen architektúra és ABI független. Az 1-es szintet támogató betöltők a fent látható fix címeket használják, míg
a 2-es szintű betöltők a futtatható által definiált szimbólumokat használva állapítják meg a címeket.
A RAM (egészen 16G-ig) egy-az-agyben le van képezve a pozitív címtartományban. A soros vonali konzol 115200 baudra,
8 adatbittel, paritás nélkül és 1 stopbitre van felkonfigurálva. Megszakítások le vannak tiltva, a kód pedig felügyeleti
szinten (0-ás gyűrű / EL1) fut.
A képernyű megfelelő felbontásra van állítva 32 bites picelekkel, az `fb` szimbólum által jelölt, negatív címre leképezve.
Az 1-es szintű betöltők korlátozzák a képernyő méretét valahol 4096 x 4096 pixelnél (függ a szkensortól és a képaránytól is).
Ez több, mint elég az [Ultra HD 4K](https://en.wikipedia.org/wiki/4K_resolution) (3840 x 2160) felbontáshoz. A 2-es szintű
betöltők akárhoz képesek kezelni az fb szimbólumot, ezért rájuk nem vonatkozik ez a megszorítás.
A fő információs [bootboot struktúra](https://gitlab.com/bztsrc/bootboot/blob/master/bootboot.h) a `bootboot` szimbólumra
van leképezve. Ez áll egy fix 128 bájtos fejlécből, amit egy változó hosszúságú, de fix méretű rekordok követnek. Az initrd
(benne a további kernel modulokkal és szerverekkel) teljes egészében a memóriában van, és ezen struktúra *initrd_ptr* és
*initrd_size* mezői mutatnak rá. A framebuffer fizikai címe az *fb_ptr* mezőben található. Az *indulási rendszer idő* és
a platform független *memóriatérkép* szintén itt található.
A konfigurációs sztring (vagy parancssor, ha úgy tetszik) az `environment` szimbólumra van leképezve.
A kernel kód szegmense az ELF fejléc `p_vaddr` vagy a PE fejléc `code_base` mezői alapján kerülnek leképezésre (csak 2-es
szint). Az 1-es szintű betöltők mindig -2M-re töltik a kernelt, ezzel limitálva a teljes méretét 2M-re, beleértve a
konfigurációt, adatot, inicializálatlan adatterületet és a vermet. Ennek több, mint elégnek kell lennie bármilyen mikrokernel
számára. Az inicialiyálatlan adatterület a text szegmens után jön, felfelé növekszik, és a betöltő kinullázza.
A társprocesszor (lebegőpontos számtás) be van kapcsolva, és ha a Szimmetrikus Többmagos Feldolgozás (SMP) támogatott, akkor
minden CPU mag ugyanazt a kernel kódot hajtja végre egyszerre.
A verem a memória tetején található, 0-tól kezdve és lefelé növekszik. Minden magnak saját 1k-s verme van SMP rendszereken
(a 0-ás mag verme kezdődik 0-án, az 1-es magé -1024-nél stb.)
Környezeti fájl
----------------
A konfiguráció egy sorvége karakterekkel elhatárolt, nullával lezárt, "kulcs=érték" UTF-8 sztringként kerül átadásra a kernelnek.
```
// BOOTBOOT Opciók
// --- betöltő specifikus ---
// igényelt képernyő felbontás. ha nincs megadva, akkor detektált
screen=800x600
// elf vagy pe bináris az initrd-ben
kernel=sys/core
// --- kernel specifikus, ami csak tetszik ---
amitcsakakartok=érték
megintmas=be
valamiertek=100
valamicim=0xA0000
```
Ez nem lehet nagyobb a lapméretnél (4096 bájt). Az ideiglenes változók a végére kerülnek (az UEFI parancssorból).
C stílusű egy- és többsoros kommentek használhatók. A BOOTBOOT Protokoll csak a `screen` és a `kernel` kulcsokat
használja, az összes többi és az értékük formátuma a kerneleden (vagy az eszközmeghajtóidon) múlik. Légy kreatív :-)
Ha indítási probléma van, a konfiguráció módosításához át kell rakni a lemezt egy másik gépbe (vagy egy egyszerű oprendszert
indítani, mint a DOS) és megszerkeszteni a BOOTBOOT\CONFIG fájlt a boot partíción. UEFI alatt használható az EFI Shell által
nyújtott `edit` parancs, vagy a "kulcs=érték" párok a parancssorban is megadhatók (a parancsori kulcsok felülbírálják a fájlban
megadottakat).
Fájl rendszer meghajtók
-----------------------
A boot partíció fájl rendszer formátuma kívül esik a specifikáción: a BOOTBOOT Protokoll csak annyit vár el,
hogy a kompatíbilis betöltő valahonnan be tudja tölteni az initrd-t és a környezeti fájlt, de nem szabja meg, hogy
honnan és hogy hogyan. Lehet nvram-ban, ROM-ban, jöhet hálózatról például, nem számít.
Más részről az initrd ramlemezre vonatkozóan a BOOTBOOT definiál pontosan egy függvényt a kernel fájl megkeresésére,
de az ABI-t nem írja elő (ami architektúra specifikus úgyis). Ez a funkció kap egy mutatót a ramlemezre, és egyet a kernel
fájl nevére, és visszaadja a fájl első adatbájtjára a mutatót valamint a fájl méretét. Ha hiba volt (a fájl rendszert nem
ismerte fel, vagy a megadott nevű fájlt nem találta) akkor {NULL, 0}-t ad vissza. Ilyen egyszerű.
```c
typedef struct {
uint8_t *ptr;
uint64_t size;
} file_t;
file_t myfs_initrd(uint8_t *initrd, char *filename);
```
A protokoll elvárja, hogy a BOOTBOOT kompatíbilis betöltők végigmenjenek egy meghajtó listán, amíg valamelyik
érvényes választ nem ad. Ha mindegyik {NULL,0}-al tért vissza, akkor a betöltő bájtról bájtra megkeresi a legelső
ELF64 / PE32+ binárist az initrd-ben. Ez roppant hasznos, ha még nem írtunk saját meghajtót, vagy amikor az "initrd"
egy statikusan linkelt futtatható, mint például a Minix. Csak bemásolod az initrd-t a boot partícióra és már mehet is!
The BOOTBOOT Protocol expects the file system drivers ([here](https://gitlab.com/bztsrc/bootboot/blob/master/x86_64-efi/fs.h),
[here](https://gitlab.com/bztsrc/bootboot/blob/master/x86_64-bios/fs.inc) and [here](https://gitlab.com/bztsrc/bootboot/blob/master/aarch64-rpi/fs.h))
to be separated from the rest of the loader's source. This is so because it was designed to help the needs of hobby
OS developers, specially for those who want to write their own file systems.
A referencia implementációk támogatják a [cpio](https://en.wikipedia.org/wiki/Cpio)-t (hpodc, newc és crc variáns),
az [ustar](https://en.wikipedia.org/wiki/Tar_(computing))-t, az osdev.org féle [SFS](http://wiki.osdev.org/SFS)-t,
[James Molloy initrd formátumá](http://www.jamesmolloy.co.uk/tutorial_html/8.-The%20VFS%20and%20the%20initrd.html)t
valamint az OS/Z natív [FS/Z](https://gitlab.com/bztsrc/osz/blob/master/include/osZ/fsZ.h)-jét (utóbbit titkosítással is).
Az initrd-k gzippel tömörítettek is lehetnek, hogy kissebb lemezterületet foglaljanak (nem javasolt RPI3-on).
Példa kernel
------------
Egy [példa kernel](https://gitlab.com/bztsrc/bootboot/blob/master/mykernel/kernel.c) is lett mellékelve a BOOTBOOT Protokollhoz,
hogy bemutassa, miként lehet elérni a betöltő által nyújtott információkat:
```c
#include <bootboot.h>
/* importált virtuális címek, lásd linker szkript */
extern BOOTBOOT bootboot; // lásd bootboot.h
extern unsigned char *environment; // konfiguráció, UTF-8 szöveg kulcs=érték párokkal
extern uint8_t fb; // lineáris framebuffer leképezés
void _start()
{
/*** FIGYELEM: ez a kód párhuzamosan fut minden processzormagon ***/
int x, y, s=bootboot.fb_scanline, w=bootboot.fb_width, h=bootboot.fb_height;
// célkereszt, hogy lássuk, a felbontás jó-e
for(y=0;y<h;y++) { *((uint32_t*)(&fb + s*y + (w*2)))=0x00FFFFFF; }
for(x=0;x<w;x++) { *((uint32_t*)(&fb + s*(h/2)+x*4))=0x00FFFFFF; }
// piros, zöld és kék dobozok, ebben a sorrendben
for(y=0;y<20;y++) { for(x=0;x<20;x++) { *((uint32_t*)(&fb + s*(y+20) + (x+20)*4))=0x00FF0000; } }
for(y=0;y<20;y++) { for(x=0;x<20;x++) { *((uint32_t*)(&fb + s*(y+20) + (x+50)*4))=0x0000FF00; } }
for(y=0;y<20;y++) { for(x=0;x<20;x++) { *((uint32_t*)(&fb + s*(y+20) + (x+80)*4))=0x000000FF; } }
// köszönünk
puts("Hello from a simple BOOTBOOT kernel");
// leállunk egyelőre
while(1);
}
```
A fordításhoz lásd a mellékelt példa kernel [Makefile](https://gitlab.com/bztsrc/bootboot/blob/master/mykernel/Makefile)-ját és
[link.ld](https://gitlab.com/bztsrc/bootboot/blob/master/mykernel/link.ld)-jét.
Mivel SMP rendszeren minden processzormag ezt a kódot futtatja, ezért valósznűleg valami ilyesmivel fogod kezdeni a kerneled:
```c
if (currentcoreid == bootboot.bspid) {
/* a bootstrap processzoron futtatandó dolgok */
} else {
/* alkalmazás processzor(ok)on futtatandó dolgok */
}
```
Az x86_64-on a 'currentcoreid' a Local Apic Id (cpuid[eax=1].ebx >> 24), míg AArch64-on ez az (mpidr_el1 & 3).
Telepítés
---------
1. Hozz létre egy initrd-t benne a kerneleddel. Példák:
```shell
mkdir -r tmp/sys
cp mykernel.x86_64.elf tmp/sys/core
# még több fájl másolása a tmp mappába
# lemezkép vagy csomagolt fájl létrehozása, pl használd ezek közül az egyik parancsot:
cd tmp
find . | cpio -H newc -o | gzip > ../INITRD
find . | cpio -H crc -o | gzip > ../INITRD
find . | cpio -H hpodc -o | gzip > ../INITRD
tar -czf ../INITRD *
mkfs ../INITRD .
```
2. Hozd létre az FS0:\BOOTBOOT könyvtárat a boot partíción, és másold be az előbb létrehozott initrd-t.
Ha akarsz, csinálhatsz egy CONFIG nevű szöveges fájlt is ide, és írd bele a konfigurációdat.
Ha nem a "sys/core" néven található a kerneled, akkor add meg a "kernel=" változóban itt.
Alternatívaként a tömörítetlen INITRD-t bemásolhatod az egész partícióra, csak a saját fájl rendszeredet használva, a FAT
fájl rednszert teljes egészében kihagyva. Csinálhatsz belőle egy bővító ROM-ot is (BIOS-on nincs sok hely, ~64-96k, de EFI-n
elmehetsz egészen 16M-ig).
3. másold be a BOOTBOOT betöltőt a boot partícióra.
3.1. *UEFI lemez*: másold a __bootboot.efi__-t az **_FS0:\EFI\BOOT\BOOTX64.EFI_**-be.
3.2. *BIOS lemez*: másold a __bootboot.bin__-t az **_FS0:\BOOTBOOT\LOADER_**-be.
3.3. *Raspberry Pi 3*: másold a __bootboot.img__-t az **_FS0:\KERNEL8.IMG_**-be.
**FONTOS**: olvasd el a kérdéses implementáció README.md-jét is.
Hibakeresés
-----------
```
BOOTBOOT-PANIC: LBA support not found
```
Nagyon régi hardver. A BIOSod nem támogatja az LBA-t. Ezt az üzenetet az első betöltő szektor (boot.bin) írja ki.
```
BOOTBOOT-PANIC: FS0:\BOOTBOOT\LOADER not found
```
A fő betöltő (bootboot.bin) nem található a lemezen, vagy az induló szektorcíme nincs jól rögzítve az indítószektor 32 bites
[0x1B0] címén (lásd [mkboot](https://gitlab.com/bztsrc/bootboot/blob/master/x86_64-bios/mkboot.c)). mivel a betöltő szektor
támogatja a RAID tükröket, több meghajtóról is meg fogja próbálni betölteni a betöltőt. Ezt az üzenetet az első betöltő szektor
(boot.bin) írja ki.
```
BOOTBOOT-PANIC: Hardware not supported
```
Nagyon régi hardver. Az x86_64-en azt jelenti, a CPU család régebbi, mint 6.0, illetve nincs a PAE, az MSR vagy az LME támogatva.
AArch64-en azt jelenti, hogy az MMU nem kezeli a 4k-s lapméretet vagy legalább 36 bites címteret.
```
BOOTBOOT-PANIC: Unable to initialize SDHC card
```
A betöltő nem tudta inicializálni az EMMC-t SD kártya olvasáshoz, valószínáleg hardver hiba vagy régi kártya.
```
BOOTBOOT-PANIC: No boot partition
```
Vagy a lemezen nincs GPT, vagy nincs benne EFI Rendszer partíció se egyéb indítható partíció. Vagy az azon lévő FAT
fájl rendszer sérült, illetve nincs benne BOOTBOOT könyvtár.
```
BOOTBOOT-PANIC: Not 2048 sector aligned
```
Ezt a hibát csak a bootboot.bin írja ki (és nem a bootboot.efi vagy a bootboot.img), és csakis akkor,
ha CDROM-ról El Torito "no emulation" módban indult, és a boot partíció fájl rendszerének főkönyvtára
nincs 2048 bájtra igazítva, vagy a kluszterméret nem 2048 bájt többszöröse. FAT16 esetén ez a FAT tábla
méretén és emiatt a fájl rendszer méretén múlik. Ha ezt látod, akkor adj hozzá 2 rejtett szektort a BPB-ben.
FAT32 fájl rendszer esetén nem fordulhat elő.
```
BOOTBOOT-PANIC: Initrd not found
```
A betöltő nem találta az initrd-t a boot partíción.
```
BOOTBOOT-PANIC: Kernel not found in initrd
```
A megadott kernel nem található az initrd-n, vagy az initrd formátuma nem ismert és a keresés nem talált
egyáltalán érvényes futtathatót benne.
```
BOOTBOOT-PANIC: Kernel is not a valid executable
```
A megadott kernel fájlt megtalálta ugyan az initrd-n valamelyik féjl rendszer meghajtó, de az nem ELF64 se PE32+ formátumú,
vagy nem az adott architáktúrára van fordítva, vagy nincs benne betölthető szegmens definíció a negatív címtartományban
megadva )lásd linker szkript). Ezt a hibát a 2-es szintű betöltők is kiírhatják, ha az `mmio`, `fb`, `bootboot` vagy
`environment` szimbólumok címei nincsenek a negatív címtartományban.
```
BOOTBOOT-PANIC: GOP failed, no framebuffer
BOOTBOOT-PANIC: VESA VBE error, no framebuffer
BOOTBOOT-PANIC: VideoCore error, no framebuffer
```
Az üzenet első fele platformonként változik. Azt jelenti, hogy a betöltő nem tudta beállítani a lineáris framebufffert
32 bites tömörített pixelekkel a kért felbontásban. Lehetséges megoldás a felbontás módosítása `screen=800x600`-ra vagy
`screen=1024x768`-ra a környezeti fájlban.
```
BOOTBOOT-PANIC: Unsupported cipher
```
Ezt akkor írja ki, ha az initrd olyan titkosítást használ, amit a betöltő nem ismer. Megoldás: újra kell generálni az
initrd-t SHA-XOR-CBC-vel, amit minden betöltő implementációnak támogatnia kell (megjegyzés: a titikosítás csak FS/Z
esetén támogatott).
Ez minden, remélem hasznososnak találod!

48
aarch64-rpi/OLVASSEL.md Normal file
View file

@ -0,0 +1,48 @@
BOOTBOOT Raspberry Pi 3 Implementáció
=====================================
Általános leírásért lásd a [BOOTBOOT Protokoll](https://gitlab.com/bztsrc/bootboot)t.
A [Raspberry Pi 3](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/sdcard.md) gépen a bootboot.img-t a
start.elf tölti be kernel8.ig néven az SD kártya első partíciójáról. Ha külön förmver és boot partíciót szeretnél, olvasd el
a [dokumentációt](https://gitlab.com/bztsrc/bootboot/blob/master/bootboot_spec_1st_ed.pdf).
Gép állapot
-----------
A szokásos leképezéseken túl az MMIO is leképezésre kerül a kernel címtartományba:
```
-128M MMIO (0xFFFFFFFFF8000000)
```
A kód felügyeleti módban, EL1-en fut minden processzoron. Egyszerű kivételkezelő be van állítva ugyan, de a kernelednek
minnél előbb érdemes sajátra váltania.
Fájl rendszer meghajtók
-----------------------
A boot partíció az RPi3 verzióban FAT16 vagy FAT32 fájl rendszer lehet (ha az initrd egy fájl és nem egy teljes partíció).
Az initrd soros vonalról is betölthető, ehhez a távoli gépen a [raspbootcom](https://gitlab.com/bztsrc/bootboot/blob/master/aarch64-rpi/raspbootcom.c)-ot kell futtatni.
A gzip tömörítés ellenjavalt, mivel az SD kártya sebessége lényegesen gyorsabb, mint a kitömörítésé.
Telepítés
---------
1. Másold be a __bootboot.img__-t az **_FS0:\KERNEL8.IMG_**-be.
2. Szükséged lesz egyéb [förmver fájlok](https://gitlab.com/raspberrypi/firmware/tree/master/boot)ra is (bootcode.bin, start.elf, fixup,dat).
3. Ha GPT-t használtál ESP-vel boot partíciónak, akkor le kell azt képezni az MBR-be, hogy a Raspberry Pi
förmvere megtalálja azokat a fájlokat. A [mkboot](https://gitlab.com/bztsrc/bootboot/blob/master/aarch64-rpi/mkboot.c)
szerszám ezt megteszi neked.
Limitációk
----------
- Nem lehet az initrd-t a ROM-ban tárolni
- Csak az első 1G RAM-ot képezi le.
- Egyéb kártyák, mint az SDHC Class 10 nincsenek támogatva.
- Raspberry Pi-n nincs alaplapi RTC, ezért mindig 0000-00-00 00:00:00 kerül a bootboot.datetime-ba.
- Csak a SHA-XOR-CBC titkosítást ismeri, nincs AES

View file

@ -33,7 +33,7 @@ Installation
1. Copy __bootboot.img__ to **_FS0:\KERNEL8.IMG_**.
2. You'll need other [firmware files](https://gitlab.com/raspberrypi/firmware/tree/master/boot) as well.
2. You'll need other [firmware files](https://gitlab.com/raspberrypi/firmware/tree/master/boot) as well (bootcode.bin, start.elf, fixup,dat).
3. If you have used a GPT disk with ESP as boot partition, then you need to map it in MBR so that Raspberry Pi
firmware could find those files. The [mkboot](https://gitlab.com/bztsrc/bootboot/blob/master/aarch64-rpi/mkboot.c)

47
x86_64-bios/OLVASSEL.md Normal file
View file

@ -0,0 +1,47 @@
BOOTBOOT BIOS / Multiboot / El Torito / Bővító ROM / Linux boot Implementáció
=============================================================================
Általános leírásért lásd a [BOOTBOOT Protokoll](https://gitlab.com/bztsrc/bootboot)t.
A [BIOS](http://www.scs.stanford.edu/05au-cs240c/lab/specsbbs101.pdf)-t támogató gépeken ugyanaz a betöltő működik
[Multiboot](https://www.gnu.org/software/grub/manual/multiboot/multiboot.html)tal, láncbetöltéssel MBR, VBR (GPT hibrid indítás)
és CDROM indító szektorból, vagy BIOS bővítő ROM-ból (szóval nemcsak a ramlemez lehet a ROM-ban, de maga a betöltő is), de
betölthető [Linux kernel](https://elixir.bootlin.com/linux/latest/source/Documentation/x86/boot.txt)ként is (ISOLINUX, LoadLin stb.).
Gép állapot
-------------
IRQ-k letiltva, GDT nincs meghatározva, de érvényes, IDT nincs beállítva. SSE, SMP engedélyezve. Kód felügyeleti módban, 0-ás gyűrűn
fut minden processzormagon.
Telepítés
---------
1. *BIOS lemez / cdrom*: másold be a __bootboot.bin__-t az **_FS0:\BOOTBOOT\LOADER_**-be. Rakhatod az INITRD partíciódra de akár
a partíciós területen kívülre is (lásd `dd conv=notrunc oseek=x`). Végezetül telepítsd a __boot.bin__-t az
El Torito Boot katalógusába "no emulation" módban, vagy a Master Boot Record-ba (illetve Volume Boot Record-ba ha
boot menedzsert használsz), a bootboot.bin első szektorának LBA címét lemetve 32 biten a 0x1B0 címre. A [mkboot](https://gitlab.com/bztsrc/bootboot/blob/master/x86_64-bios/mkboot.c)
szerszám ezt megteszi neked.
2. *BIOS ROM*: égesd ki a __bootboot.bin__-t egy **_BIOS Bővító ROM_**-ba.
3. *GRUB*: add meg a __bootboot.bin__-t Multiboot "kernel"-nek a grub.cfg-ban, vagy lánctöltheted a __boot.bin__-t. Az initrd-t
és a környezeti fájl is betöltheted modulként (ebben a sorrendben). Ha nincs modul megadva, akkor a lemezen fogja keresni őket
a szokásos helyen. Példa:
```
menuentry "MyKernel" {
multiboot /bootboot/loader # bootboot.bin
module /bootboot/initrd # első modul az initrd (opcionális)
module /bootboot/config # második modul a konfigurációs fájl (opcionális)
boot
}
```
Limitációk
----------
- Mivel védett módban indul, csak az első 4G-nyi RAM-ot képezi le.
- ROM-beli tömörített initrd maximum ~96k lehet.
- A CMOS nvram nem tárol időzónát, ezért mindig GMT+0 kerül a bootboot.timezone-ba.
- Csak a SHA-XOR-CBC titkosítást ismeri, nincs AES

58
x86_64-efi/OLVASSEL.md Normal file
View file

@ -0,0 +1,58 @@
BOOTBOOT UEFI Implementáció
===========================
Általános leírásért lásd a [BOOTBOOT Protokoll](https://gitlab.com/bztsrc/bootboot)t.
Az [UEFI gépek](https://www.uefi.org/)en egy szabványos OS Loader alkalmazás használatos PCI Opció ROM-ként is.
Gép állapot
-----------
IRQ-k letiltva, GDT nincs meghatározva, de érvényes, IDT nincs beállítva. SSE, SMP engedélyezve. Kód felügyeleti módban, 0-ás gyűrűn
fut minden processzormagon.
Fájl rendszer meghajtók
-----------------------
Az UEFI verzióban a boot pratíción bármilyen fájl rendszer lehet, amit az EFI Simple File System Protocol támogat.
Ez az implementáció támogatja mind az SHA-XOR-CBC, mind az AES-256-CBC titkosítást.
Telepítés
---------
1. *UEFI lemez*: másold be a __bootboot.efi__-t az **_FS0:\EFI\BOOT\BOOTX64.EFI_**-be.
2. *UEFI ROM*: égesd ki a __bootboot.rom__-t, ami egy szabványos **_PCI Option ROM kép_**.
3. *GRUB*, *UEFI Boot Menedzser*: add hozzá a __bootboot.efi__-t az indítási opciókhoz.
Az EFI Shell-ből interaktívan is futtathatod a betöltőt paramétereket megadva a parancssorban.
```
FS0:\> EFI\BOOT\BOOTX64.EFI /?
BOOTBOOT LOADER (build Oct 11 2017)
SYNOPSIS
BOOTBOOT.EFI [ -h | -? | /h | /? ] [ INITRDFILE [ ENVIRONMENTFILE [...] ] ]
DESCRIPTION
Bootstraps an operating system via the BOOTBOOT Protocol.
If arguments not given, defaults to
FS0:\BOOTBOOT\INITRD as ramdisk image and
FS0:\BOOTBOOT\CONFIG for boot environment.
Additional "key=value" command line arguments will be appended to the
environment. If INITRD not found, it will use the first bootable partition
in GPT. If CONFIG not found, it will look for /sys/config inside the
INITRD (or partition).
As this is a loader, it is not supposed to return control to the shell.
FS0:\>
```
Limitációk
----------
- Az első 16G-nyi RAM-ot képezi le.
- A PCI Option ROM-ot alá kell digitálisan írni ahhoz, hogy használni lehessen.
- A tömörített initrd ROM 16M-nyi lehet.

View file

@ -53,8 +53,6 @@ FS0:\>
Limitations
-----------
Known limitations:
- Maps the first 16G of RAM.
- PCI Option ROM should be signed in order to work.
- Compressed initrd in ROM is limited to 16M.