forked from PoliEcho-holding-org/kern
vmm bullshit
This commit is contained in:
+47
-17
@@ -1,23 +1,28 @@
|
||||
#include "errno.h"
|
||||
#include "types.h"
|
||||
#include <bootloader.h>
|
||||
#include <kernel.h>
|
||||
#include <paging.h>
|
||||
#include <serial.h>
|
||||
#include <random.h>
|
||||
#include <splash.h>
|
||||
#include <system.h>
|
||||
#include <gdt.h>
|
||||
#include <isr.h>
|
||||
#include <kernel.h>
|
||||
#include <paging.h>
|
||||
#include <pmm.h>
|
||||
#include <random.h>
|
||||
#include <serial.h>
|
||||
#include <splash.h>
|
||||
#include <string.h>
|
||||
#include <system.h>
|
||||
#include <vmm.h>
|
||||
|
||||
__noreturn
|
||||
void _start(void) {
|
||||
__noreturn void _start(void) {
|
||||
int err = 0;
|
||||
|
||||
// Serial console for debugging
|
||||
if ((err = serial_init(COM1)) < 0) panic(NULL, "Failed to initialize Serial driver. (%d)", err);
|
||||
if ((err = serial_init(COM1)) < 0)
|
||||
panic(NULL, "Failed to initialize Serial driver. (%d)", err);
|
||||
|
||||
// Load structures from bootloader
|
||||
if ((err = boot_init()) < 0) panic(NULL, "Failed to parse bootloader structures. (%d)", err);
|
||||
if ((err = boot_init()) < 0)
|
||||
panic(NULL, "Failed to parse bootloader structures. (%d)", err);
|
||||
|
||||
// CPUID thingy :p
|
||||
uint32_t eax = 0;
|
||||
@@ -26,26 +31,51 @@ void _start(void) {
|
||||
pr_info("[kernel] CPUID_GETVENDORID: %s\n", s);
|
||||
|
||||
// System init
|
||||
if ((err = gdt_init()) < 0) panic(NULL, "Failed to initalize GDT. (%d)", err);
|
||||
if ((err = isr_init()) < 0) panic(NULL, "Failed to initalize ISRs. (%d)", err);
|
||||
if ((err = gdt_init()) < 0)
|
||||
panic(NULL, "Failed to initalize GDT. (%d)", err);
|
||||
if ((err = isr_init()) < 0)
|
||||
panic(NULL, "Failed to initalize ISRs. (%d)", err);
|
||||
|
||||
// Memory management
|
||||
if ((err = pmm_init()) < 0) panic(NULL, "Failed to initalize Physical Memory Manager. (%d)", err);
|
||||
if ((err = pag_init()) < 0) panic(NULL, "Failed to initalize Paging. (%d)", err);
|
||||
if ((err = pmm_init()) < 0)
|
||||
panic(NULL, "Failed to initalize Physical Memory Manager. (%d)",
|
||||
err);
|
||||
if ((err = pag_init()) < 0)
|
||||
panic(NULL, "Failed to initalize Paging. (%d)", err);
|
||||
|
||||
// random number generation
|
||||
rand_init();
|
||||
// test random number generation
|
||||
printk("Random number generation test:\n");
|
||||
for (uint8_t i = 0; i <= 16; i++) {
|
||||
printk("%d: %lu\n",i,get_random_number());
|
||||
printk("%d: %lu\n", i, get_random_number());
|
||||
}
|
||||
|
||||
// test VMM
|
||||
{
|
||||
void* vaddr;
|
||||
int ret = vmm_alloc(&vaddr, 2, 0);
|
||||
if (ret != SUCCESS) {
|
||||
panic(NULL, "vmm_alloc returned %d", ret);
|
||||
}
|
||||
{
|
||||
uint64_t* pml4 = pag_get_pml4();
|
||||
uint64_t* pte = pag_get_pte(pml4, vaddr);
|
||||
if (!IS_ERR(pte) && (*pte & PTE_FLAG_PRESENT)) {
|
||||
printk("page allocated\n");
|
||||
} else {
|
||||
printk("page not allocated\n");
|
||||
}
|
||||
}
|
||||
memset(vaddr, 69, 2 * PAGE_SIZE);
|
||||
*(char*)((vaddr + (2 * PAGE_SIZE)) - 1) = 0;
|
||||
printk("read back:\n%s\n", (char*)vaddr);
|
||||
}
|
||||
|
||||
// The most important function in the world.
|
||||
splash();
|
||||
|
||||
// Patiently wait for things to do :)
|
||||
while (1);
|
||||
while (1)
|
||||
;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user