From 2db9847f4138d159c4f6e99740fe889806a7f722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kala=C5=A1=20=28Floxen=29?= Date: Sun, 12 Jul 2026 12:15:17 +0200 Subject: [PATCH] =?UTF-8?q?Napojen=20printk=20na=20COM1,=20v=C3=BDstup=20s?= =?UTF-8?q?e=20te=C4=8F=20zrcadl=C3=AD=20na=20VGA=20i=20s=C3=A9riov=C3=BD?= =?UTF-8?q?=20port?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/printk.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/kernel/printk.c b/kernel/printk.c index 4c3d5a4..de7323a 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -15,6 +15,22 @@ #include "display.h" #include "printk.h" +#include "serial.h" + +static void printk_putc(char c) { + display_putc(c); + serial_write_char(c); +} + +static void printk_puts(const char *s) { + if (!s) { + s = "(null)"; + } + + while (*s) { + printk_putc(*s++); + } +} static void print_u64(unsigned long long value, unsigned int base) { char buf[32]; @@ -22,7 +38,7 @@ static void print_u64(unsigned long long value, unsigned int base) { int i = 0; if (value == 0) { - display_putc('0'); + printk_putc('0'); return; } @@ -32,12 +48,12 @@ static void print_u64(unsigned long long value, unsigned int base) { } while (i > 0) { - display_putc(buf[--i]); + printk_putc(buf[--i]); } } void aster_print(const char *text) { - display_write(text); + printk_puts(text); } void printk(const char *fmt, ...) { @@ -47,32 +63,29 @@ void printk(const char *fmt, ...) { while (*fmt) { if (*fmt != '%') { - display_putc(*fmt++); + printk_putc(*fmt++); continue; } ++fmt; switch (*fmt) { case '%': - display_putc('%'); + printk_putc('%'); break; case 'c': { int c = va_arg(args, int); - display_putc((char)c); + printk_putc((char)c); break; } case 's': { const char *s = va_arg(args, const char *); - if (!s) { - s = "(null)"; - } - display_write(s); + printk_puts(s); break; } case 'd': { long v = va_arg(args, int); if (v < 0) { - display_putc('-'); + printk_putc('-'); print_u64((unsigned long long)(-v), 10); } else { print_u64((unsigned long long)v, 10); @@ -91,12 +104,12 @@ void printk(const char *fmt, ...) { } case 'p': { unsigned long long v = (unsigned long long)va_arg(args, void *); - display_write("0x"); + printk_puts("0x"); print_u64(v, 16); break; } default: - display_putc('?'); + printk_putc('?'); break; } ++fmt;