89 lines
3.1 KiB
Markdown
89 lines
3.1 KiB
Markdown
# Подсистема отладки: концептуальная модель
|
||
|
||
## Два канала вывода
|
||
|
||
Ядро имеет два параллельных канала для отладки:
|
||
|
||
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 ] <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()
|
||
|
||
```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) │
|
||
└──────────┘ └──────────┘ └──────────┘
|
||
```
|