Дипломная работа

«Разработка драйвера графического планшета для системы Linux»

  • 40 страниц
Содержание

ВВЕДЕНИЕ 6

ГЛАВА 1. СТРУКТУРА LINUX, ПРИНЦИП РАБОТЫ ДРАВЕРОВ. СРЕДСТВА ПРОЕКТИРОВАНИЯ. 7

1.1 Операционная система Linux 7

1.3 Принцип работы драйверов 9

1.4 Работа драйверов под Linux 11

1.5 Выбор средств проектирования и разработки 15

ГЛАВА 2. ПРОЕКТИРОВАНИЕ И РАЗРАБОТКА 19

2.1 Техническое задание 19

2.2 Проектирование системы поддержки периферийных устройств 19

Вывод 21

ГЛАВА 3. РАЗРАБОТКА ДРАЙВЕРА 22

Затраты на проект 27

Вывод 28

ЗАКЛЮЧЕНИЕ 29

Список используемой литературы 30

Приложение №1. Модель IDEF0 32

Введение

Актуальность

Многие организации и простые пользователи постепенно переводят свое компьютерное оборудование на систему Linux. Такой выбор основывается на более стабильной работе и доступности, так как Linux открытая система, распространяющаяся бесплатно.

В результате перехода на систему Linux необходимо обеспечить поддержку специального оборудования. Поэтому необходимо разработать драйвер устройства.

Следовательно, до полного перехода на системы Linux нужно предварительно отладить систему поддержки периферийных устройств.

Целью исследования является разработка драйвера для системы Linux, который будет обеспечивать работу графического планшета.

Объектом исследования является разработка драйвера для системы Linux.

Предметом исследования является разработка драйвера графического планшета под систему Linux.

В ходе выполнения поставленной цели необходимо решить следующие задачи:

• Составить техническое задание драйвера

• Спроектировать систему

• Разработать модули программы и оценить работу в целом

Практическая ценность состоит в том что программа будет поддерживать работу графического планшета в системе Linux.

Фрагмент работы

ГЛАВА 1. СТРУКТУРА LINUX, ПРИНЦИП РАБОТЫ ДРАВЕРОВ. СРЕДСТВА ПРОЕКТИРОВАНИЯ.

1.1 Операционная система Linux

Рассматривая структуру системы Linux, ее можно условно разделить на два уровня, как показано на рисунке 1.

Рисунок 1. архитектура операционной системы GNU/Linux

На верхнем уровне находится пользовательское пространство (пространство приложений). Здесь исполняются приложения пользователя. Под пользовательским пространством располагается пространство ядра. Здесь функционирует ядро Linux.

Существует также библиотека GNU C (glibc). Он предоставляет интерфейс системных вызовов, который подключается к ядру и обеспечивает механизм перемещения из приложения пользовательского пространства в ядро. Это важно, поскольку ядро и пользовательское приложение занимают разные защищенные адресные пространства. И хотя каждый процесс пользовательского пространства занимает свое собственное виртуальное адресное пространство, ядро занимает одно адресное пространство.

Ядро Linux, в свою очередь, можно разделить на три больших уровня. В верхней части находится интерфейс системного вызова, который реализует основные функции, такие как чтение и запись. Ниже интерфейса системного вызова находится код ядра, который является независимым от архитектуры кодом ядра. Этот код является общим для всех процессорных архитектур, поддерживаемых Linux. Еще ниже находится архитектурно-зависимый код, который формирует так называемый BSP (Board Support Package - пакет поддержки аппаратной платформы). Этот код зависит от процессора и платформы для конкретной архитектуры.

1.2 Свойства ядра Linux

Ядро Linux реализует ряд важных архитектурных элементов. В целом, и на более детальных уровнях, ядро можно разделить на множество различных подсистем. С другой стороны, Linux можно рассматривать как монолитное целое, так как все основные сервисы собраны в основной системе. Это отличается от архитектуры микроядра, где ядро предоставляет базовые услуги, такие как связь. ввод / вывод, управление памятью и процессами, а также более конкретные услуги реализованы в виде модулей, которые подключены к уровню микроядерных.

Со временем ядро Linux стало более эффективным с точки зрения использования памяти и процессора и стало чрезвычайно стабильным. Однако наиболее интересным аспектом Linux, учитывая размер и сложность этой системы, является ее переносимость. Linux может быть скомпилирован для огромного количества различных процессоров и платформ с различными архитектурными ограничениями и потребностями. Например, Linux может работать на процессоре с или без блока управления памятью (MMU). Поддержка процессоров без MMU реализована в версии ядра uClinux.

