28 lines
1.2 KiB
Markdown
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)
|