Sun, 01 Jun 2025 18:43:38 +0200
7 files changed,
35 insertions(+),
7 deletions(-)
M
CMakeLists.txt
→
CMakeLists.txt
@@ -66,6 +66,7 @@ kernel/drivers/vga_console.c
kernel/drivers/graphics.c kernel/drivers/ps2_keyboard.c kernel/drivers/tty.c + kernel/drivers/serial_console.c kernel/drivers/bios_speaker.c kernel/syscall.s kernel/sched/sched.c
M
kernel/core.c
→
kernel/core.c
@@ -226,7 +226,7 @@ outb(0xFE, 0x64);
} int core_init(void) { - core_con = std_con; + core_con = &serial_con; return core_con->init(); }
M
kernel/drivers/console.h
→
kernel/drivers/console.h
@@ -48,6 +48,9 @@
//! VGA console driver (default driver) extern CON_DRIVER vga_con; +//! Serial driver for COM1 +extern CON_DRIVER serial_con; + extern CON_DRIVER *std_con; -#endif+#endif
A
kernel/drivers/serial_console.c
@@ -0,0 +1,19 @@
+#include "assembly.h" +#include "drivers/console.h" + +int serial_con_init(void); +void serial_con_write_c(const char c); + +CON_DRIVER serial_con = { + .name = "Serial console", + .init = serial_con_init, + .write_c = serial_con_write_c +}; + +int serial_con_init(void) { + return 0; +} + +void serial_con_write_c(const char c) { + outb(c, 0x3F8); +}
M
kernel/drivers/tty.c
→
kernel/drivers/tty.c
@@ -1,3 +1,4 @@
+#include "console.h" #include "file.h" #include "drivers/tty.h"@@ -56,6 +57,6 @@ return i;
} int tty_write(int fd, char *buffer, uint32_t size) { - std_con->write_n(buffer, size); + vga_con.write_n(buffer, size); return size; -}+}
M
kernel/main.c
→
kernel/main.c
@@ -36,6 +36,10 @@ int os_init(void) {
core_init(); printk("Core functions initialized.\n"); + printk("Initializing VGA console..."); + vga_con.init(); + printk("done.\n"); + printk("Initializing PIC..."); pic_init(); printk("done.\n");@@ -160,4 +164,4 @@ // this should never happen.
kpanic("Returned from idle process!"); return 0; -}+}
M
run.sh
→
run.sh
@@ -1,5 +1,5 @@
if [ -z "$QEMU_VNC" ]; then - qemu-system-i386 -drive index=0,if=floppy,format=raw,file=${1} -m 64 -monitor stdio -no-reboot -d int,cpu_reset,exec,in_asm -vga std 2> logs/run_err.log + qemu-system-i386 -drive index=0,if=floppy,format=raw,file=${1} -m 64 -serial file:logs/serial.log -monitor stdio -no-reboot -d int,cpu_reset,exec,in_asm -vga std 2> logs/run_err.log else - qemu-system-i386 -drive index=0,if=floppy,format=raw,file=${1} -m 64 -monitor stdio -no-reboot -d int,cpu_reset,exec,in_asm -vga std -vnc :0 2> logs/run_err.log + qemu-system-i386 -drive index=0,if=floppy,format=raw,file=${1} -m 64 -serial file:logs/serial.log -monitor stdio -no-reboot -d int,cpu_reset,exec,in_asm -vga std -vnc :0 2> logs/run_err.log fi