Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #71, ОКТЯБРЬ 2006 г.

жонглирование ядром

ФЛЕНОВ МИХАИЛ AKA HORRIFIC

Спецвыпуск: Хакер, номер #071, стр. 071-030-4


Нулевой уровень зарезервирован для потока, который работает, когда системе нечего делать. Если верить DDK, то это значение указывать нельзя. Мы не пробовали и не в курсе, какой будет результат, если попытаться :). Уровни с 1 до 15 являются динамическими, потому что по мере необходимости ОС может понижать или повышать эти значения, чтобы драйвер выполнялся как можно быстрее и не блокировал работу системы. Диапазон от 16 до 31 – фиксированные прерывания, и в их уровни ОС не вмешивается. Прерывания от 16 до 31 имеют одно очень важное свойство – их работа не может быть прервана другим процессом, если его приоритет прерывания ниже. В связи с этим, такой код должен быть максимально компактным и выполняться очень быстро, дабы не монополизировать процессор. В диапазоне от 1 до 15 приоритет прерывания может изменяться, поэтому в определенный момент код с большим приоритетом может быть прерван кодом с низшим значением только потому, что ОС решила поиграть с этими приоритетами.

В зависимости от уровня, драйвер может реализовывать еще несколько функций, например, функцию InterruptService. Она обязательна для всех драйверов устройств, которые генерируют прерывания. Специфичных для различных уровней и устройств функций много, и описать их нереально. Прежде чем писать драйвер, обязательно изучи DDK.

[отладка.]

Вообще, отладка драйверов — достаточно сложное и утомительное занятие. Дело в том, что если ты допустишь ошибку в пользовательском приложении, то такую задачу достаточно просто снять, перекомпилировать и запустить по новой. С драйверами такие шутки проходят редко, потому что если в коде допущена ошибка, то велика вероятность увидеть синий/черный экран смерти. После этого компьютер спасет только перезагрузка, вследствие которой найти проблемную строку кода не всегда возможно.

При отладке рекомендую следующее:

1 СОХРАНЯЙ ВСЕ ДО НАЧАЛА ТЕСТИРОВАНИЯ. К ЭТОМУ ПРАВИЛУ ТЫ БЫСТРО ПРИВЫКНЕШЬ ПОСЛЕ ПАРЫ СИСТЕМНЫХ СБОЕВ И ПОТЕРИ НЕСКОЛЬКИХ ЧАСОВ РАБОТЫ.

2 ИСПОЛЬЗУЙ СПЕЦИАЛЬНУЮ ВЕРСИЮ ОКОН С ОТЛАДОЧНОЙ ИНФОРМАЦИЕЙ, КОТОРАЯ ПОМОЖЕТ В ПОИСКЕ ОШИБОК ПОСЛЕ СБОЯ.

3 ТЕСТИРУЙ КАК МОЖНО ЧАЩЕ И КАК МОЖНО БОЛЬШЕ. ПОСЛЕ КАЖДОГО (ПУСТЬ И МАЛЕНЬКОГО) ИЗМЕНЕНИЯ НЕОБХОДИМА ТЩАТЕЛЬНАЯ ПРОВЕРКА РАБОТЫ, ИНАЧЕ ПОТОМ ИСПРАВЛЯТЬ ОШИБКУ БУДЕТ НАМНОГО СЛОЖНЕЕ.

4 ПРЕЖДЕ ЧЕМ ТЕСТИРОВАТЬ, ЕЩЕ РАЗ ПРОСМОТРИ КОД ДРАЙВЕРА.

5 И ЕЩЕ РАЗ ПРОСМОТРИ КОД ДРАЙВЕРА, ЭТО ЛИШНИМ НЕ БЫВАЕТ :).

Лучше всего отлаживать драйвера в виртуальной машине, но это не есть «обязательно». Если драйвер глюкнул, то виртуалка не спасет.

Встроенный в IDE отладчик тут тоже не подойдет. Необходимо что-то более серьезное, например, SoftICE или Kernel Debugger из DDK. Второй вариант не особо удобен, потому что требует наличия двух компьютеров, но если ты используешь виртуальную машину, то все решаемо. SiftICE обладает широкими возможностями, большинство предпочитают именно его. Но ты волен выбирать другой отладчик, главное — чтобы он тебе был удобен и позволял отлаживать драйвера.

Назад на стр. 071-030-3  Содержание  Вперед на стр. 071-030-5