Курсовий проект
з дисципліни «Системне програмне забезпечення»
Розробка драйвера, що розпізнає USB-пристрій як віртуальний COM-порт в системі Windows NT
Завдання
Розробити драйвер, що розпізнає USB-пристрій як віртуальний COM-порт в системі Windows NT. Драйвер повинен організувати потокове введення-виведення масивів даних (Bulk Data Transfer).
Введення
При вирішенні широкого кола завдань виникає необхідність конфігурувати пристрій відповідно до необхідних завданнями користувача. До категорії цих завдань можна віднести розробку драйверів, що дуже актуально в сучасному світі, де інформація є одним з найважливіших ресурсів.
Одним з компонентів системи може бути драйвер, що виконує протоколювання обміну інформацією між комп'ютером і деяким зовнішнім пристроєм на універсальної послідовної шини USB.
Сучасні операційні системи можуть динамічно завантажувати і вивантажувати драйвера, отримувати їх з мережі (internet), здійснювати взаємодію між драйверами різного рівня, використовуючи їх як своєрідні бібліотеки.
У відповідності із завданням до курсового проекту необхідно розробити фільтр-драйвер на мові C, що забезпечує обмін інформацією між комп'ютером і зовнішнім USB-пристроєм. Забезпечити підтримку віртуального перетворення USB-COM (VUSB) з мікроконтролерами FTDI і сімейства основних мікроконтролерів введення-виведення компанії Atmel (AT8U2 і вище)
Основні вимоги, пропоновані до драйвера:
· Розроблюваний драйвер повинен обробляти запити на читання і запис, що приходять до пристрою;
· Драйвер повинен забезпечувати підтримку закінчення обробки всіх IRP пакетів в стеці перед відключенням пристрою;
· Пакети, які не обробляються фільтр-драйвером повинні передаватися вниз по стеку основним драйверам;
· Драйвер не повинен призводити до збоїв у роботі операційної системи;
· Забезпечити підтримку підключення декількох USB-пристроїв використанням підсистеми PnP.
1. Основна частина
1.1Архітектура Windows NT
windows драйвер код шина
Архітектура Windows NT відповідає класичним уявленням про проектування операційних систем. Найбільш поширені реалізації даної ОС для платформи Intel x86 в одно- або багатопроцесорних конфігураціях, проте існують також версії для DEC Alpha і MIPS. Дана операційна система використовує захищений режим центрального процесора, реалізує механізми віртуальної пам'яті і багатозадачності.
Виконуваний код у Windows NT має два рівні привілеїв: код користувацького режиму і код режиму ядра. Рівень привілеїв накладає певні обмеження: в режимі користувача не можуть виконуватися привілейовані інструкції процесора, що не дозволено звернення до захищених сторінок пам'яті. Ці обмеження накладаються для забезпечення безпеки роботи системи. Користувальницький додаток не повинно мати можливість в результаті помилки або навмисно вносити зміни в критичні таблиці операційної системи або в пам'ять інших додатків. Зокрема, такі обмеження забороняють користувальницькі додатки безпосередньо управляти зовнішніми пристроями, тому що кожне з них є розділяються ресурсом.
У Windows NT забезпечення обміну даними та управління доступом до зовнішнього пристрою як до ресурсу, що покладається на його драйвер. Введення і виведення в драйверах здійснюється за допомогою IRP-пакетів (Input/Output Request Packet). Запити на введення/висновок, що посилаються додатками або іншими драйверами, обробляються драйвером, після чого запитуючої програмою в тому ж пакеті надсилається статус завершення операції. Детальніше про пакети вводу/виводу буде сказано далі, загальний же принцип взаємодії проілюстрований на Рис. 1.
Рис. 1 Архітектура введення/виводу Windows NT
Стосовно до поставленого завдання, з вищевикладеного випливає, що повне протоколювання обміну даними із зовнішнім пристроєм може бути здійснено тільки на рівні драйвера.
Управління зовнішнім пристроєм в загальному випадку зводиться до заповнення його регістрів необхідними даними. Монопольний доступ драйвера до цих регістрів гарантується операційною системою. Очевидно, що за даних обставин потрібно, щоб драйвер пристрою виконувався в режимі ядра.
Узагальнена класифікація драйверів Windows NT може бути представлена ??наступним чином: