Задать вопрос
KernelBuilder
@KernelBuilder
Увлекаюсь программированием с 12 лет

Почему зависают прерывания клавиатуры (IRQ1) после первого нажатия при переходе на GOP в самописной ОС (x86_64)?

Пишу свою ОС (загрузка через UEFI, переход в Long Mode, вывод графики через GOP). Столкнулся со следующей проблемой при настройке прерываний (IDT).

Симптомы:
При старте экран черный (так и задумано на этом этапе), но клавиатура реагирует на клавишу ESC — код отрабатывает корректно. Однако, если нажать любую другую клавишу, экран переключается в графический режим, но после этого клавиатура полностью перестает реагировать на любые нажатия (включая ESC). Прерывания будто блокируются после первого-второго вызова.

Что я уже проверил:
1. Базовый обработчик IDT вызывается.
2. Стек при выходе из прерывания (iretq) восстанавливается (по крайней мере, явных Triple Fault нет).

Предположение:
Подозреваю, что я либо некорректно отправляю EOI (End of Interrupt) в PIC/APIC, из-за чего контроллер ждет завершения и блокирует линию, либо где-то затираются регистры общего назначения при обработке прерывания.

Ссылка на репозиторий с кодом обработки IDT: https://github.com/larcenkokirill91-max/AnalOS.git

Подскажите, пожалуйста, на что обратить внимание в коде ISR-заглушек и инициализации контроллера прерываний, чтобы ввод не блокировался?
  • Вопрос задан
  • 19 просмотров
Подписаться 1 Сложный Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия DevOps-инженер + ИИ
    5 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы