Add simple kernel logging and improve error messages
This commit is contained in:
+15
-5
@@ -2,11 +2,13 @@
|
||||
#include "src/kernel/gdt.h"
|
||||
#include "src/kernel/idt.h"
|
||||
#include "src/kernel/keyboard.h"
|
||||
#include "src/kernel/log.h"
|
||||
#include "src/kernel/panic.h"
|
||||
#include "src/kernel/path.h"
|
||||
#include "src/kernel/pic.h"
|
||||
#include "src/kernel/pipe.h"
|
||||
#include "src/kernel/process.h"
|
||||
#include "src/kernel/stream.h"
|
||||
#include "src/kernel/syscall.h"
|
||||
#include "src/kernel/timer.h"
|
||||
#include "src/kernel/tss.h"
|
||||
@@ -22,8 +24,14 @@ __attribute__((interrupt)) void isr_divide_by_zero(__attribute__((unused)) struc
|
||||
;
|
||||
}
|
||||
|
||||
__attribute__((interrupt)) void isr_page_fault(__attribute__((unused)) struct interrupt_frame *frame) {
|
||||
vga_set_string(VGA_HEIGHT - 1, 0, "EXCEPTION: page fault", 0x4F);
|
||||
__attribute__((interrupt)) void isr_page_fault(__attribute__((unused)) struct interrupt_frame *frame, uint64_t error_code) {
|
||||
uint64_t cr2;
|
||||
__asm__ volatile("mov %%cr2, %0" : "=r"(cr2));
|
||||
|
||||
char msg[80];
|
||||
string_format("EXCEPTION: page fault; addr=%x err=%x", 80, msg, cr2, error_code);
|
||||
|
||||
vga_set_string(VGA_HEIGHT - 1, 0, msg, 0x4F);
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
@@ -40,11 +48,14 @@ __attribute__((interrupt)) void isr_ata_primary(__attribute__((unused)) struct i
|
||||
}
|
||||
|
||||
void kernel_main() {
|
||||
stream_t *vga = vga_init();
|
||||
log_init(vga);
|
||||
|
||||
pic_init();
|
||||
idt_init();
|
||||
outb(0x21, inb(0x21) | 0x01); // mask out timer interrupt
|
||||
idt_set_entry(0, isr_divide_by_zero, 0x8E);
|
||||
idt_set_entry(0x0E, isr_page_fault, 0x8E);
|
||||
idt_set_entry_ec(0x0E, isr_page_fault, 0x8E);
|
||||
idt_set_entry(0x0D, isr_general_violation, 0x8E);
|
||||
idt_set_entry(46, isr_ata_primary, 0x8E);
|
||||
|
||||
@@ -59,8 +70,7 @@ void kernel_main() {
|
||||
kernel->user_stack = kernel->user_rsp = (uint8_t *)memory_allocate(PAGE_SIZE) + PAGE_SIZE;
|
||||
kernel->cwd = memory_allocate(sizeof(path_t));
|
||||
kernel->fds[STDIN] = keyboard_init();
|
||||
kernel->fds[STDOUT] = vga_init();
|
||||
kernel->fds[STDERR] = kernel->fds[STDOUT];
|
||||
kernel->fds[STDOUT] = kernel->fds[STDERR] = vga;
|
||||
kernel->free_fd = STDERR + 1;
|
||||
kernel->code = EXIT_CODE_OK;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user