dlinyj: (Default)
[personal profile] dlinyj
Есть некое авторское устройство для USB, которое мы назовём “D”. Чтобы не вдаваться в дремучие дебри USB-шины, скажем, что оно принимает данные по каналу, например “1” и отвечает по каналу “2”. В Windows существует для него некий костыльный приоретарный драйвер, работа с которым так же идёт через приоретарную либу. Всё работает.

Код простой под вынь (хоть и дичайше избыточный), код под контроллер устройства так же есть. Думаю, говно вопрос, ща забацаю за денёк драйвер под линь. Дня три вкуриваю в работу протокола USB и особенности написания дров, пишу, и херак - ничего не работает. Ну логично, мол. Но не работает, что странно. Я закурил маны, код железки, код под винду.
Во первых, данные, таки, в девайс сыпятся - это факт. Есть некоторые посылки, которые заставляют девайс делать непотребства, которые он таки делает. И он посылки точно принимает, но вот обратно не шлёт. Во вторых, канал отправки данных на девайс соответствует виндовому, а вот приёму не соответвует. Номера каналов - получает драйвер с девайса. И так, и этак кручу - не соответствует, получаю канал, положим “82”. Принудительно слушаю канал “2” - тишина.
Едем дальше. Логично проснифать реальный протокол обмена в винде. Мы же в программе общаемся с каналами “1” и “2”. И ВНЕЗАПНО, при попытке прослушать протокол обмена разными программами на разных компах под виндой - всё перестаёт нахер работать! И самое забавное, что эти сниферы в действительности показывают тот номер канала, который определяет мой драйвер аки “82” и софт не пашет.



Тут уже закуривают нервно разработчики девайса и программы под вынь. Мол, линуксойд, ты нам тут всю малину испортил, без тебя всё работало. Начинаем раскуривать маны.
Я расчехляю virtualbox с виндой, загружаю модуль usbmon в линуксе, и начинаю через прослойку слушать реальный обмен программы и драйвера в винде, в обмене с реальной железкой ( примерно так http://symmetrica.net/usb/usb1.htm слава возможностям wireshark!!!) . Делается это для того, чтобы не портить виндовые API и для винды работа с дровами шла прозрачно. И таки да, обмен идёт совсем НЕ по тем каналам, по которым идёт общение программы.

Мистика. Количество глюков в драйвере и библиотеке балансирует так, что устройство работает!

Пока курю соснифанное и смотрю различия с работой моего драйвера. Вот так, доверяй преоретарщине своё железо… Ненавижу за это винду, с её многотонными глючными либами, обновлениями и прочим геммороем.

З.Ы. Все совпадения случайны, пост является вымыслом. Единственное, что не вымысел - моя ненависть к ОС, которые невозможно контролировать. Ну не могу я работать на машине, которая что-то делает, а что я не знаю. Выключаешь комп, а она тупит, оказывается, блин - обновления качает, потом их при включении ставит. И из-за политики компании ВЫКЛЮЧИТЬ обновления НЕЛЬЗЯ!!! (можно, но будет бо-бо)

Date: 2013-12-11 06:42 am (UTC)
From: [identity profile] juunitaki.livejournal.com
контролировать, контролировать, да не выконтролировать ;)

Date: 2013-12-11 08:43 am (UTC)
From: [identity profile] mbr.livejournal.com
а на кой тебе драйвер? сделай правило для udev, да и работай через libusb из юзерспейса...

Date: 2013-12-11 11:37 am (UTC)
From: [identity profile] freeman.livejournal.com
главное всегда делать четное количество ошибок =)

Date: 2013-12-11 12:05 pm (UTC)
From: [identity profile] savant (from livejournal.com)
У тебя было ещё дохрена источников поиска знаний. Когда ковыряешь железку на которую ни даташита, нихрена, только сниффаный обмен и прога которая что-то с этой железякой умеет делать, вот где трэш.

Date: 2013-12-11 12:52 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Грандиозное спасибо за идею. Всё работает

Date: 2013-12-11 01:24 pm (UTC)
From: [identity profile] mbr.livejournal.com
И давно так? А что за железки?

