Курсовая работа на тему: "Улучшение USB стека Embox"

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

Но если вдруг:

Вам нужна качественная учебная работа (контрольная, реферат, курсовая, дипломная, отчет по практике, перевод, эссе, РГР, ВКР, диссертация, шпоры...) с проверкой на плагиат (с высоким % оригинальности) выполненная в самые короткие сроки, с гарантией и бесплатными доработками до самой сдачи/защиты - ОБРАЩАЙТЕСЬ!

Курсовая работа на тему:

"Улучшение USB стека Embox"

 

Оглавление

Оглавление                                                                                                  1

Введение                                                                                                       3

1.  Цель работы.                                                                                            4

2.  Обзор проведенных исследований                                                         5

2.1   Устройство USB интерфейса                                                              5

2.2   Спецификации хост-контроллера                                                       6

2.3   USB интерфейс в Embox                                                                     8

3.  Реализация                                                                                               9

3.1   Обзор Universal Host Controller Interface                                             9

3.1.1   Генерация кадров                                                                        9

3.1.2   Базовые регистры UHCI                                                              9

3.1.3   Структура данных Frame List                                                    10

3.1.4   Структура данных Transfer Descriptor                                       10

3.1.5   Структура данных Queue Head                                                  11

3.2   Выбор архитектуры                                                                          12

3.3   Эмуляция архитектуры и устройства                                               12

3.4   Реализация драйвера                                                                         12

3.5   Внедрение реализации в Embox                                                       13

3.6   Процесс сборки и запуска Embox c реализацией                              13

4.  Тестирование.                                                                                         14

4.1   Проверка инициализации хост-контроллера                                    14

4.2   Работа с USB-устройством                                                               15

Заключение.                                                                                               16

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

Введение

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

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

Встала задача выбора спецификации хост-контроллера, реализация которой будет выполнена в в рамках этой работы и выбор пал на UHCI, в виду следующих рассуждений

    Отсутствие поддержки этого хост-контроллера в проекте

    Его более простая, по сравнению с другими

    Возможность внедрения в уже реализованный USB стек Embox

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

 

1.    Цель работы.

Цель данной работы заключается в улучшении имеющегося в Embox USB-интерфейса и добавления поддержки нового хост-контроллера. Для её достижения были сформулированы следующие задачи:

1.     Сделать обзор устройства USB интерфейса.

2.     Сделать обзор USB стека в Embox.

3.     Добавить поддержку нового хост-контроллера.

4.     Провести тестирование реализации.

 

2.    Обзор проведенных исследований

2.1   Устройство USB интерфейса

 

USB (universal serial bus) — универсальная последовательная шина для подключения периферийных устройств к технике. На шине USB есть три типа устройств: хост-контроллер, хаб и конечное устройство. Их расположение представлено на рисунке 1.

 

Рис. 1 Дерево устройств на шине USB [4]

 

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

Хаб — необходим для физического подключения конечного устройства к шине USB. Для этого предоставляет порты и транслирует трафик от хост-контроллера к конечным устройствам (нисходящий порты) и обратно (восходящие порты).

Конечные устройства (функции) — устройства, которые подключаются к шине USB [3].

Любое логическое устройство, как хаб так и функция, это набор конечных точек (endpoints), к которым открываются каналы и организовываются передачи данных. Для выполнения различных задач существуют следующие типы передач:

1)  Изохронные передачи (isochronous transfers) — предназначены для передачи потоковых данных в реальном времени. Гарантируют время доставки, но не гарантируют, что все данные будут доставлены. Имеют наивысший приоритет и могут занимать до 90% пропускной способности канала, но если происходит ошибка или заканчивается время то данные не будут доставлены. Передачи этого типа используются, например, для камер или аудиоколонок.

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

3)  Передача массивов данных (bulk data transfers) — предназначены для передачи данных когда требуется гарантия доставки в целостности, а не скорость. Такие передачи имеют самый низкий приоритет, занимая оставшуюся после других пропускную способность шины. Флешки и принтеры используют этот тип передачи.

4)  Управляющие передачи (control transfers) — передачи типа запрос-ответ. С помощью них передаются команды управления устройствами[3].

 

 

2.2   Спецификации хост-контроллера

 

Хост-контроллер берет на себя задачу общения с конечными устройствами, но для связи с ним операционной системе необходим драйвер для данного контроллера [3].

Для разных версия USB представлены различные спецификации хост-контроллеров:

