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

Тут уже закуривают нервно разработчики девайса и программы под вынь. Мол, линуксойд, ты нам тут всю малину испортил, без тебя всё работало. Начинаем раскуривать маны.
Я расчехляю virtualbox с виндой, загружаю модуль usbmon в линуксе, и начинаю через прослойку слушать реальный обмен программы и драйвера в винде, в обмене с реальной железкой ( примерно так http://symmetrica.net/usb/usb1.htm слава возможностям wireshark!!!) . Делается это для того, чтобы не портить виндовые API и для винды работа с дровами шла прозрачно. И таки да, обмен идёт совсем НЕ по тем каналам, по которым идёт общение программы.
Мистика. Количество глюков в драйвере и библиотеке балансирует так, что устройство работает!
Пока курю соснифанное и смотрю различия с работой моего драйвера. Вот так, доверяй преоретарщине своё железо… Ненавижу за это винду, с её многотонными глючными либами, обновлениями и прочим геммороем.
З.Ы. Все совпадения случайны, пост является вымыслом. Единственное, что не вымысел - моя ненависть к ОС, которые невозможно контролировать. Ну не могу я работать на машине, которая что-то делает, а что я не знаю. Выключаешь комп, а она тупит, оказывается, блин - обновления качает, потом их при включении ставит. И из-за политики компании ВЫКЛЮЧИТЬ обновления НЕЛЬЗЯ!!! (можно, но будет бо-бо)
Код простой под вынь (хоть и дичайше избыточный), код под контроллер устройства так же есть. Думаю, говно вопрос, ща забацаю за денёк драйвер под линь. Дня три вкуриваю в работу протокола USB и особенности написания дров, пишу, и херак - ничего не работает. Ну логично, мол. Но не работает, что странно. Я закурил маны, код железки, код под винду.
Во первых, данные, таки, в девайс сыпятся - это факт. Есть некоторые посылки, которые заставляют девайс делать непотребства, которые он таки делает. И он посылки точно принимает, но вот обратно не шлёт. Во вторых, канал отправки данных на девайс соответствует виндовому, а вот приёму не соответвует. Номера каналов - получает драйвер с девайса. И так, и этак кручу - не соответствует, получаю канал, положим “82”. Принудительно слушаю канал “2” - тишина.
Едем дальше. Логично проснифать реальный протокол обмена в винде. Мы же в программе общаемся с каналами “1” и “2”. И ВНЕЗАПНО, при попытке прослушать протокол обмена разными программами на разных компах под виндой - всё перестаёт нахер работать! И самое забавное, что эти сниферы в действительности показывают тот номер канала, который определяет мой драйвер аки “82” и софт не пашет.

Тут уже закуривают нервно разработчики девайса и программы под вынь. Мол, линуксойд, ты нам тут всю малину испортил, без тебя всё работало. Начинаем раскуривать маны.
Я расчехляю virtualbox с виндой, загружаю модуль usbmon в линуксе, и начинаю через прослойку слушать реальный обмен программы и драйвера в винде, в обмене с реальной железкой ( примерно так http://symmetrica.net/usb/usb1.htm слава возможностям wireshark!!!) . Делается это для того, чтобы не портить виндовые API и для винды работа с дровами шла прозрачно. И таки да, обмен идёт совсем НЕ по тем каналам, по которым идёт общение программы.
Мистика. Количество глюков в драйвере и библиотеке балансирует так, что устройство работает!
Пока курю соснифанное и смотрю различия с работой моего драйвера. Вот так, доверяй преоретарщине своё железо… Ненавижу за это винду, с её многотонными глючными либами, обновлениями и прочим геммороем.
З.Ы. Все совпадения случайны, пост является вымыслом. Единственное, что не вымысел - моя ненависть к ОС, которые невозможно контролировать. Ну не могу я работать на машине, которая что-то делает, а что я не знаю. Выключаешь комп, а она тупит, оказывается, блин - обновления качает, потом их при включении ставит. И из-за политики компании ВЫКЛЮЧИТЬ обновления НЕЛЬЗЯ!!! (можно, но будет бо-бо)
no subject
Date: 2013-12-11 06:42 am (UTC)no subject
Date: 2013-12-11 08:43 am (UTC)no subject
Date: 2013-12-11 12:52 pm (UTC)no subject
Date: 2013-12-12 05:28 am (UTC)no subject
Date: 2013-12-13 05:31 am (UTC)no subject
Date: 2013-12-13 07:49 am (UTC)no subject
Date: 2013-12-11 07:03 pm (UTC)А что за правило сделать? У меня без правил всё работает.
no subject
Date: 2013-12-12 03:53 am (UTC)по ссылке stlink программатор под linux
no subject
Date: 2013-12-11 11:37 am (UTC)no subject
Date: 2013-12-11 12:05 pm (UTC)no subject
Date: 2013-12-11 01:24 pm (UTC)no subject
Date: 2013-12-11 02:14 pm (UTC)no subject
Date: 2013-12-12 03:55 am (UTC)no subject
Date: 2013-12-12 05:31 am (UTC)no subject
Date: 2013-12-12 05:46 am (UTC)Да простит меня владелец журнала за этот хантинг :)
no subject
Date: 2013-12-12 05:50 pm (UTC)Владельцу, главное не предлагается...
no subject
Date: 2013-12-13 02:06 pm (UTC)no subject
Date: 2013-12-12 12:58 pm (UTC)no subject
Date: 2013-12-13 01:52 pm (UTC)no subject
Date: 2013-12-12 03:57 am (UTC)no subject
Date: 2013-12-11 09:06 pm (UTC)А вообще, мастдайные "драйвера" под линукс портировать — тот еще геморрой. Чаще всего проще с нуля написать.
// а я уже вторую неделю бьюсь с STM32F407: потихоньку прифигачиваю к ней lwip, чтобы поднять ethernet (хочу связь сделать - хватит обычного блокирующего сокета, однопоточного, с фильтрацией по IP и MAC клиента). А еще бьюсь над USB: вот захотелось мне, чтобы оба порта одновременно могли работать. А не выходит: я уже перелопатил все исходники SPL, исправил кучу косяков, но так и не "взлетело": почему-то все равно используется общая точка выхода для обоих портов. А насчет SPL на "казусе" были правы: очень уж кривая гадость. Для злементарных задачек подходит, но чуть шаг в сторону — и лезь, правь библиотеку... Ох уж эти ST'шники, не могли нормальную библиотечку написать!
// ну и бесит то, что в интернете дофига примеров для всяких мастдайных утилиток, а нормальных проектов под gcc практически нет. Ну, что ж, будут 2 ☺
no subject
Date: 2013-12-11 09:11 pm (UTC)А что за правила для udev? Впервые слышу.
no subject
Date: 2013-12-11 09:15 pm (UTC)Так работает автомонтирование (у меня udev создает директории в /media + вносит записи в fstab при подключении внешних носителей, а потом подчищает все при отключении), создание симлинков в /dev для упрощения доступа к железкам (если нужен доступ не через libusb) и многое другое.
Когда-то все это надо было вручную делать. Потом придумали жуткую дрянь — HAL, но ему на смену пришел удобный udev. Если поделками Поцтеринга не пользоваться, все ОК.
no subject
Date: 2013-12-12 06:37 am (UTC)Работает "искаропки", вебсервер, DHCP, все дела.
В принципе исходники можно и так утащить, но рихтовать придется под ваш PHY.
no subject
Date: 2013-12-12 07:36 am (UTC)У меня STM32E407, там немного разводка от "дискавери" с ethernet-гнездом отличается.
В отличие от USB, разобраться полноценно с TCP/IP не имею возможности: мозгов и времени не хватает. DHCP нафиг не нужен: статический IP, прямое подключение к компьютеру-шлюзу (чтобы никто не мешал), в худшем случае - подключение через маршрутизатор. Вебсервер тоже не нужен (мне только сокет-сервер поднять).
Вот с рихтовкой под PHY могут косяки возникнуть: регистров там уйма, можно нужный и прозевать.
no subject
Date: 2013-12-12 08:13 am (UTC)Если надо "очень быстро прилепить IP", то проще поставить хрень типа W5200 или новую W5500. Стоит она столько же как PHY (фокус! фокус!) а код меньше раз в 20, чесслово - нету ни et ни lwip да и чип дешевле чем xx7. IMHO конечно. Занимает 1 порт SPI, 4 проводка.
no subject
Date: 2013-12-12 01:41 pm (UTC)Поднять ethernet хочу именно на этой макетке. Понятно, что SPI'ный модуль взять проще, да и городить всякую фигню не надо. Но здесь же в микроконтроллере сеть "зашита": хочется возможности использовать (а то USB тоже ведь можно при помощи внешней микросхемки через UART сделать).
no subject
Date: 2013-12-13 05:34 am (UTC)no subject
Date: 2013-12-13 08:29 am (UTC)А то что-то уж сильно достает это засилье проприетарщины во всех областях.
Я уже принципиально не принимаю чертежи в dwg формате (т.к. не в чем их открывать); документы высылаю людям в pdf и/или odt... Пусть привыкают.
no subject
Date: 2013-12-13 06:12 am (UTC)