First commit, Vystem v0.1
This commit is contained in:
21
docs/shelter/keycard.md
Normal file
21
docs/shelter/keycard.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Kernel bootstrapping using keycard
|
||||
|
||||
## Introduction
|
||||
|
||||
Shelter being a kernel that need to start with pagging enabled, it need to have a intermediary program to safely jump to it: Keycard. Keycard and Shelter have been designed and thinked for x86-64 only.
|
||||
|
||||
## Overview
|
||||
|
||||
Keycard is a very simple assembly program with the following role in the following order:
|
||||
- loading the kernel page table and enabling pagging
|
||||
- loading and aligning the kernel stack
|
||||
- jumping to kernel entry point
|
||||
|
||||
In order to achieve that, it need to be identity mapped into virtual lower half into the kernel page table, using a physical address provided by UEFI firmware. The bootloader map it into a page (keycard compiled code fit into a single page) with allowed execution but read-only. It also have a kind of 'ABI' which specify which value to put into which register before jumping to Keycard:
|
||||
- `rax`: should contain the stack top virtual address (VA)
|
||||
- `rbx`: should contain the physical adrdess of the page table root
|
||||
- `rcx`: should contain the VA of the kernel entry point
|
||||
|
||||
Due to security concerns, the `keycard.bin` file contain the compiled code of Keycard and is stored inside the InitFS with the kernel VYX executable.
|
||||
|
||||
The Keycard source code is stored inside `Blastproof/src/keycard.asm`.
|
||||
Reference in New Issue
Block a user