
- •Введение 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-файла
- •Приложение б Графические материалы
2.1.1 Основные дескрипторы usb драйвера
Устройства USB содержат встроенные структуры данных, которые называются дескрипторами и обеспечивают их самоидентификацию для программного обеспечения хоста. Каждый дескриптор начинается с 2-байтового заголовка, содержащего размер дескриптора в байтах и код типа. За фиксированным заголовком следуют данные, специфические для конкретного типа дескриптора [2.2]. В таблице 2.1 приведено описание некоторых дескрипторов.
Таблица 2.1 – Типы дескрипторов
Тип дескриптора |
Описание |
Дескриптор устройства |
Описывает все устройство |
Дескриптор квалификатора устройства |
Информация о конфигурации устройства для другой скорости работы |
Дескриптор конфигурации |
Описывает одну из возможных конфигураций устройства |
Дескриптор интерфейса |
Описывает один из интерфейсов, входящих в конфигурацию |
Дескриптор конечной точки |
Описывает одну из конечных точек, принадлежащих интерфейсу |
Строковый дескриптор |
Содержит строку в Юникоде, описывающую устройство, конфигурацию, интерфейс или конечную точку |
2.1.1.1 Дескриптор устройства
С каждым устройством связывается один дескриптор устройства, идентифицирующий устройство для хостового программного обеспечения. Дескриптор устройства содержит основную информацию об USB-устройстве в целом и обо всех существующих конфигурациях [2.3]. USB-устройство может иметь только один такой дескриптор. Для получения этого дескриптора хост направляет конечной точке 0 управляющую транзакцию GET_DESCRIPTOR. Дескриптор устройства определяется следующим образом:
typedef struct _USB_DEVICE_DESCRIPTOR
{
UCHAR bLength;
UCHAR bDescriptorType;
USHORT bcdUSB;
UCHAR bDeviceClass;
UCHAR bDeviceSubClass;
UCHAR bDeviceProtocol;
UCHAR bMaxPacketSize;
USHORT idVendor;
USHORT idProduct;
USHORT bcdDevice;
UCHAR iManufacturer;
UCHAR iProduct;
UCHAR iSerialNumber;
UCHAR bNumConfigurations;
} USB_DEVICE_DESCRIPT0R, *PUSB_DEVICE_DESCRIPT0R;
В таблице 2.2 приведено подробное описание полей дескриптора устройства.
Таблица 2.2 – Структура дескриптора устройства
Смещение поля данных |
Наименование поля |
Размер, байт |
Описание |
0 |
bLength |
1 |
Размер дескриптора в байтах |
1 |
bDescriptorType |
1 |
Тип дескриптора (_USB_DEVICE_DESCRIPTOR) |
2 |
bcdUSB |
2 |
Номер версии спецификации USB в формате BCD |
4 |
bDeviceClass |
1 |
Код класса USB |
5 |
bDeviceSubClass |
1 |
Код подкласса USB-устройства |
6 |
bDeviceProtocol |
1 |
Код протокола USB |
7 |
bMaxPacketSize |
1 |
Максимальный размер пакета для нулевой конечной точки |
8 |
idVendor |
2 |
Идентификатор изготовителя |
10 |
idProduct |
2 |
Идентификатор продукта |
12 |
bcdDevice |
2 |
Номер версии устройства в формате BCD |
14 |
iManufacturer |
1 |
Индекс дескриптора строки, описывающей изготовителя |
15 |
iProduct |
1 |
Индекс дескриптора строки, описывающей продукт |
16 |
iSerialNumber |
1 |
Индекс дескриптора строки, содержащей серийный номер USB-устройства |
17 |
bNumConfigurations |
1 |
Количество возможных конфигураций USB-устройства |
Поля стандартного дескриптора конфигурации подчиняются следующим правилам [2.3]:
размер дескриптора (поле bLength) всегда составляет 18 байтов;
код типа дескриптора (поле bDescriptorType) имеет значение 1;
номер версии (поле bcdUSB) представляется в формате BCD и может
принимать следующие значения:
0100h — версия 1.0;
0110h — версия 1.1;
0200h — версия 2.0;
поле кода класса (поле bDeviceClass) может принимать следующие значения:
значение 00h обозначает, что интерфейсы функционируют независимо друг от друга, и каждый из них имеет собственный код класса;
значение между 1 и FEh обозначает, что устройство поддерживает различные спецификации для интерфейсов, и интерфейсы не могут функционировать независимо;
значение FFh обозначает, что класс устройства определяется изготовителем;
код подкласса (поле bDeviceSubClass) имеет значение 0x0;
код протокола (поле bDeviceProtocol) имеет значение 0x0;
максимальный размер пакета для нулевой конечной точки (поле bMaxPacketSize) составляет 64 байта (хотя в общем случае могут использоваться значения 8, 16, 32 и 64);
число возможных конфигураций (поле bNumConfiguration) описывает число конфигураций только для текущей скорости работы, но не для обеих скоростей.
Идентификатор изготовителя устройства, идентификатор продукта и номер версии используются для подбора драйвера. Индексы дескрипторов строк используются для получения информации об устройстве в текстовом формате.