Debug GDT enable multitasking
This commit is contained in:
parent
4f08ba2b1d
commit
e59104ffb5
14 changed files with 283 additions and 85 deletions
|
@ -28,15 +28,18 @@ extern u64 gdt64_tss;
|
|||
|
||||
void configure_tss(){
|
||||
// Get TSS physical address
|
||||
u64 tss_addr=(u64)PHY(&kvar_tss);
|
||||
u64 tss_addr=(u64)&kvar_tss;
|
||||
u32 limit=sizeof(TSS);
|
||||
|
||||
u32 desc1=(tss_addr&0xFFFF)<<16|(limit&0xFFFF);
|
||||
tss_addr>>=16;
|
||||
u32 desc2=(tss_addr&0xFF);
|
||||
desc2|=0b1001<<8; // Type
|
||||
desc2|=0b111<<13; // Permission & present
|
||||
u32 desc3=((limit>>8)&0xFFFF)|(limit>>24);
|
||||
|
||||
desc2|=0b11101001<<8; // Type, Permission, present
|
||||
tss_addr>>=8;
|
||||
desc2|=tss_addr<<24;
|
||||
tss_addr>>=8;
|
||||
u32 desc3=tss_addr;
|
||||
|
||||
// Configure GDT
|
||||
u32 *gdt_entry=(u32*)&gdt64_tss;
|
||||
gdt_entry[0]=desc1;
|
||||
|
@ -46,6 +49,7 @@ void configure_tss(){
|
|||
|
||||
// Configure segment
|
||||
kvar_tss.rsp0=(u64)VIRT(kvar_stack_pma);
|
||||
kvar_tss.iomap_address=0;
|
||||
asm(
|
||||
"mov $0x28, %ax \n\t"
|
||||
"ltr %ax"
|
||||
|
@ -53,9 +57,15 @@ void configure_tss(){
|
|||
}
|
||||
|
||||
void task1(){
|
||||
u64 a=0xEEEEEE;
|
||||
DUMP(a);
|
||||
while(1);
|
||||
while(1){
|
||||
asm("mov $1, %rdi;int $0x30");
|
||||
}
|
||||
}
|
||||
|
||||
void task2(){
|
||||
while(1){
|
||||
asm("mov $2, %rdi;int $0x30");
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void boucane(u64 mb_info){
|
||||
|
@ -77,7 +87,7 @@ extern "C" void boucane(u64 mb_info){
|
|||
memtext_init();
|
||||
idt_enable_interrupt();
|
||||
apic_enable();
|
||||
|
||||
|
||||
// Looking for framebuffer
|
||||
FRAMEBUFFER fb_info;
|
||||
if(mb2_find_framebuffer((u32*)mb_info, &fb_info)){
|
||||
|
@ -97,23 +107,25 @@ extern "C" void boucane(u64 mb_info){
|
|||
__putchar=vgatext_putchar;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Booting!
|
||||
printk("Booting Boucane v%d.%d.%d\n",VERSION_MAJOR,VERSION_MINOR, VERSION_PATH);
|
||||
|
||||
printk("System informations -- ");
|
||||
char bootloader[20];
|
||||
if(mb2_find_bootloader_name((u32*)mb_info,bootloader)){
|
||||
printk("System informations -- BOOT:%s ", bootloader);
|
||||
|
||||
printk("BOOT:%s ", bootloader);
|
||||
}
|
||||
|
||||
|
||||
MEM_INFO mem_infos;
|
||||
if(mb2_find_mem((u32*)mb_info,&mem_infos)){
|
||||
u64 mem=mem_infos.mem_upper-mem_infos.mem_lower;
|
||||
mem/=1024;
|
||||
printk("RAM:%dMB\n", mem);
|
||||
}
|
||||
|
||||
//create_task((void*)task1, 50);
|
||||
//scheduler_start();
|
||||
show_ticks=1;
|
||||
create_task((void*)task1, 50);
|
||||
create_task((void*)task2, 50);
|
||||
scheduler_start();
|
||||
while(1);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue