- •Введение 5
- •1 Исследовательский раздел
- •1.1 Анализ существующих аналогичных систем
- •1.1.1 Обзор архитектуры устройств usb
- •1.2 Обоснование выбора программно-аппаратных средств
- •1.3 Постановка задачи
- •1.4 Развернутое техническое задание
- •1.4.1 Общие сведения
- •2.1.1 Основные дескрипторы usb драйвера
- •2.1.1.1 Дескриптор устройства
- •2.1.1.2 Дескриптор расширения устройства
- •2.1.1.3 Дескриптор конфигурации
- •2.1.1.4 Дескриптор интерфейса
- •2.1.1.5 Дескриптор конечной точки
- •2.2 Разработка функциональной схемы драйвера
- •2.2.1 Драйвер в иерархии wdm
- •2.2.2 Уровни обмена данными usb устройств
- •2.2.3 Архитектура системного драйвера usb
- •2.2.4 Основные рабочие процедуры драйвера
- •2.2.5 Управление перемещаемостью кода в драйвере
- •2.3 Разработка алгоритмического обеспечения
- •2.3.1 Инициализация драйвера
- •2.3.3 Обработка расширенных запросов ioctl
- •2.3.4 Поддержка запросов Plug and Play
- •2.3.5 Управление питанием
- •2.3.5.1 Обработка запросов irp_mj_power
- •2.3.6 Процедура деинициализации драйвера
- •2.4 Разработка программного обеспечения
- •2.4.1 Процедура DriverEntry
- •2.4.2 Процедура DriverUnload
- •2.4.3 Процедура AddDevice
- •2.4.4 Процедура передачи запроса usbd
- •2.4.5 Обработчики usbCreate и usbClose
- •2.4.6 Обработчик ConfigureDevice
- •2.4.7 Обработчики запросов на чтение и запись
- •3 Технологический раздел
- •3.1 Технология разработки драйверов для операционных систем семейства Windows
- •3.1.1 Архитектура Windows Driver Model
- •3.1.2 Выбор типа разрабатываемого драйвера
- •3.1.3 Разработка usb драйвера
- •3.2 Технология отладки драйверов в операционных системах семейства Windows
- •3.2.1 Основные отладочные тесты
- •3.2.2 Основные «проблемы», возникающие при отладке драйвера
- •3.2.2.1 Аппаратные проблемы
- •3.2.2.2 Программные проблемы
- •3.2.3 Основные отладчики и утилиты для проверки драйвера
- •3.2.3.1 Отладчик WinDbg
- •3.2.3.2 Driver Verifier
- •3.2.4 Общие приемы отладки драйвера
- •3.2.4.1 Установка фиксированных точек прерывания
- •3.2.4.2 Промежуточный вывод на экран
- •3.2.4.3 Сохранение отладочного кода в исходном тексте драйвера
- •3.2.4.4 Перехват некорректных условий
- •3.2.4.5 Обнаружение утечек памяти
- •3.2.5 Замечания по отладке драйверов
- •4 Безопасность жизнедеятельности
- •4.1 Анализ эргономических параметров рабочего места пользователя пэвм
- •4.1.1 Общие эргономические аспекты рабочего места
- •4.2 Организация рабочего места пользователя с учётом эргономических требований
- •4.2.1 Организация рабочего стола
- •4.2.2 Рабочее кресло
- •4.2.3 Работа с клавиатурой и мышью
- •4.2.4 Расположение и эргономические характеристики монитора
- •4.2.5 Внутренний объем
- •4.2.6 Рабочая поза пользователя пэвм
- •4.3 Экологическая оценка и переработка узлов компьютерной техники содержащих платину
- •4.3.1 Извлечение платины из отработанных катализаторов
- •4.3.2 Извлечение платины из радиооборудования и сплавов для электрических контактов
- •5 Экономический раздел
- •5.1 Планирование разработки драйвера с построением графика выполнения работ
- •5.1.1 Определение этапов и работ по созданию программного продукта
- •5.1.2 Расчет трудоемкости и продолжительности работ
- •5.1.3 Построение графика выполнения работ
- •5.2 Расчет затрат на разработку
- •5.3 Оценка экономической эффективности проекта
- •1 К исследовательскому разделу
- •2 К специальному разделу
- •3 К технологическому разделу
- •4 К разделу «Безопасность Жизнедеятельности»
- •5 К экономическому разделу
- •Приложение а Установка драйвера с помощью inf-файла
- •Приложение б Графические материалы
3.2.1 Основные отладочные тесты
В общем случае, тесты для драйвера можно разделить на следующие категории [3.4]:
Тесты на нормальную реакцию должны подтверждать полноту и точность функций драйвера. Правильно ли откликается драйвер на команды, как это от него ожидается?
Тесты на ошибочные воздействия должны удостовериться, правильно ли реагирует драйвер на воздействия, которые, вообще говоря, не должны к нему применяться. «Ошибочное» воздействие может также состоять в неверном наборе данных, поступившем в пользовательском запросе.
Тесты граничных условий испытывают анонсированные пределы функционирования драйвера и устройства. Не исключено, что в силу работы драйвера в системе конечные предельные параметры окажутся хуже прогнозируемых.
Тесты на предельную нагрузку проверяют драйвер и устройство при высоких уровнях активности.
Тесты на функционирование в условиях ограниченности ресурсов, то есть работа при ограниченной доступности центрального процессора, ограниченность объемов доступной оперативной памяти.
Фирма Microsoft предлагает тесты на аппаратурную совместимость (НСТ, Hardware Compatibility Tests), которые являются официальными тестами для аппаратуры по поводу возможности ее работы под Windows 2000/ХР/Vista/7. Набор включает следующие тесты [3.5]:
Общие системные тесты, которые экзаменуют центральный процессор, последовательные и параллельные порты материнской платы, клавиатуру и средства поддержки слоя аппаратный абстракций HAL.
Тесты по проверке специфических типов аппаратного обеспечения, а именно — видеоадаптеров, мультимедийных устройств, сетевых интерфейсов, накопителей на магнитной ленте, SCSI устройств и т.п.
Общие тесты по тестированию работы системы под действием высоких нагрузок на системные ресурсы и устройства ввода/вывода.
Тестирование проходит под управлением тест-менеджера с графическим интерфейсом, который автоматизирует прохождение тестов и сбор результатов. Даже если класс аппаратуры, для которой разрабатывается драйвер, не прошел серию испытаний НСТ, то все равно этот набор тестов может послужить средством для выяснения того, как будет работать новый драйвер в условиях повышенной нагрузки на систему.
3.2.2 Основные «проблемы», возникающие при отладке драйвера
Если тестирование сигнализирует о наличии ошибок, то более сложной проблемой является локализация их источника. Разумеется, драйверы могут отказываться работать многими интересными способами. Я не буду приводить обширный список причин сбоев, но перечислить некоторые общие типы драйверных патологий все-таки имеет смысл.
3.2.2.1 Аппаратные проблемы
Априори, аппаратура есть источник проблем. Сильнее всех в этом убежден разработчик программного обеспечения. Вероятность того, что это действительно так, тем выше, чем новее аппаратура. Симптомами аппаратных проблем являются [3.5]:
ошибки при передаче данных;
коды состояния устройства сигнализируют об ошибке;
устройство не реагирует должным образом на команды;
сигналы прерывания не поступают, либо они ложные.
Причина упомянутых отклонений может быть и просто в недостаточной документированности поведения устройства. Разработчик аппаратуры после некоторых размышлений изменил конструкцию, но не исправил документацию и не сообщил об изменениях разработчику драйвера, возможно, посчитав их незначительными. Могут существовать малоизвестные или неисследованные ограничения на порядок следования команд — как в смысле последовательности, так и в смысле их временных диаграмм. Аппаратные прошивки (программы, загружаемые в обслуживаемые драйвером устройства) также могут содержать ошибки. Могут возникать сбои в шинных протоколах, причем из-за непериодических сбоев других устройств, подключенных к данной шине.