- •Введение 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.2 Разработка функциональной схемы драйвера
2.2.1 Драйвер в иерархии wdm
Архитектура семейств операционных систем Windows на ядре NT имеет модульную структуру и состоит из двух основных уровней: компоненты, работающие в режиме пользователя, и компоненты режима ядра (рис. 2.1) [2.2].
Рисунок 2.1 - Обобщённая архитектура Windows NT
Программы и подсистемы, работающие в режиме пользователя (user-mode), имеют ограничения на доступ к системным ресурсам. Часть функций операционной системы вынесены в режим пользователя. Для выполнения этих функций запускается часть процессов, например, сервер, реализующий технологию удалённого вызова процедур (Service Control Manager, SCM).
Системы предлагают набор сервисов – приложения Win32. В режиме пользователя работают подсистема защиты, подсистема Win32-архитектуры (обеспечивает стандартные API вызовы − Application Programming Interface -интерфейс прикладного программирования), подсистема POSIX (Portable Operating System Interface for Unix - переносимый интерфейс операционных систем Unix), которая обеспечивает совместимость операционных систем и переносимость прикладных программ на уровне исходного кода.
Любой системный вызов связан с вызовом функции из библиотеки Ntdll.dll, которой соответствует библиотека kernelNtdll.dll, включающая функции, переводящие в режим ядра.
Режим ядра (kernel-mode) имеет другой уровень привилегий – неограниченный доступ к системной памяти и внешним устройствам. Архитектура включает в себя само ядро, уровень аппаратных абстракций (Hardware Abstraction Layer, HAL), драйверы и ряд служб.
Исполнительная система является частью операционной системы, содержащая основные, базовые сервисы операционной системы, обеспечивающие управление вводом-выводом, памятью, взаимодействием между процессами и другие [2.2].
2.2.2 Уровни обмена данными usb устройств
Спецификация USB определяет три логических уровня с определенными правилами взаимодействия. USB-устройство содержит интерфейсную, логическую и функциональную части. Хост тоже делится на три части — интерфейсную, системную и ПО. Каждая часть отвечает только за определенный круг задач. Логическое и реальное взаимодействие между ними показано на рисунке 2.2 [2.2]:
Рисунок 2.2 – Схема многоуровневой коммуникационной модели USB
Таким образом, операция обмена данными между прикладной программой и шиной USB выполняется путем передачи буферов памяти через следующие уровни [2.3]:
уровень клиентского ПО в хосте:
обычно представляется драйвером USB-устройства;
обеспечивает взаимодействие пользователя с операционной системой с одной стороны и системным драйвером с другой;
уровень системного драйвера USB в хосте (USBD, Universal Serial Bus Driver):
управляет нумерацией устройств на шине;
управляет распределением пропускной способности шины и мощности питания;
обрабатывает запросы пользовательских драйверов;
уровень хост-контроллера интерфейса шины USB (HCD, Host Controller Driver):
преобразует запросы ввода/вывода в структуры данных, по которым выполняются физические транзакции;
работает с регистрами хоста.
Рассмотрим каждый уровень более подробно.
На уровне клиентского программного обеспечения определяется тип передачи данных, необходимый для выполнения затребованной прикладной программой операции. После определения типа передачи данных на системный уровень передается следующее [2.3]:
буфер памяти, называемый клиентским буфером;
пакет запроса на ввод/вывод (IRP, Input/output Request Packet), указывающий тип необходимой операции.
IRP содержит только сведения о запросе (адрес и длина буфера в оперативной памяти). Непосредственно обработкой запроса занимается системный драйвер USB.
Уровень системного драйвера USB необходим для управления ресурсами USB. Он отвечает за выполнение следующих действий [2.3]:
распределение полосы пропускания шины USB;
назначение логических адресов каждому физическому USB-устройству;
планирование транзакций.
Уровень хост-контроллера интерфейса шины USB получает отдельные транзакции от драйвера контроллера хоста и преобразует их в соответствующую последовательность операций шины. В результате этого USB-пакеты передаются вдоль всей физической иерархии хабов до периферийного USB- устройства.
Нижний уровень периферийного USB-устройства называемся уровнем интерфейса шины USB. Он взаимодействует с интерфейсным уровнем шины USB на стороне хоста и передает пакеты данных от хоста в формате, определяемом спецификацией USB. Затем он передает пакеты вверх — уровню логического USB-устройства.
Средний уровень периферийного USB-устройства называется уровнем логического USB-устройства. Каждое логическое USB-устройство представляется набором своих конечных точек, с которыми может взаимодействовать системный уровень хоста. Эти точки являются источниками и приемниками всех коммуникационных потоков между хостом и периферийными USB- устройствами.
Самый верхний уровень периферийного USB-устройства называется функциональным уровнем. Этот уровень соответствует уровню клиентского обеспечения хоста. С точки зрения клиентского уровня, нижележащие уровни нужны для организации между ним и конечными точками прямых каналов данных, которые идут вплоть до функционального уровня периферийного USB-устройства.