1.3 Принцип работы драйверов

Для современного человека компьютер не является чем-то неизвестным. Многие используют компьютер повседневно для различных задач, но не многие знают и разбираются во внутренней работе компьютера в его структуре. Для функционирования компьютера не достаточно собрать все комплектующие воедино, поставить лишь операционную систему, и он заработает. Чтобы компьютер функционировал, имел полный функционал и мог взаимодействовать со всеми устройствами необходимо также установить драйверы.

Драйверы служат связующим звеном между операционной системой и компьютерными комплектующими. На каждый отдельный элемент системного блока и периферийных устройств требуются отдельные драйвера. Стоит отметить, что после установки операционной системы (чистой) ваш компьютер будет функционировать, но вы не сможете воспользоваться всеми возможностями вашего «железа».

В состав драйвера входит несколько функций, которые интегрируют свою работу вместе с операционной системой. Например:

- загрузка драйвера, в процессе которой он регистрируется в системе;

- выгрузка драйвера, во время которой он освобождает захваченные ресурсы компьютера;

- открытие драйвера, во время которого нужный драйвер открывается используемой программой;

- чтение;

- запись;

- закрытие (полная противоположность операции открытия);

- управление операциями ввода-вывода информации.

Обычно устройство связано с компьютером с помощью драйвера, который общается с ним через шину к которой подключено непосредственное устройство. Когда программа вызывает процедуру (очередность операций) драйвера – он направляет команды на само устройство. При общении система посылает необходимые сигналы через драйвер к устройству и после выполнения процедуры устройство отсылает обратный сигнал также через драйвер в операционную систему.

Драйверы очень зависят от устройств, для которых они предназначены, и очень специфичны, так как каждое устройство имеет свою функциональность. Кроме того, любой драйвер специфичен для каждой операционной системы из-за того, что разные системы имеют свою собственную архитектуру. Обычно драйверы предоставляют схему прерывания для обработки асинхронных процедур в зависимости от времени интерфейс.

Он служит "переводчиком" между техническим интерфейсом и приложениями или операционными системами, которые их используют. Разработчики могут писать, с помощью драйверов, высокоуровневые приложения и программы не вдаваясь в подробности низкоуровневого функционала каждого из необходимых устройств в отдельности.

Как уже упоминалось, драйвер специфичен для каждого устройства. Он "понимает" все операции, которые может выполнять устройство, а также протокол, по которому происходит взаимодействие между программным обеспечением и железной частью. И, конечно же, она управляется операционной системой, которая выполняет конкретное приложение или отдельную функцию самой ОС ("печать с помощью принтера").

Если вы хотите отформатировать жесткий диск, то, упрощенно, этот процесс выглядит следующим образом и имеет определенную последовательность: (1) Сначала ОС отправляет команду в драйвер устройства используя команду как водитель, и операционная система понимает. (2) драйвер устройства преобразует команду в формат, понятный только устройству. (3) жесткий диск форматирует себя, возвращает результат драйверу, который затем переводит команду на "язык" операционной системы и выдает результат пользователю (4).Также можно упомянуть, что имеется ещё один вид драйверов - виртуальные драйверы. Подобные драйверы эмулируют работы определённого устройства на компьютере. Такие драйверы используются разработчиками в особых случаях, с которыми вряд ли столкнется обычный пользователь ПК.

1.4 Работа драйверов под Linux

Драйвер – это программа (программный код), который связывает аппаратную составляющую и операционную систему [].

Подобный подход эффективен, так как нет необходимости нагромождать операционную систему прописывая все инструкции работы с миллионами устройств. Система будет общаться с драйвером по определенным правилам, а уже драйвер будет связывать с системой оборудование, для которого был написан.

При этом в Линуксе изначально находятся все драйвера, за редким исключением, большинство из них имеют обобщенную схему работы для всех подобных устройств, обеспечивая меньший вес системы. Это приводит к тому что в системе будут работать все устройства, но не обеспечивая весь их функционал.

Устройствами в системе занимается ядро, все драйвера после проверки вносятся в отведенный модуль ядра. Поэтому чем новее ядро тем больше шанс что все ваши устройства запустятся.

Обновлением и установкой обеспечения в системе Linux занимается менеджер драйверов, пользователю лишь необходимо ввести несколько команд. Если пытаться поставить драйвер вручную можно повредить ядро.

Linux начинал свой путь как серверная ОС и был очень амбициозным проектом. Когда система делала свои первые шаги в качестве десктопной ОС многие уже не верили в ее успех, поэтому производители устройств не уделяли должного внимания. В основном обеспечение писали энтузиасты, а уже разработчики добавляли все это в систему.

