Update markdowns

This commit is contained in:
mintsuki 2020-09-21 14:08:45 +02:00
parent 41e03713a3
commit 06e7f90794
4 changed files with 68 additions and 28 deletions

View File

@ -21,6 +21,7 @@ Some *local assignments* are shared between entries using any *protocol*, while
*Globally assignable* keys are:
* `TIMEOUT` - Specifies the timeout in seconds before the first *entry* is automatically booted.
* `TEXTMODE` - If set to `on`, do not use graphical VESA framebuffer for the boot menu.
*Locally assignable (non protocol specific)* keys are:
* `PROTOCOL` - The boot protocol that will be used to boot the kernel. Valid protocols are: `linux`, `stivale`, `chainload`.

View File

@ -1,7 +1,11 @@
# Limine
### What is Limine?
Limine is an advanced x86/x86_64 BIOS Bootloader which supports *modern* PC features
such as AMD64, 5-level paging, and SMP (multicore), to name a few.
such as Long Mode, 5-level paging, and SMP (multicore), to name a few.
## Limine's boot menu
![Reference screenshot](/screenshot.png?raw=true "Reference screenshot")
@ -10,7 +14,7 @@ such as AMD64, 5-level paging, and SMP (multicore), to name a few.
* stivale and stivale2 (Limine's native boot protocols, see STIVALE{,2}.md for details)
### Supported filesystems
* ext2
* ext2/3/4
* echfs
* FAT32

View File

@ -14,19 +14,16 @@ stivale will recognise whether the ELF file is 32-bit or 64-bit and load the ker
into the appropriate CPU mode.
stivale natively supports (only for 64-bit kernels) and encourages higher half kernels.
The kernel can load itself at `0xffffffff80100000` (as defined in the linker script)
The kernel can load itself at `0xffffffff80000000` (as defined in the linker script)
and the bootloader will take care of everything, no AT linker script directives needed.
If the kernel loads itself in the lower half (`0x100000` or higher), the bootloader
will not perform the higher half relocation.
If the kernel loads itself in the lower half, the bootloader will not perform the
higher half relocation.
The kernel MUST NOT overwrite anything below `0x100000` (physical memory) as that
is where the bootloader memory structures reside.
Once the kernel is DONE depending on the bootloader (for page tables, structures, ...)
then these areas can be reclaimed if one wants.
The kernel MUST NOT request to load itself at an address lower than `0x100000`
(or `0xffffffff80100000` for higher half kernels) for the same reasons as above.
*Note: In order to maintain compatibility with Limine and other stivale-compliant*
*bootloaders it is strongly advised never to load the kernel or any of its*
*sections below the 1 MiB physical memory mark. This may work with some stivale*
*loaders, but it WILL NOT work with Limine and it's explicitly discouraged.*
## Kernel entry machine state
@ -110,6 +107,26 @@ before the entry point is called.
All other general purpose registers are set to 0.
## Bootloader-reserved memory
In order for stivale to function, it needs to reserve memory areas for either internal
usage (such as page tables, GDT, SMP), or for kernel interfacing (such as returned
structures).
stivale ensures that none of these areas are found in any of the sections
marked as "usable" in the memory map.
The location of these areas may vary and it is implementation specific;
these areas may be in any non-usable memory map section, or in unmarked memory.
The OS must make sure to be done consuming bootloader information and services
before switching to its own address space, as unmarked memory areas in use by
the bootloader may become unavailable.
Once the OS is done needing the bootloader, memory map areas marked as "bootloader
reclaimable" may be used as usable memory. These areas are not guaranteed to be
aligned, but they are guaranteed to not overlap other sections of the memory map.
## stivale header (.stivalehdr)
The kernel executable shall have a section `.stivalehdr` which will contain
@ -180,12 +197,13 @@ struct mmap_entry {
`type` is an enumeration that can have the following values:
```
1 - Usable RAM
2 - Reserved
3 - ACPI reclaimable
4 - ACPI NVS
5 - Bad memory
10 - Kernel/Modules
1 - Usable RAM
2 - Reserved
3 - ACPI reclaimable
4 - ACPI NVS
5 - Bad memory
10 - Kernel/Modules
0x1000 - Bootloader Reclaimable
```
All other values are undefined.

View File

@ -14,19 +14,16 @@ stivale2 will recognise whether the ELF file is 32-bit or 64-bit and load the ke
into the appropriate CPU mode.
stivale2 natively supports (only for 64-bit kernels) and encourages higher half kernels.
The kernel can load itself at `0xffffffff80100000` or higher (as defined in the linker script)
The kernel can load itself at `0xffffffff80000000` or higher (as defined in the linker script)
and the bootloader will take care of everything, no AT linker script directives needed.
If the kernel loads itself in the lower half (`0x100000` or higher), the bootloader
will not perform the higher half relocation.
If the kernel loads itself in the lower half, the bootloader will not perform the
higher half relocation.
The kernel MUST NOT overwrite anything below `0x100000` (physical memory) as that
is where the bootloader memory structures reside.
Once the kernel is DONE depending on the bootloader (for page tables, structures, ...)
then these areas can be reclaimed if one wants.
The kernel MUST NOT request to load itself at an address lower than `0x100000`
(or `0xffffffff80100000` for higher half kernels) for the same reasons as above.
*Note: In order to maintain compatibility with Limine and other stivale2-compliant*
*bootloaders it is strongly advised never to load the kernel or any of its*
*sections below the 1 MiB physical memory mark. This may work with some stivale2*
*loaders, but it WILL NOT work with Limine and it's explicitly discouraged.*
## Kernel entry machine state
@ -110,6 +107,26 @@ before the entry point is called.
All other general purpose registers are set to 0.
## Bootloader-reserved memory
In order for stivale2 to function, it needs to reserve memory areas for either internal
usage (such as page tables, GDT, SMP), or for kernel interfacing (such as returned
structures).
stivale2 ensures that none of these areas are found in any of the sections
marked as "usable" in the memory map.
The location of these areas may vary and it is implementation specific;
these areas may be in any non-usable memory map section, or in unmarked memory.
The OS must make sure to be done consuming bootloader information and services
before switching to its own address space, as unmarked memory areas in use by
the bootloader may become unavailable.
Once the OS is done needing the bootloader, memory map areas marked as "bootloader
reclaimable" may be used as usable memory. These areas are not guaranteed to be
aligned, but they are guaranteed to not overlap other sections of the memory map.
## stivale2 header (.stivale2hdr)
The kernel executable shall have a section `.stivale2hdr` which will contain