1)  USB 1.1 — в рамках этой спецификации представлены два интерфейса хост-контроллера: UHCI (Universal Host ControllerInterface) и OHCI (Open Host Controller Interface). Они различаются методом доступа к регистрам.

2)  USB 2.0 — соответствует спецификации EHCI (Enhanced Host Controller Interface).

3)  USB 3.0 — соответствует спецификации XHCI (eXtensible Host Controller Interface) [5].

Драйвер хост-контроллера выполняет задачу управления контроллером, составления расписания его передач и обработки ошибок. Общение с клиентскими программами и операционной системой происходит на более высоком уровне архитектуры — драйвере шины USB, который отправляет запросы драйверу хост-контроллера [3]. Абстрактная модель взаимодействия представлена на рисунке 2.

Рис. 2 Модель взаимодействия устройств

 

 

 

2.3   USB интерфейс в Embox

 

Embox — это конфигурируемая операционная система реального времени, разрабатываемая для встраиваемых систем [1].

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

В Embox уже реализован уровень драйвера шины USB, что упрощает нашу задачу внедрения нового драйвера хост-контроллера и позволяет сосредоточиться именно на нем.

 

3.    Реализация

3.1   Обзор Universal Host Controller Interface

 

В процессе работы была создана реализация драйвера хост-контроллера для устройства, которое имеет следующую структуру.

 

3.1.1   Генерация кадров

 

Хост-контроллер поддерживает доставку данных в реальном времени, генерируя Start Of Frame (SOF) пакет каждые 1 мс. В каждый SOF пакет добавляется номер кадра, в котором он выполняется. По истечении 1 мс наступает состояние End Of Frame (EOF) и начинается новый кадр, и хост контроллер генерирует новый SOF пакет с новым соответствующим номером.

Внутри кадра данные передаются в виде пакетов информации. За время кадра сначала обрабатывается очередь изохронных передач, те, которые не успевают за выделенное время теряются. Затем обрабатываются остальные типы из общей очереди [6]. Распределение продемонстрировано на рисунке 3.

 

3.1.2   Базовые регистры UHCI

 

Основные блоки регистров [6]:

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

Рис. 3 Распределение передач на кадр [6]

    USBCMD — командные регистры, запись в регистр приводит к выполнению команды.

    USBSTS — регистры статуса, дают информацию о состоянии хост-контроллера.

    USBINTR — регистры работы с прерываниями.

    FRNUM — регистр, соответствующий номеру текущего кадра.

    PORTSC — регистр для получения информации о состоянии портов.

 

3.1.3   Структура данных Frame List

 

Представляет собой массив из 1024 записей, каждая из которых соответствует отдельному кадру. Запись является ссылкой на транзакции которые должен выполнять хост-контроллер.

    FLBASEADD — регистр, соответствующий адресу списка указателей на кадр.

Заполняется этот массив драйвером хост-контроллера согласно запросам от драйвера шины USB. Контроллеру остается выбрать нужную запись в массиве с помощью регистра FLBASEADD и счетчика кадров и выполнять транзакции по ссылке [6].

 

3.1.4   Структура данных Transfer Descriptor

 

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

Для различных типов передач существуют разные дескрипторы передач. Для изохронных передач драйвер хост-контроллера соединяет их в очереди, а ссылку на первый дескриптор в очереди, кладет в соответствующую запись в списке кадров [6].

Остальные типы передач объединяются в очереди с помощью следующей структуры - Queue Head, пример расписания UHCI предложен на рисунке 4.

 

 

 

 

 

 

 

 

рис. 4 Пример расписания UHCI [6]

 

 

 

 

 

3.1.5   Структура данных Queue Head

 

Главы очереди предназначены для организации не изохронных дескрипторов передач в очереди. Последний дескриптор изохронной очереди ссылается на QH, который объединяет список передач одного типа. Сперва обрабатываются прерывания, затем управляющие запросы, и в конце массивы передачи данных [6].

 

3.2   Выбор архитектуры

 

Архитектура x86 является основной платформой для разработки в Embox, поэтому было принято решение сосредоточиться на реализации драйвера и его тестировании именно на этой архитектуре.

 

 

3.3   Эмуляция архитектуры и устройства

 

Средствами QEMU выполняется эмуляция необходимой архитектуры и хост-контроллера определенной спецификации.

Реализация представлена в scripts/qemu/

    auto_qemu — скрипт запуска QEMU

 

 

 

 

 

3.4   Реализация драйвера

 

