CeDOS - Commit a02555ee

Implement serial console driver Signed-off-by: Celina Sophie Kalus <hello@celinakalus.de>
Celina Sophie Kalus
Sun, 01 Jun 2025 18:43:38 +0200
7 files changed, 35 insertions(+), 7 deletions(-)
M CMakeLists.txtCMakeLists.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.ckernel/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.hkernel/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.ckernel/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.ckernel/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.shrun.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