fixed issues when running on hardware
This commit is contained in:
@@ -1,53 +1,19 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"file": "kernel/drivers/iso/iso.c",
|
|
||||||
"arguments": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
"-c",
|
"-c",
|
||||||
"kernel/drivers/iso/iso.c",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/iso/iso.o",
|
|
||||||
"-ffreestanding",
|
"-ffreestanding",
|
||||||
"-O2",
|
"-O2",
|
||||||
"-Wall",
|
"-Wall",
|
||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel"
|
"-Ikernel",
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"output": "obj/kernel/drivers/iso/iso.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "kernel/kmain.c",
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"kernel/kmain.c",
|
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/kmain.o",
|
"obj/kernel/boot/boot.o",
|
||||||
"-ffreestanding",
|
"kernel/boot/boot.S"
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel"
|
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"output": "obj/kernel/kmain.o"
|
"file": "/home/slinky/source/RockOS/kernel/boot/boot.S",
|
||||||
},
|
"output": "/home/slinky/source/RockOS/obj/kernel/boot/boot.o"
|
||||||
{
|
|
||||||
"file": "kernel/drivers/pic/pic_stubs.S",
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"kernel/drivers/pic/pic_stubs.S",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/pic/pic_stubs.o",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"output": "obj/kernel/drivers/pic/pic_stubs.o"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -117,14 +117,12 @@ void kmain(uint32_t magic, multiboot_info* mbi) {
|
|||||||
uint32_t mmap_virtual_addr = mbi->mmap_addr + 0xC0000000;
|
uint32_t mmap_virtual_addr = mbi->mmap_addr + 0xC0000000;
|
||||||
kprintf("mmap virtual address: 0x%x\n", mmap_virtual_addr);
|
kprintf("mmap virtual address: 0x%x\n", mmap_virtual_addr);
|
||||||
init_pmm((void*)mmap_virtual_addr, mbi->mmap_length);
|
init_pmm((void*)mmap_virtual_addr, mbi->mmap_length);
|
||||||
uint32_t mem_size = total_free_memory();
|
|
||||||
kprintf("Total available memory: %d MB\n", mem_size / 1024 / 1024);
|
|
||||||
|
|
||||||
kprintf("RockOS booting...\n");
|
kprintf("RockOS booting...\n");
|
||||||
init_gdt();
|
init_gdt();
|
||||||
extern uint64_t gdt[5];
|
extern uint64_t gdt[5];
|
||||||
kprintf("GDT set @ 0x%x\n", &gdt);
|
kprintf("GDT set @ 0x%x\n", &gdt);
|
||||||
|
|
||||||
init_idt();
|
init_idt();
|
||||||
extern idt_entry idt[256];
|
extern idt_entry idt[256];
|
||||||
kprintf("IDT set @ 0x%x\n", &idt);
|
kprintf("IDT set @ 0x%x\n", &idt);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "memory/mm.h"
|
#include "memory/mm.h"
|
||||||
|
#include "lib/print.h"
|
||||||
#include "multiboot.h"
|
#include "multiboot.h"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
@@ -61,6 +62,7 @@ static void parse_multiboot_mmap(void* base, uint32_t limit) {
|
|||||||
uint32_t usable_start, usable_end, usable_size;
|
uint32_t usable_start, usable_end, usable_size;
|
||||||
usable_size = align(region_start, entry->len, &usable_start, &usable_end);
|
usable_size = align(region_start, entry->len, &usable_start, &usable_end);
|
||||||
if (usable_size <= 4096) {
|
if (usable_size <= 4096) {
|
||||||
|
entry = (multiboot_mmap_entry*)((uint32_t)entry + entry_size);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,6 +141,8 @@ void init_pmm(void* mmap_base, uint32_t mmap_limit) {
|
|||||||
if (mmap_base != NULL && mmap_limit > 0) {
|
if (mmap_base != NULL && mmap_limit > 0) {
|
||||||
parse_multiboot_mmap(mmap_base, mmap_limit);
|
parse_multiboot_mmap(mmap_base, mmap_limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kprintf("total free memory: %dMB\n", total_available_memory / 1024 / 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_page_tables() {
|
void init_page_tables() {
|
||||||
|
|||||||
Reference in New Issue
Block a user