Creating scheduler, debug paging
This commit is contained in:
parent
fb69c7b058
commit
4f08ba2b1d
16 changed files with 227 additions and 88 deletions
|
@ -1,4 +1,5 @@
|
|||
#include "boucane.hpp"
|
||||
#include "core/apic.hpp"
|
||||
#include "core/paging.hpp"
|
||||
#include "drivers/memtext.hpp"
|
||||
#include "core/idt.hpp"
|
||||
|
@ -9,6 +10,7 @@
|
|||
#include "libs/stdio.hpp"
|
||||
#include "libs/string.hpp"
|
||||
#include "drivers/bmp.hpp"
|
||||
#include "core/scheduler.hpp"
|
||||
|
||||
u64 kvar_kernel_vma;
|
||||
u64 kvar_stack_pma;
|
||||
|
@ -25,26 +27,35 @@ void (*printk)(char *str,...)=printf;
|
|||
extern u64 gdt64_tss;
|
||||
|
||||
void configure_tss(){
|
||||
u64 tss_addr=(u64)&kvar_tss;
|
||||
u32 desc1=(tss_addr&0xFFFF)<<16|(sizeof(TSS)&0xFFFF);
|
||||
tss_addr>>=16;
|
||||
u32 desc2=(tss_addr&0xFF)|((tss_addr>>8)<<24);
|
||||
tss_addr>>=16;
|
||||
u32 desc3=tss_addr;
|
||||
// Get TSS physical address
|
||||
u64 tss_addr=(u64)PHY(&kvar_tss);
|
||||
u32 limit=sizeof(TSS);
|
||||
|
||||
// Options
|
||||
u32 options=0b1001; // 64-bits TSS type
|
||||
options|=(0b1000<<4); // Present
|
||||
u32 desc1=(tss_addr&0xFFFF)<<16|(limit&0xFFFF);
|
||||
u32 desc2=(tss_addr&0xFF);
|
||||
desc2|=0b1001<<8; // Type
|
||||
desc2|=0b111<<13; // Permission & present
|
||||
u32 desc3=((limit>>8)&0xFFFF)|(limit>>24);
|
||||
|
||||
// Configure GDT
|
||||
u32 *gdt_entry=(u32*)&gdt64_tss;
|
||||
gdt_entry[0]=desc1;
|
||||
gdt_entry[1]=desc2|(options<<8);
|
||||
gdt_entry[1]=desc2;
|
||||
gdt_entry[2]=desc3;
|
||||
gdt_entry[3]=0;
|
||||
|
||||
// Configure segment
|
||||
kvar_tss.rsp0=(u64)VIRT(kvar_stack_pma);
|
||||
asm(
|
||||
"mov $0x28, %ax \n\t"
|
||||
"ltr %ax"
|
||||
);
|
||||
}
|
||||
|
||||
void task1(){
|
||||
u64 a=0xEEEEEE;
|
||||
DUMP(a);
|
||||
while(1);
|
||||
}
|
||||
|
||||
extern "C" void boucane(u64 mb_info){
|
||||
|
@ -60,11 +71,12 @@ extern "C" void boucane(u64 mb_info){
|
|||
asm volatile ("movq $res_binary_res_logo_bmp_end, %0":"=m"(kvar_logo_bmp_end));
|
||||
|
||||
// Init data structures
|
||||
configure_tss();
|
||||
asm volatile ("call load_gdt");
|
||||
configure_tss();
|
||||
paging_enable();
|
||||
memtext_init();
|
||||
idt_enable_interrupt();
|
||||
apic_enable();
|
||||
|
||||
// Looking for framebuffer
|
||||
FRAMEBUFFER fb_info;
|
||||
|
@ -101,7 +113,7 @@ extern "C" void boucane(u64 mb_info){
|
|||
printk("RAM:%dMB\n", mem);
|
||||
}
|
||||
|
||||
printk("%x",&kvar_tss);
|
||||
DUMP(&gdt64_tss);
|
||||
//create_task((void*)task1, 50);
|
||||
//scheduler_start();
|
||||
while(1);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue