Update markdowns
This commit is contained in:
parent
41e03713a3
commit
06e7f90794
@ -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`.
|
||||
|
@ -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
|
||||
|
||||
|
50
STIVALE.md
50
STIVALE.md
@ -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.
|
||||
|
37
STIVALE2.md
37
STIVALE2.md
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user