?

Log in

No account? Create an account
  Journal   Friends   Calendar   User Info   Memories
 

Электронный миссионер

11th December, 2013. 10:08 am. Особенности национального написания драйверов.

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

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



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

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

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

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

Read 30 Notes -Make Notes

Back A Day - Forward A Day