LINUX.ORG.RU

Требуется железо для написания USB драйвера

 


1

1

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

http://www.linuxjournal.com/article/7353

Не ну в самом деле, чего может быть такого особенного? Там ведь всего лишь 3 светодиода и usb контроллер, да вот только стоит она 100 баксов:

https://www.delcomproducts.com/products_usblmp.asp

Это уже какой-то явный перебор. Может кто-нибудь посоветовать какое-либо простое USB устройство для которого можно легко написать драйвер и стоит нормальное количество денег?

Как вариант взять отладочную плату с каким-либо микроконтроллером и написать прошивку, использующую USB самому. Потом написать к ней драйвер. Я когда изучал libusb, использовал STM32discovery с этой прошивкой: https://github.com/Mathias-L/STM32F4-Discovery-example-code Там используется ChibiOS, но более простого я ничего не нашёл, т.к. везде сразу используются классы.

Эту же статью где-то я видел в варианте с применением libusb, а не драйвера.

DarthVadimius ★★★★
()

Для USB не нужен "драйвер", т.к. есть libusb. А под каждую USB-шную железяку писать свой модуль ведра — моветон!

Вот с PCI/PCI-x можешь поковыряться, но там посложней.

anonymous
()
Ответ на: комментарий от anonymous

Да, рекомендую STM32. На основе этого шаблона можно сделать что-то с интерфейсом CDC; эта штука эмулирует мышу с клавой; это — шаблон для эмулирующих клаву приложений (скажем, я на основе этого делал хронометр для даунхилла).

anonymous
()
Ответ на: комментарий от Dark_SavanT

Только если хочется выпендриться, и запилить команды через ioctl (как в веб-камерах, например), а не общий канал связи.

anonymous
()
Ответ на: комментарий от anonymous

А ещё если обмен данными с железкой активный и большими пакетами. Переключения контекста и копирование из ведра в юзерспейс быстро станут узким местом.

Dark_SavanT ★★★★★
()

Железяки с V-USB, от ста рублей, только сам паять будешь.

ilovewindows ★★★★★
()

Сейчас в ванильное ядро активно добавляют поддержку плат stm32f429-discovery и stm32f746g-discovery. Например недавно добавили драйвер sdio. Я знаю что вродебы два человека уже работают над драйвером для usb, но пока еше ничего не готово. Так что если хочешь можешь принести реальную пользу людям и ядру если возмешься делать usb для этих плат.

P.S. Упс, не внимательно прочитал тему, автор хочет написать драйвер устройства, а не хоста, так что мой коммент мимо.

pftBest ★★★★
()
Последнее исправление: pftBest (всего исправлений: 1)

Какой-нибудь digispark и попердолиться в HID, например.

Radjah ★★★★★
()

Без шуток, клавиатура или мышь более чем подойдут, протокол простой, и прогать сторону девайся пока не надо. Надо как-то заменить стандартные дрова для клавы на свой, как не знаю, но думаю это просто.

А вообще, можешь взять отладочную плату с микроконтроллером STM32 и демо программой для него. А устройств для USB device куча, заканчивая отечественными МК Миландр и Мультиклет с USB-device портами.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Извиняюсь, совсем не мог ответить вчера, полнейший завал на работе. Спасибо за ответы, но STM это немного не то, чего я хочу, я попробую еще раз объяснить.

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

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

Может у кого-то есть еще предложения с чего можно начать в таком случае?

Kronick
() автор топика
Ответ на: комментарий от anonymous

Только что погуглил про USB serial, классная штука, можно будет прикупить и использовать на ноуте, ноут с serial портом, идеально. Спасибо за наводку.

Kronick
() автор топика
Ответ на: комментарий от Kronick

Может у кого-то есть еще предложения с чего можно начать в таком случае?

Ты можешь купить что-то вроде raspberry pi и писать драйвер для I2C/SPI/GPIO устройств. Одно дело работать с устройствами через /dev/i2c, а другое - когда твой ядерный модуль дергает API этой подсистемы на уровне ядра, а наружу предоставляет другой интерфейс, например char device.

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

Если ты будешь писать USB-драйвера, но не уметь делать USB-device часть - грош тебе цена, нафиг это надо, ИМХО. Насколько мне известно, есть в Linux возможность писать драйвер не только для стороны хоста, но и для случая когда само устройство с Linux является USB Device. Тем более Raspberry начиная с какой-то версии умеет USB OTG.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

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

Kronick
() автор топика
Ответ на: комментарий от Kronick

Слушай, а тебе обязательно именно USB? Хочешь PCI-E? Прыгай в мою тему, может напишешь драйвер мне для тренировки? А я буду запускать на железе и говорить как оно работает. Предлагаю тебе такую кооперацию. Мне надо V4L2 интерфейс на выходе драйвера - это вполне в стиле любых других драйверов в Linux, где «слева» интерфейс ввода данных железки, а «справа» какой-то стандартный интерфейс для софта, например V4L2.