Реализация представлена в src/drivers/usb/hc

    uhci_pci.c, uhci.h — драйвер хост-контроллера.

Для выполнения этой задачи был изменен скрипт запуска Embox — auto_qemu, в него добавлено подключение необходимого хост-контроллера в виде эмуляции pci-устройства.

    Mybuild — описание модуля драйвера и зависимостей, необходимых для его корректной сборки и работы.

Первое, что было необходимо сделать, это определение хост-контроллера и его регистрация в системе. Embox умеет работать с pci-устройствами и при запуске системы сопоставляет устройство и драйвер, если таковой имеется. Далее необходимо принимать запросы с уровней выше, организовывать их в расписание для хост-контроллера и, при необходимости, отвечать на них.

В реализации представлены необходимые функции для корректной работы с драйвером шины USB:

    uhci_start   —    инициализация   структур   хост-контроллера, запуск и регистрация в системе

    uhci_stop — остановка работы хост-контроллера

    uhci_root_hub_control     —     работа     с     корневым    хабом хост-контроллера

    uhci_request — получение, составление расписания и отправка хост-контроллеру запросов от драйвера шины USB

 

3.5   Внедрение реализации в Embox

 

Реализация представлена в templates/x86/test/uhci:

    mods.config — содержит описание подключаемых модулей

 

3.6   Процесс сборки и запуска Embox c реализацией

 

Для внедрения была создана новая конфигурация для ОС Embox, за основу взята templates/x86/qemu, в которую был добавлен реализованный модуль uhci.

1)          make confload-x86/test/uhci — загрузка необходимой конфигурации в директорию conf

2)          make — запускает процесс компиляции в соответствии с файлом conf/mods.config, компилирую необходимые модули в нужном порядке.

3)          ./scripts/qemu/auto_qemu — запуск виртуальной машины вместе со скомпилированным Embox.

 

4.    Тестирование.

4.1   Проверка инициализации хост-контроллера

 

Рисунок 5 демонстрирует информацию запуска модулей Embox, где

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

 

рис. 5 Инициализация устройства

 

Рисунок 6 демонстрирует вывод команды lspci в Embox, на котором мы видим, что это pci-устройство является хост-контроллером спецификации UHCI.

Было     необходимо     проверить     корректность    инициализации pci-устройства в системе.

Из этого примера видно, что устройство правильно идентифицировано и проинициализировано драйвером.

Рис. 6 Вывод lspci

4.2   Работа с USB-устройством

 

Для этого в Embox уже есть готовый скрипт, который создает образ диска, а затем добавляет его к скрипту запуска QEMU в виде usb флеш-накопителя.

 

Рис. 7 Работа с флеш-накопителем в ОС Embox

 

 

Чтение прошло успешно, теперь проверим запись, проверив наличие созданного файла в образе диска, примонтиров его средствами linux, на рисунке 8 продемонстрировано монтирование и вывод файлов в образе.

В рамках второго теста было проведено тестирование работы usb-устройства на примере флеш накопителя.

На рисунке 7 продемонстрировано монтирование образа флеш-накопителя, чтение созданного ранее файла и создание нового файла средствами Embox.

 

 

Рис. 8 Проверка действий, совершенных в ОС Embox

 

Тестирование   показало,   что   реализация   драйвера  хост-контроллера, внедренная в Embox, функционирует.

 

Заключение.

 

В ходе работы получены следующие результаты:

1.     Сделан обзор USB интерфейса.

2.     Сделан обзор USB стека проекта Embox.

3.     Реализована поддержка спецификации UHCI хост-контроллера.

4.     Проведено          тестирование          работоспособности          драйвера хост-контроллера

 

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

 

[4]  USB-devices tree — URL: http://kazus.ru/nuke/spaw/images/1/top_usb.gif

 

[1]  Embox wiki. — URL: https://github.com/embox/embox/wiki (дата обращения: 10.05.2020)

[2]  USB — URL: https://en.wikipedia.org/wiki/USB (дата обращения: 10.05.2020)

[3]  Universal Serial Bus rev 1.1 Specification — URL: http://esd.cs.ucr.edu/webres/usb11.pdf (дата обращения: 10.05.2020)

[5]  Host controller interface — URL: https://en.wikipedia.org/wiki/Host_controller_interface_(USB,_Firewire) (дата обращения 10.05.2020)

[6]  UHCI design guide — URL: ftp://ftp.netbsd.org/pub/NetBSD/misc/blymn/uhci11d.pdf (дата обращения 10.05.2020)