Появилось желание подключить к плате различные usb девайсы.
Для начала интересно подцепить клавиатуру и мышку, естественно usb. Задача подключить устройство и написать программку, которая отслеживает сигналы с этих девайсов. Соответственно, если это клавиатура то сканкоды символов, если мышка - приращение координат.
Полагаю, для начала, решение проблемы заключается в поиске драйвера. При подсоединении мышки происходит общение с ней в результате чего камень понимает что подсоединена именно мышь. Но предполагаемого появления файла устройства в /dev я не наблюдал.
Появилась мысль, что этот драйвер необходимо искать и заливать самим. Но где его брать и какой необходим я пока не знаю.
И ещё проблема, как получить доступ к этому драйверу из самописной программы.
Если кто сталкиваелся с таким вопросом и знает решение, пожалуйста опишите каких результатов вы достигли и, самое главное, поэтапное выполнение ваших действий) Хотелось бы получить механизм, который будет практически универсальный для всех usb устройств, если такой существует))
Заранее спасибо!)
Все usb драйвера в ядре - нужно их вкомпилить внутрь или модулями. Для того что бы они "появлялись в /dev" надо что бы был запущен какой нибудь hotplug агент. Ну хотя бы udev или mdev. Работа с usb от "большого Линукса" на ARM устройствах ничем не отличается - так что читайте доки по Линукс
Так, вот с этого момента по подробнее.
Как узнать, какие драйвера уже вкомпилены в ядро?
Нельзя ли привести примерчик "вкомпиливания" драйвера в ядро, причём я так полагаю, для это дела можно взять драйвер от "большого линукса" для сего устройства или класса подобных устройств?
И, я так понял, необязательно, чтобы они появлялись в /dev, или всё таки необходимо для работы с ними?
Ну, например, когда пишется прога для обработки клавиатуры мы тупо используем функции getch или scanf, даже не задумываясь о наличии драйверов и всем, что с этим связано. Мне кажется, что здесь дело обстоит не так, или я ошибаюсь?
Я говорю о том (и пока только о том) - что у вас проблема не "с этой платой", а с Линукс вообще. Этот Линукс и "тот" - это один и тот же Линукс. А конкретно - про подключение usb _клавиатуры_ на этом форуме уже писалось.
Честно говоря не находил про подключение клавиатуры, вернее находил, но ничего конкретного.
Но опять же, цель этой темы не просто разобраться с подключением отдельно взятого девайса, а подобрать универсальный механизм для работы с любым устройством в своей самописной программе, поддерживающим usb интерфейс, опять же если это возможно.
Я не до конца понимаю в каком направлении двигаться и собственно, что мне не хватает для реализации задуманного. Знаю, что точно не хватает знаний, возможно в направлении линукса.
Если между обычным линуксом и тем что у нас на плате нету разницы, почему тогда "там" заводиться а "тут" нет))
Универсальный механизм - самому писать драйвер для usb устройства.
Драйвер usb клавиатуры уже давно есть в linux'е, причем написан так, чтобы пользовательская программа не отличила его от ps/2 или другого аппаратного интерфейса. Это просто клавиатура. Как работать с ней вам и нужно искать.
Этот драйвер уже есть в ядре, нужно его включить в настройках, хотя скорее всего оно там уже включено.
Посмотрите в настройках ядра чтобы были разрешены клавиатуры и hid-устройства.
Скорее всего вы будете получать ввод с ком-порта, через который работает консоль.
P.S. У меня usb-клавиатуры нет, рассуждаю теоретически...
Именно это и будет проиходить. Тут и проверять не нужно!
Я полагаю это самый крайний случай)
То есть выходит, что у нас всё есть?
Если да, то натыкаемся на вопрос, который я задавал ещё в начале темы, как организовать взаимодействие с драйвером?
Я никогда не программировал программы прямого взаимодействия с драйверами устройств.
По идее они должны быть отображены в память. Ну и как вариант использование mmap?
Для начала неплохо было бы почитать про linux. Вроде бы вопросы простые но скажи вам что нужно в конфиге ядра включить поддержку hid и прочего и новые вопросы будут как снежный ком обрастать - начиная от того как готовое ядро и свои бинарники залить и заканчивая тем есть понятие терминала и библиотеки ncurses, xlib и прочие чтобы не заниматься ерундой.