100% рабочую заготовку драйвера я тебе дам и объясню как оно работает.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от Kronick

А USB потом вместе будем осиливать, у меня есть контроллер Миландр с USB Device, сам контроллер шьется и работает, однако демо с USB Device я пока не осилил там поднять.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Kronick

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Полностью согласен, дрова для смеха не пишут, а компаний пишущих дровишки в мире много но плотность их размещения по миру мала, особенно пока что у нас. Поэтому и предлагаю пострадать этой ерундой совместно со мной :)

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Я бы с удовольствием, но вот честно, я почти ничего в этом не понимаю, я поэтому и хотел самое простое USB устройство. Мне еще кучу всего надо узнать и понять что это, всякие DMA, шины и все в таком духе. Может быть через годик, но сейчас боюсь что только потрачу твое время, не люблю тратить чужое время и создавать неудобства.

Kronick
() автор топика
Ответ на: комментарий от Iron_Bug

Ну мотивация такая, что мне нравится писать на С и нравится Линукс, само ядро и драйвера, я очень хотел бы этим заниматься, профессионально и за зарплату. Ну или работать со всякими железками, встраеваемыми системами, только вот проблема в том, что в моем городе почти нет вакансий по этому направлению, буквально 1-2 конторы, в которые нужен сеньор с опытом 10+ лет.

К тому же есть определенные обстоятельства и я не смогу сменить текущую работу в ближайшие года 3-4. Вот и остается выучить все самому, настолько насколько это возможно, а лет через 5 попробовать уехать куда-нибудь. Только чтобы это сделать - нужен опыт, реализованные проекты, и возможно коммиты в какие-нибудь серьезные проекты. Опенсорс проекты - это мой билетик из текущего болота.

Kronick
() автор топика
Ответ на: комментарий от Kronick

USB не сильно проще (и проще ли?) чем PCI, а месяца три назад я и сам смутно всё представлял (да и сейчас не полностью). Там всё просто, никакой «кучи всего» там нет. В любом случае, кастуй меня в вопросы, хотя на ЛОРе конечно есть гораздо более грамотные (я просто плесень на их ботинке :))) ) специалисты по драйверам Linux.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

А на деле вы друг о друге тут так все думаете.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Спасибо, обязательно. Я в ближайшее время планировал с книжкой ldd доразобраться, написать свой skull драйвер и все такое, думаю месяца 3-4 понадобится, а потом может и смогу помочь с драйвером, глядишь уже будет понятнее что происходит

Kronick
() автор топика
Ответ на: комментарий от Kronick

Все-таки лучше начни с электроники, а не написания модулей ядра. Почитай Хоровица&Хилла, купи себе девборду на каком-нибудь STM32 (с ардуйни крайне не советую начинать, т.к. слишком большой риск в этом болоте так и завязнуть). Ни в коем разе калокубами не пользуйся — возьми гольный CMSIS и читай даташиты и RM, на крайняк на первое время конфигурировать железо можешь при помощи libopencm3 (только будь готов к тому, что эти засранцы — его разрабы — периодически делают тотальный «апгрейд» с полной поломкой старых API, поэтому либо пользовать одну-единственную фиксированную версию, либо — что правильней — не пользовать его вовсе).

anonymous
()
Ответ на: комментарий от anonymous

да я бы начал, но тут есть 2 причины которые меня останавливают:

1) Мои знания схемотехники никакие, прямо совсем. Знания физики на уровне пятого класса школы(привет российские общеобразовательные школы!). Паять что-либо я врядли смогу, руки дрожат когда делаю какие-то мелкие действия, да и слабо представляю как вообще это делать.

2) Нет никого кто бы мог помочь разобраться, одному не очень-то просто все это делать.

Ну а с драйверами тут проще - поставил Линукс и пиши себе, к тому же Линукс я немного знаю, и смогу присоединиться к какому-нибудь опенсорсному проекту, где есть люди, которые смогут помочь и подсказать что-то, там ведь не нужно будет физически показывать как что делать, как с паянием

Kronick
() автор топика
Ответ на: комментарий от Kronick

Мои знания схемотехники никакие, прямо совсем.
Нет никого кто бы мог помочь разобраться, одному не очень-то просто все это делать.

Думаешь в дровах проще самому разбираться? Да и для работы с USB на борде тебе схемотехника не нужна.

привет российские общеобразовательные школы!

У тебя в школе была цензура на закон Ома?

Паять что-либо я врядли смогу

Тебе советуют девборду купить, а не спаять.

проекту, где есть люди, которые смогут помочь и подсказать что-то

Тебе уже предложили менторство с PCI. Чё ты боишься?

Vovanano
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.