Date: 2013-12-11 02:14 pm (UTC)
From: [identity profile] savant (from livejournal.com)
Всего-навсего CDMA модуль. Надо было понять как от него получать статистику и посылать смски. AT команды у него обрезаны до неприличия. Как оказалось - инфа получается через расширения к квалкомовскому бинарному протоколу, дальше уже было несколько проще, но запарно в плане разбора того что и как посылается модулю и как он на жто должен отвечать.

Date: 2013-12-11 07:03 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Просто рассыпаюсь в словах мегаблагодарностей.

А что за правило сделать? У меня без правил всё работает.

Date: 2013-12-11 09:06 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Есть такое. Вот, только на ЛОРе была тема: в мастдайке железяка как CDC работает, а в линуксе "ныкается". А просто автор кривые VID/PID нарисовал! Правило udev такое дело исправит (если, конечно, автор прошивки еще и не накосячил с протоколами). В твоем случае, понятное дело, полная жопа: никакие правила тут не помогут.
А вообще, мастдайные "драйвера" под линукс портировать — тот еще геморрой. Чаще всего проще с нуля написать.

// а я уже вторую неделю бьюсь с STM32F407: потихоньку прифигачиваю к ней lwip, чтобы поднять ethernet (хочу связь сделать - хватит обычного блокирующего сокета, однопоточного, с фильтрацией по IP и MAC клиента). А еще бьюсь над USB: вот захотелось мне, чтобы оба порта одновременно могли работать. А не выходит: я уже перелопатил все исходники SPL, исправил кучу косяков, но так и не "взлетело": почему-то все равно используется общая точка выхода для обоих портов. А насчет SPL на "казусе" были правы: очень уж кривая гадость. Для злементарных задачек подходит, но чуть шаг в сторону — и лезь, правь библиотеку... Ох уж эти ST'шники, не могли нормальную библиотечку написать!
// ну и бесит то, что в интернете дофига примеров для всяких мастдайных утилиток, а нормальных проектов под gcc практически нет. Ну, что ж, будут 2 ☺
Edited Date: 2013-12-11 09:08 pm (UTC)

Date: 2013-12-11 09:11 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Дык, никто не портировал. Писал с нуля. В результате написал кросплатформенную прогу )))).

А что за правила для udev? Впервые слышу.

Date: 2013-12-11 09:15 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Втыкаешь ты USB'шную железку, udev тут же просматривает /etc/udev/rules.d/*.rules на предмет соответствия различных параметров из скриптов параметрам подключенной железки. Если находит удовлетворяющие, выполняет требуемые действия.
Так работает автомонтирование (у меня udev создает директории в /media + вносит записи в fstab при подключении внешних носителей, а потом подчищает все при отключении), создание симлинков в /dev для упрощения доступа к железкам (если нужен доступ не через libusb) и многое другое.
Когда-то все это надо было вручную делать. Потом придумали жуткую дрянь — HAL, но ему на смену пришел удобный udev. Если поделками Поцтеринга не пользоваться, все ОК.

Date: 2013-12-12 03:53 am (UTC)
From: [identity profile] mbr.livejournal.com
Я уж давно такие вещи делал, может и поменялось уже что в ядре. Раньше libusb можно было запускать только от рута, чтобы у приложения были права доступа. Решалось, например, так: https://github.com/texane/stlink/blob/master/49-stlinkv1.rules

по ссылке stlink программатор под linux

Date: 2013-12-12 03:55 am (UTC)
From: [identity profile] mbr.livejournal.com
Знакомо. Есть желание заниматься такими вещами профессионально и за хорошие деньги?

Date: 2013-12-12 03:57 am (UTC)
From: [identity profile] mbr.livejournal.com
кваллком такой кваллком. По сути, там все крутится в виртуалке (включая андроид) поверх микроядерной L4 ртоси, форка Iguana OS.

Date: 2013-12-12 05:28 am (UTC)
From: [identity profile] savant (from livejournal.com)
Так ты ещё и ядерный драйвер писал? Силён.

Date: 2013-12-12 05:31 am (UTC)
From: [identity profile] savant (from livejournal.com)
Скорее нет чем да. Я этим по работе занимался, надо было совместить ужа в виде армовой платы с колючей проволокой в виде скайлинкового модуля. Заниматься этим серьёзно я не факт что хочу и очень сомнительно что умею на должном уровне.

Date: 2013-12-12 05:46 am (UTC)
From: [identity profile] mbr.livejournal.com
На должном уровне не умеет никто. Задачи сложные, каждый проект уникален. Но и оплата выше среднего разработчика. Будет желание продолжить общение, контакты у меня в профиле.

