Files
Elyz/kernel/docs/debug/introduction.md
2026-07-07 16:40:41 +03:00

3.1 KiB
Raw Permalink Blame History

Подсистема отладки: концептуальная модель

Два канала вывода

Ядро имеет два параллельных канала для отладки:

  1. Экранный (framebuffer console) — через tty::Console.

    • Использует PSF2-шрифты.
    • Цветной вывод (зелёный/жёлтый/красный для Info/Warn/Error).
    • Медленнее, но визуально нагляднее.
  2. Serial port (COM1) — через debug::serial.

    • Текстовый вывод с ANSI escape codes.
    • Работает через QEMU/KVM serial console.
    • Быстрее, может быть перенаправлен в файл.

LogLevel — уровни логирования

pub enum LogLevel {
    Info,   // Зелёный на экране, зелёный в serial
    Warn,   // Жёлтый
    Error,  // Красный
}

Каждый уровень имеет:

  • serial_color_code() — ANSI escape code для serial.
  • console_color() — RGB значение для framebuffer.

Макросы

// Основной макрос
log!(console, level, module, format_args...)

// Специализированные
info!(console, module, format_args...)
warn!(console, module, format_args...)
error!(console, module, format_args...)

Формат вывода на экран:

[ LOG ] <module> | <message>

Формат в serial:

GREEN[  LOG] RESET <module> | <message>

Цветовое кодирование

Уровень Экран (RGB) Serial (ANSI)
Info 0x00FF00 \x1b[32m (green)
Warn 0xFFFF00 \x1b[33m (yellow)
Error 0xFF0000 \x1b[31m (red)
Текст 0xFFFFFF (white) \x1b[0m (reset)

Использование в kmain()

// После инициализации serial
debug::serial::init_global();

// После инициализации console
info!(console, "BOOT", "LIS4 Kernel Starting...");
info!(console, "MEM", "BitmapPMM initialized.");
info!(console, "LAPIC", "Local APIC initialized.");

Архитектура

┌──────────────┐     ┌───────────────────┐
│  kmain()     │────►│  log!() macro     │
└──────────────┘     └────────┬──────────┘
                              │
               ┌──────────────┼──────────────┐
               ▼              ▼              ▼
        ┌──────────┐   ┌──────────┐   ┌──────────┐
        │ Экран    │   │ Serial   │   │ Паника   │
        │ Console  │   │ COM1     │   │ Handler  │
        │ (tty.rs) │   │(serial.rs)│  │(main.rs) │
        └──────────┘   └──────────┘   └──────────┘