Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Драйвер игрового контроллера для ОС

Драйвер для геймпада Xbox (и совместимых), разработанный в рамках курсовой работы по операционным системам. Этот проект представляет собой реализацию модуля ядра Linux, который обеспечивает взаимодействие между игровым контроллером и системой, преобразуя входные сигналы в стандартные события evdev.


📋 Оглавление


Обзор

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

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


Основные возможности

  • Поддержка контроллеров: Работает с геймпадами Xbox 360, Xbox One (в режиме совместимости) и другими USB-контроллерами, использующими протокол Xbox.
  • Обработка ввода: Преобразует сырые USB-данные в события ввода Linux (EV_KEY, EV_ABS).
  • Поддержка кнопок и осей:
    • Цифровые кнопки: A, B, X, Y, D-Pad, Start, Back, Guide, триггеры (LB, RB, LT, RT).
    • Аналоговые оси: Левый/Правый стики (X/Y), аналоговые триггеры.
  • Интеграция с evdev: Предоставляет стандартный интерфейс через файл устройства /dev/input/event*, что делает его совместимым с любым программным обеспечением, использующим libinput или SDL2.
  • Динамическое управление: Поддерживает стандартные операции open, release, read и poll.

Архитектура проекта

Проект построен на базе фреймворка для написания драйверов Linux. Ключевые компоненты:

  • Модуль ядра (xpad.c):
    • Инициализация: Регистрирует драйвер USB и устройство ввода.
    • USB-обработка: Взаимодействует с USB-устройством через urb (USB Request Block) для приёма данных.
    • Обработчик ввода: Парсит входящие USB-пакеты и заполняет структуру input_event.
    • Управление памятью: Выделяет и освобождает память для структур драйвера.
  • Makefile: Собирает модуль с использованием инфраструктуры сборки ядра (Kbuild).
  • Документация (docs/): Содержит дополнительные материалы по проекту.
graph LR
    A[Игровой контроллер] --> B(USB-шина);
    B --> C[Драйвер xpad.ko];
    C --> D{Обработка данных};
    D --> E[События ввода];
    E --> F[Файл устройства /dev/input/eventX];
    F --> G[Приложение пользователя];
Loading

Установка и сборка

Требования

  • Ядро Linux с установленными заголовочными файлами (linux-headers-$(uname -r)).
  • Компилятор GCC и утилиты сборки (build-essential).
  • Права суперпользователя (root).

Инструкция

  1. Клонируйте репозиторий:

    git clone https://github.com/ElRitas/os_coursework.git
    cd os_coursework
  2. Соберите модуль:

    make

    Успешная сборка создаст файл xpad.ko в текущей директории.

  3. Загрузите модуль:

    sudo make load

    (или вручную: sudo insmod xpad.ko)

  4. Проверьте установку:

    dmesg | tail

    В выводе должны появиться сообщения об обнаружении устройства и создании интерфейса ввода.

  5. Выгрузите модуль (при необходимости):

    sudo make unload

    (или вручную: sudo rmmod xpad)


Структура репозитория

os_coursework/
├── .gitignore          # Игнорируемые файлы Git
├── LICENSE             # Лицензия MIT
├── Makefile            # Сценарий сборки
├── xpad.c              # Исходный код драйвера
└── docs/               # Папка с дополнительной документацией

Лицензия

Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages