Kintsugi OS 0.5.0
x86 Monolithic OS
Loading...
Searching...
No Matches
Shell и диагностика

Структура

  • drivers/keyboard.c: scan code set 1 и очередь на 127 событий; IRQ не печатает и не выполняет команды. Переполнение отбрасывает новое событие.
  • shell/line_editor.c: строка до 255 байт, курсор, история на 16 строк.
  • shell/completion.c: дополнение команд из реестра и имён из корня FAT12.
  • shell/shell.c: разбор строки, реестр, выполнение и код завершения.
  • shell/commands_{system,fs,diag,misc}.c: обработчики и метаданные команд.
  • drivers/terminal.c: вывод и прокрутка, без разбора команд.

Добавление команды: обработчик int run(int argc, char** argv) и запись в массиве модуля: имя, категория, синтаксис, описание, обработчик. Справка и дополнение используют тот же реестр. Массив завершается { 0 }.

Коды: SHELL_OK=0, SHELL_ERROR=1, SHELL_USAGE=2, SHELL_NOT_FOUND=127. status показывает предыдущий код, сама завершается успешно. Пустая строка сохраняет код. Ошибки разбора не выполняют команду.

Ввод и ограничения

Одинарные кавычки сохраняют текст буквально. Двойные кавычки объединяют текст, обратная косая черта экранирует следующий символ вне одинарных кавычек. Соседние фрагменты объединяются: ab" cd" — один аргумент. Пустые кавычки создают пустой аргумент. Максимум — 32 аргумента, включая имя команды. Нет переменных, подстановок, перенаправлений и конвейеров.

Tab дополняет простой токен до общего префикса. Для аргументов используются файлы корня, допустим ведущий /. Вложенные пути и дополнение в кавычках или с экранированием пока не поддерживаются. Имена FAT12 — короткие 8.3. Ctrl+C отменяет редактируемую строку, но не прерывает выполняющуюся команду.

malloc возвращает ID и адрес диагностического блока; free принимает ID, а не произвольный адрес. load больше не пишет по произвольному адресу: его буфер принадлежит команде и заменяется следующим успешным load.

Логи и panic

COM1: 115200, 8N1, ограниченное ожидание передатчика. make run QEMU_FLAGS="-serial file:serial.log" сохраняет сообщения загрузки.

panic(message, registers) отключает IRQ, печатает в COM1 и напрямую в VGA, затем останавливает CPU навсегда. Исключения добавляют вектор, код ошибки, EIP/CS/EFLAGS, CR2 и общие регистры. Assertions и старые panic-обёртки направлены в этот же обработчик. Стек вызовов пока не разворачивается.

Для проверки: panic confirm — явный panic; fault confirm — настоящий UD2 с сохранением регистров исключения. Обе команды намеренно останавливают ОС.

make test проверяет эти случаи в отдельных QEMU, а также редактирование, историю, дополнение, кавычки, статусы и сохранение файлов после reset.