feat: docs & ARCH 2.2, 2.3, 2.4
This commit is contained in:
88
kernel/docs/debug/introduction.md
Normal file
88
kernel/docs/debug/introduction.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Подсистема отладки: концептуальная модель
|
||||
|
||||
## Два канала вывода
|
||||
|
||||
Ядро имеет два параллельных канала для отладки:
|
||||
|
||||
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) │
|
||||
└──────────┘ └──────────┘ └──────────┘
|
||||
```
|
||||
Reference in New Issue
Block a user