diff options
-rw-r--r-- | kernel/entry.c | 7 | ||||
-rw-r--r-- | kernel/main.c | 9 | ||||
-rw-r--r-- | kernel/multiboot.h | 9 |
3 files changed, 22 insertions, 3 deletions
diff --git a/kernel/entry.c b/kernel/entry.c index 2496d21..61ac82b 100644 --- a/kernel/entry.c +++ b/kernel/entry.c @@ -47,6 +47,8 @@ void entry_main(uint32_t mb_magic, multiboot_info* mb_info) { entry_serial_out("No cmdline.\n"); } + entry_serial_out("Module addr: "); + entry_serial_out_hex(mb_info->mods_addr->mod_start); // Create initial page tables. for(unsigned int i = 0; i < 1024; i++) { @@ -54,7 +56,8 @@ void entry_main(uint32_t mb_magic, multiboot_info* mb_info) { entry_pagedir[i] = 0; // Identity mapping of the current code. - entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | 0x003; + //entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | 0x003; + entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | 0x007; // Map kernelspace. if((i << 12) < ((uint32_t)&addr_virt_end & 0x003fffff)) { @@ -64,7 +67,7 @@ void entry_main(uint32_t mb_magic, multiboot_info* mb_info) { } } - entry_pagedir[(uint32_t)&addr_phys >> 22] = (uint32_t)&entry_pagetable_low | 0x003; + entry_pagedir[(uint32_t)&addr_phys >> 22] = (uint32_t)&entry_pagetable_low | 0x007; entry_pagedir[(uint32_t)&addr_virt >> 22] = (uint32_t)&entry_pagetable_high | 0x003; // Mapping stack to top without creating another page directory. diff --git a/kernel/main.c b/kernel/main.c index 74ba441..93647f5 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -17,6 +17,15 @@ void main() { asm volatile("sti"); + asm volatile( + "push $0x23\n" + "push $entry_stack_top\n" + "pushf\n" + "push $0x1b\n" + "push $0x0010a000\n" + "iret\n" + ); + printf("Halting.\n"); asm volatile( diff --git a/kernel/multiboot.h b/kernel/multiboot.h index 5a9e348..93a5c30 100644 --- a/kernel/multiboot.h +++ b/kernel/multiboot.h @@ -4,6 +4,13 @@ #include "types.h" typedef struct { + uint32_t mod_start; + uint32_t mod_end; + char* string; + uint32_t reserved; +} multiboot_module; + +typedef struct { uint32_t flags; uint32_t mem_lower; @@ -14,7 +21,7 @@ typedef struct { char* cmdline; uint32_t mods_count; - uint32_t mods_addr; + multiboot_module* mods_addr; union { uint32_t foo[3]; |