Драйвер для геймпада 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[Приложение пользователя];
- Ядро Linux с установленными заголовочными файлами (
linux-headers-$(uname -r)). - Компилятор GCC и утилиты сборки (
build-essential). - Права суперпользователя (
root).
-
Клонируйте репозиторий:
git clone https://github.com/ElRitas/os_coursework.git cd os_coursework -
Соберите модуль:
make
Успешная сборка создаст файл
xpad.koв текущей директории. -
Загрузите модуль:
sudo make load
(или вручную:
sudo insmod xpad.ko) -
Проверьте установку:
dmesg | tailВ выводе должны появиться сообщения об обнаружении устройства и создании интерфейса ввода.
-
Выгрузите модуль (при необходимости):
sudo make unload
(или вручную:
sudo rmmod xpad)
os_coursework/
├── .gitignore # Игнорируемые файлы Git
├── LICENSE # Лицензия MIT
├── Makefile # Сценарий сборки
├── xpad.c # Исходный код драйвера
└── docs/ # Папка с дополнительной документацией
Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.