В каждой операционной системе имеется ядро, имеющее свои правила, которыми должна руководствоваться программа, чтобы работать в этой операционной системе. Обычно название этих правил API или ABI.

Разница в архитектуре операционных систем и, следовательно, во внутреннем устройстве драйверов настолько велика, что даже имея доступ к исходным текстам, перенести драйвера скажем из Windows в Linux занимает очень много времени и сил, намного эффективнее создать с нуля.

В Linux, как упоминалось выше, принято использовать репозитории и редко прибегать к сторонним источникам. Учитывая популярность системы Windows с начала массового распространения компьютеров, программное обеспечение для нее сразу же разрабатывается производителем оборудования. Другими словами, для правильной работы всего оборудования драйвер необходимо искать на веб-сайтах производителей. Такая схема позволяет работать всем функциям оборудования в полном объеме, но замедляет и затрудняет настройку компьютера.

Большинство программ Linux в форме tar.gz,.оборот в минуту. ,deb файлы, которые по сути являются архивами и содержат необходимые библиотеки и программы.

Репозиторий представляет собой специальное серверное хранилище этих файлов. Их также можно назвать "источниками приложений". Компьютеры пользователей подключаются к хранилищам по сети или через Интернет и используют специальные утилиты (например, Synaptic) для просмотра установленных пакетов, доступных для установки. Большинство утилит поддерживают простой поиск по ключевым словам и могут классифицировать группы пакетов.

Эта внешняя система хранения обеспечивает простой централизованный способ установки или удаления программ и удобный способ загрузки обновлений.

Изначально Linux уже подключил необходимые репозитории, но никто не запрещает использовать другие, сторонние. Основная часть программного обеспечения для Linux в репозиториях. Также необходимые программы в виде архива можно скачать из интернета или собрать из исходных файлов вручную, но это будет довольно сложно и есть риск того, что собранная таким образом программа будет просто нерабочей.

Программное обеспечение под систему Linux в основном разрабатывается на языках С и С++ так как само ядро ОС построено в основном на Си с некоторыми расширениями GCC и на ассемблере.

Исходные файлы программ, которые являются стандартными текстовыми файлами, и вы можете создавать их с помощью любого текстового редактора (например, GEdit KWrite, Kate, vi и emacs). Помимо текстовых редакторов, существуют специализированные среды разработки с собственным встроенным редактором. Одним из таких инструментов является KDevelop.

Рассмотрим структуру драйвера Linux на примере USB-устройства. Простой интерфейс скрывает все алгоритмы для отправки запросов, отслеживания подтверждений, контроля ошибок и др. В ядре программные файлы расположены в drivers / usb/, а заголовочные файлы - в include/linux/. Информация, представленная в этих каталогах, достаточна для записи драйвера для любого USB-устройства.

Драйверы, работающие с USB-устройством, обычно выполняют следующие действия:

1. Регистрация (выгрузка) водителя

2. реестр (удалить) устройство

3. обмен данными (менеджер и информация).

USB-устройства всегда отвечают на запросы хост-компьютера - они не могут отправлять информацию самостоятельно. Существует только одно исключение: после того, как хост перевел устройство в режим ожидания, устройство может отправить запрос удаленного пробуждения. Во всех остальных случаях хост формирует запросы, а устройства отвечают на них.

Хост всегда является мастером, и обмен данными должен осуществляться в обоих направлениях: отправляя пакет с флагом OUT, хост отправляет данные на устройство, а отправляя пакет с флагом IN, хост отправляет запрос на получение данных с устройства.

По USB может передаваться несколько типов пакетов:

Token - запрос, содержит управляющую информацию: направление операции (IN, OUT), номер endpoint

Data - пакет данных

Handshake - служебные пакеты, могут содержать подтверждение (ACK), сообщение об ошибке, отказ (NACK)

Special - служебные пакеты, такие как PING

Спецификация USB определяет 4 типа потоков данных:

1. bulk transfer - предназначен для пакетной передачи данных. Поддерживаются оба направления - IN и OUT.

2. control transfer - предназначен для конфигурирования и управления устройством. Направления - IN (status) и OUT(setup, control).

3. interrupt transfer - похож на bulk. Этот тип гарантирует, что устройство будет опрашиваться (то есть хост будет отсылать ему token "IN") хостом с заданным интервалом. Направление - IN.

4. isochronous transfer - предназначен для передачи данных без управления потоком. Область применения - аудио-потоки, видео-потоки. Предусмотрен контроль ошибок (на приемной стороне) по CRC16. Направления - IN и OUT.

