3.1 KiB
3.1 KiB
Подсистема отладки: концептуальная модель
Два канала вывода
Ядро имеет два параллельных канала для отладки:
-
Экранный (framebuffer console) — через
tty::Console.- Использует PSF2-шрифты.
- Цветной вывод (зелёный/жёлтый/красный для Info/Warn/Error).
- Медленнее, но визуально нагляднее.
-
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) │
└──────────┘ └──────────┘ └──────────┘