kornos/src-stivale2/README.md

28 lines
1.2 KiB
Markdown

The stivale 2 protocol is a replacement for the stivale protocol that is able to be cleanly extended without breaking changes, it has support for extra features such as SMP compared to the older protocol.
## the stivale 2 header
This structure must be present in the `.stivale2hdr` section in order for your kernel to be loaded by stivale 2.
```c
struct stivale2_header {
uint64_t entry_point;
uint64_t stack;
uint64_t flags;
uint64_t tags;
} __attribute__((packed));
```
If `entry_point` is 0 then the ELF entry point will be jumped to, otherwise the address specified will be used, `stack` will be loaded into the stack pointer register, as of now `flags` is 1 if KASLR is to be enabled.
`tags` is a pointer to the first of a linked list of tags which determine the features requested by the kernel, the base structure of a tag is:
```c
struct stivale2_hdr_tag {
uint64_t identifier;
uint64_t next;
} __attribute__((packed));
```
Where `identifier` determines the type of the tag, while `next` determines the next tag, a value of `NULL` indicates the end of the list.
For further information on the supported tags consule the [Stivale2 Specification](https://github.com/limine-bootloader/limine/blob/master/STIVALE2.md)