Да простит меня владелец журнала за этот хантинг :)

Date: 2013-12-12 06:37 am (UTC)
From: [identity profile] alec_v.livejournal.com
Уже портированый lwip, голый или с FreeRTOS(uC/OS-II) идут к STM32F4DISCOVERY в комплекте платы Embest DM-STF4BB (или готовый набор из 2-х плат: DevKit407). Платка правда дорогая, но 1 штучку можно и купить. Зато PHY LAN8720 припаян.

Работает "искаропки", вебсервер, DHCP, все дела.

В принципе исходники можно и так утащить, но рихтовать придется под ваш PHY.

Date: 2013-12-12 07:36 am (UTC)
From: [identity profile] eddy-em.livejournal.com
Я оттуда и взял. Теперь внедряю к себе. То, что "идет к комплекту" не собирается (хотя бы потому, что там нет Makefile).
У меня STM32E407, там немного разводка от "дискавери" с ethernet-гнездом отличается.

В отличие от USB, разобраться полноценно с TCP/IP не имею возможности: мозгов и времени не хватает. DHCP нафиг не нужен: статический IP, прямое подключение к компьютеру-шлюзу (чтобы никто не мешал), в худшем случае - подключение через маршрутизатор. Вебсервер тоже не нужен (мне только сокет-сервер поднять).

Вот с рихтовкой под PHY могут косяки возникнуть: регистров там уйма, можно нужный и прозевать.

Date: 2013-12-12 08:13 am (UTC)
From: [identity profile] alec_v.livejournal.com
Боюсь даже спросить, а в чем собирается проект ? В примерах DM-STF4BB - готовые проекты под Keil или EWARM. В кокосе ? А отладка в чем?

Если надо "очень быстро прилепить IP", то проще поставить хрень типа W5200 или новую W5500. Стоит она столько же как PHY (фокус! фокус!) а код меньше раз в 20, чесслово - нету ни et ни lwip да и чип дешевле чем xx7. IMHO конечно. Занимает 1 порт SPI, 4 проводка.

Date: 2013-12-12 12:58 pm (UTC)
wizzard: (photo24)
From: [personal profile] wizzard
а хорошие - это какие? (контакты в профиле)

Date: 2013-12-12 01:41 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Что значит "в чем"? Собираю gcc (arm-none-eabi-gcc), проприетарщиной не пользуюсь. Да и на кой мне эта дрянь? Отладка через USB (свой "printf"), дебаггерами я никогда не пользовался и не пользуюсь.

Поднять ethernet хочу именно на этой макетке. Понятно, что SPI'ный модуль взять проще, да и городить всякую фигню не надо. Но здесь же в микроконтроллере сеть "зашита": хочется возможности использовать (а то USB тоже ведь можно при помощи внешней микросхемки через UART сделать).

Date: 2013-12-12 05:50 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
>>Да простит меня владелец журнала за этот хантинг :)

Владельцу, главное не предлагается...

Date: 2013-12-13 05:31 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Да это ж просто

Date: 2013-12-13 05:34 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Твоя принципиальность добавляет тебе в 10 раз больше проблем

Date: 2013-12-13 06:12 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Твоя принципиальность добавляет тебе в 10 раз больше проблем

Date: 2013-12-13 07:49 am (UTC)
From: [identity profile] savant (from livejournal.com)
В сравнении с libusb? Данунафиг. на libusb как минимум отлаживаться проще. Потом уже можно на ядерный уровень переписать, если быстродействия не зватает.

Date: 2013-12-13 08:29 am (UTC)
From: [identity profile] eddy-em.livejournal.com
Ну надо же кому-то быть первым ☺
А то что-то уж сильно достает это засилье проприетарщины во всех областях.
Я уже принципиально не принимаю чертежи в dwg формате (т.к. не в чем их открывать); документы высылаю людям в pdf и/или odt... Пусть привыкают.

Date: 2013-12-13 01:52 pm (UTC)
From: [identity profile] mbr.livejournal.com
отправил на почту.

Date: 2013-12-13 02:06 pm (UTC)
From: [identity profile] mbr.livejournal.com
отправил на gmail.

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 07:48 pm
Powered by Dreamwidth Studios