- •Введение 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-файла
- •Приложение б Графические материалы
1 Исследовательский раздел
1.1 Анализ существующих аналогичных систем
Хотелось бы сделать небольшое вступление к данному разделу, а также несколько важных замечаний. Дело в том, что драйвер является довольно специфичным программным продуктом и по своей значимости может немногим уступать даже исходному коду операционной системы. Компании, выпускающие те или иные устройства, а также компании, которые специализируются на разработке драйверов, держат исходные коды разработанных драйверов и спецификации устройств в секрете и не афишируют их. Тем не менее, между драйверами, предназначенными для одного класса устройств, например устройств, подключаемых по универсальной последовательной шине USB, можно провести некоторые аналогии, хоть и весьма поверхностные. И все же я хочу, чтобы читатель понимал, что хоть устройства и подключаются к ПК через единый интерфейс, технологически между ними может существовать целая пропасть, вследствие которой функционирование и поведение драйверов может в корне отличаться.
1.1.1 Обзор архитектуры устройств usb
C учетом выше изложенного, вместо рассмотрения драйверов для конкретных USB устройств мы рассмотрим общие особенности USB в целом. Нужно отметить, что настоящая спецификация USB достаточно объёмна и сложна, поэтому мы будем рассматривать лишь аспекты, которые необходимы для данного раздела.
Шина USB (Universal Serial Bus, универсальная последовательная шина) появилась в начале 1996 года как попытка решения проблемы множественности интерфейсов. Действительно устройства можно подключать самые разнообразные, данные передаются последовательно, а вот физическое подключение на шину не похоже. Шина это совокупность параллельных проводников, к которым подсоединяются несколько устройств, например ISA или PCI [1.1].
Обычная архитектура USВ подразумевает подключение одного или нескольких USB-устройств к компьютеру, который в такой конфигурации является главным управляющим устройством и называется хостом. Подключение USB-устройств к хосту производится с помощью кабелей. Для соединения компьютера и USB-устройства используется хаб (рис. 1.1). Компьютер имеет встроенный хаб, называемый корневым хабом.
Рисунок 1.1 − Подключение USB-устройств к хабу
Физическая архитектура USB определяется следующими правилами [1.2]:
устройства подключаются к хосту;
физическое соединение устройств между собой осуществляется по топологии многоярусной звезды, вершиной которой является корневой хаб;
центром каждой звезды является хаб.
Рисунок 1.2 − Физическая архитектура USB
Детали физической архитектуры скрыты от прикладных программ в системном программном обеспечении (ПО), поэтому логическая архитектура выглядит как обычная звезда (рис. 1.3), центром которой является прикладное ПО, а вершинами — набор конечных точек.
Спецификация USВ достаточно жестко определяет набор свойств, которые должно поддерживать любое USB-устройство [1.3]:
адресация — устройство должно отзываться на назначенный ему уникальный адрес и только на него;
конфигурирование — после включения или сброса устройство должно предоставлять нулевой адрес для возможности конфигурирования его портов;
передача данных — устройство имеет набор конечных точек для обмена данными с хостом. Для конечных точек, допускающих разные типы передач, после конфигурирования доступен только один из них;
управление энергопотреблением — любое устройство при подключении не должно потреблять от шины ток, превышающий 100 мА. При конфигурировании устройство заявляет свои потребности тока, но не более 500 мА. Если хаб не может обеспечить устройству заявленный ток, устройство не будет использоваться;
приостановка — USB-устройство должно поддерживать приостановку (suspended mode), при которой его потребляемый ток не превышает 500 мкА. USB-устройство должно автоматически приостанавливаться при прекращении активности шины;
удаленное пробуждение — возможность удаленного пробуждения (remote wakeup) позволяет приостановленному USB-устройству подать сигнал хосту, который тоже может находиться в приостановленном состоянии. Возможность удаленного пробуждения описывается в конфигурации USB-устройства. При конфигурировании эта функция может быть запрещена.
Разработчики шины ориентировались на создание интерфейса, обладающего следующими свойствами [1.3]:
легкореализуемое расширение периферии ПК;
дешевое решение, позволяющее передавать данные со скоростью до 12 Мбит/с (480 Мбит/с для USB 2.0);
полная поддержка в реальном времени голосовых, аудио- и видеопотоков;
гибкость протокола смешанной передачи изохронных данных и асинхронных сообщений;
интеграция с выпускаемыми устройствами;
охват всевозможных конфигураций и конструкций ПК;
обеспечение стандартного интерфейса, способного быстро завоевать рынок;
создание новых классов устройств, расширяющих ПК.
Спецификация USB определяет следующие функциональные возможности интерфейса [1.3]:
простота использования для конечного пользователя;
широкие возможности работы;
равномерная пропускная способность;
гибкость и надежность;
выгода для разработчиков;
дешевая реализация.