# Подсистема отладки: концептуальная модель ## Два канала вывода Ядро имеет два параллельных канала для отладки: 1. **Экранный (framebuffer console)** — через `tty::Console`. - Использует PSF2-шрифты. - Цветной вывод (зелёный/жёлтый/красный для Info/Warn/Error). - Медленнее, но визуально нагляднее. 2. **Serial port (COM1)** — через `debug::serial`. - Текстовый вывод с ANSI escape codes. - Работает через QEMU/KVM serial console. - Быстрее, может быть перенаправлен в файл. ## LogLevel — уровни логирования ```rust pub enum LogLevel { Info, // Зелёный на экране, зелёный в serial Warn, // Жёлтый Error, // Красный } ``` Каждый уровень имеет: - `serial_color_code()` — ANSI escape code для serial. - `console_color()` — RGB значение для framebuffer. ## Макросы ```rust // Основной макрос log!(console, level, module, format_args...) // Специализированные info!(console, module, format_args...) warn!(console, module, format_args...) error!(console, module, format_args...) ``` **Формат вывода на экран:** ``` [ LOG ] | ``` **Формат в serial:** ``` GREEN[ LOG] RESET | ``` ## Цветовое кодирование | Уровень | Экран (RGB) | Serial (ANSI) | |---------|-------------|---------------| | Info | 0x00FF00 | `\x1b[32m` (green) | | Warn | 0xFFFF00 | `\x1b[33m` (yellow) | | Error | 0xFF0000 | `\x1b[31m` (red) | | Текст | 0xFFFFFF (white) | `\x1b[0m` (reset) | ## Использование в kmain() ```rust // После инициализации 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) │ └──────────┘ └──────────┘ └──────────┘ ```