Endpoint No.0 имеет особое значение для USB. Это Control EP. Он должен быть в каждом USB-устройстве. Этот EP использует token "setup", чтобы сигнализировать, что данные, отправляемые после него, предназначены для управления устройством.

Используя этот EP0, хост может передавать setup-пакет длиной 8 байт и данные, которые следуют за этим пакетом. Во многих случаях может хватать передачи только setup-пакета. Однако устройство может использовать и передачу данных по EP0, например для смены прошивок компонентов устройства, или получения расширенной информации об устройстве.

Уже упоминалось, что каждое устройство обязано обеспечить доступ к EP0. Но кроме этого, оно еще должно отвечать на запросы, указанные в спецификации USB для EP0. Пользуясь этими запросами и происходит распознавание устройства в системе.

Алгоритм детектирования нового устройства следующий:

1. хост отсылает setup-пакет "Get Descriptor" (wValue = "device").

2. хост получает идентифицирующую информацию об устройстве

3. хост отсылает setup-пакет "Set address", после чего устройство

получает уникальный адрес в системе

4. хост отсылает остальные setup-пакеты "Get Descriptor" и получает

дополнительную информацию об устройстве: количество EP, требования к питанию, и т.п.

Заключение

Подведя итоги выполнения выпускной квалификационной работы, можно отметить что поставленная цель выполнена. Также соответственно изучена общая теоретическая часть по разработке драйверов для системы Linux.

Описана предметная область для проектируемой системы, раскрыты основные понятия. Такие как драйвер, система Linux. Составлено техническое задание.

Были получены прикладные знания по программированию на С. Приобретённые базовые знания и навыки будут полезны при реализации схожих проектов.

Разработанная программа является полноценным программным продуктом для операционной системы Linux. Подсчитаны затраты на проект.

Возникшие проблемы при разработке заключались в недостаточности статей о некоторых функциях или сложности в переводе литературы иностранных разработчиков.

Драйвер готов к работе, исходный код останется открытым для его возможного дальнейшего развития.

Список литературы

1. Колисниченко, Д.Н. Linux. Полное руководство / Д.Н. Колисниченко, Аллен, Питер В. - М.: СПб: Наука и Техника, 2017. - 784 c. ISBN 978-5-7038-3021-5

2. 14. Молоканова, Н.П. Курсовое и дипломное проектирование: Учебное пособие / Н.П. Молоканова. - М.: Форум, НИЦ ИНФРА-М, 2013. - 88 c. ISBN 978-4-1002-2

3. Собель, М. Linux. Администрирование и системное программирование / М. Собель. - М.: Питер, 2014. - 350 c.978-5-459-00450-2

4. Спольски Джоэл о программировании / Спольски, Джоэл. - М.: СПб: Символ-Плюс, 2015. - 352 c. 5-93286-063-4

5. Linux Device Drivers, Third Edition 2005г. Джонатан Корбет, Александро Рубини, Грег Кроах-Хартман. Изд ORelly Лицензия: Creative Commons Attribution-NonCommercialShareAlike

6. The Linux Kernel Module Programming Guide Peter Jay Salzman Michael Burian Ori Pomerantz Copyright © 2001 Peter Jay Salzman 2007−05−18 ver 2.6.4

Покупка готовой работы
Тема: «Разработка драйвера графического планшета для системы Linux»
Раздел: Информатика
Тип: Дипломная работа
Страниц: 40
Цена: 2400 руб.
Нужна похожая работа?
Закажите авторскую работу по вашему заданию.
  • Цены ниже рыночных
  • Удобный личный кабинет
  • Необходимый уровень антиплагиата
  • Прямое общение с исполнителем вашей работы
  • Бесплатные доработки и консультации
  • Минимальные сроки выполнения

Мы уже помогли 24535 студентам

Средний балл наших работ

  • 4.89 из 5
Узнайте стоимость
написания вашей работы
Популярные услуги
Дипломная на заказ

Дипломная работа

от 8000 руб.

срок: от 6 дней

Курсовая на заказ

Курсовая работа

от 1500 руб.

срок: от 3 дней

Отчет по практике на заказ

Отчет по практике

от 1500 руб.

срок: от 2 дней

Контрольная работа на заказ

Контрольная работа

от 100 руб.

срок: от 1 дня

Реферат на заказ

Реферат

от 700 руб.

срок: от 1 дня

682 автора

помогают студентам

23 задания

за последние сутки

10 минут

среднее время отклика