Dobrý den,
omlouvám se za velkou prodlevu v odpovědi. Ale s Windows se osobně potkávám opravdu strašně málo a na fyzickém stroji jen když někomu přímo nějaký problém pomáhám řešit, např ve firmě, pro kterou zajišťujeme vývoj kompletních laboratorních přístrojů a to jen tehdy, pokud nám vše chodí při připojení pod Linuxem a jsou problémy specifické pro Win. Přitom shazovat takový stroj s připojeným zařízením za více než 1M kč s rizikem ztráty dat je nepřípustné. I Windows na pro účely kontroly některých projektů ve škole Virtuálu mám k dispozici jen na jednom školním počítači, kde Win7 64 instalovalo do QEMU naše IT.
Report o padání od našeho partnera se mi v nějaké solidní podobě nepodařilo získat. Je to pro něj podprahová věc, vyřešil to tím, že požaduje ACM bezdrátové seriáky v režimu single channel. Ale nespíš to byly Win7.
Konečně jsem našel čas a získal správně podepsaný INF a varianty Firmware, abych to otestoval na tom školním virtuálu.
Inf k VID:PID, které byly avizované jako Winows standardně podporované se automaticky v MS službách nevyhledal. Takže jsem nakonec device přeflashoval zpět na naše VID:PID v režimu single. Nainstaloval se a fungoval.
Zkusil jsem předělat firmware se stejnou identifikací na multi a připojit ho k již nainstalované-enumerované instanci driveru.
Souhlasím, že to je drsný test, nedivil bych se chybovým hláškám a nefunkčnosti zařízení. Ale přišel okamžitě ukázkový pád.
win7-64-acm-multi-after-single.png. To jednoznačně svědčí o špatně napsaném driveru, který při specifické chybě ve čtených datech (záměna deskriptoru) ze zařízení shodí systém.
Vrátil jsem single firmware a systém běžel. Provedl jsem kompletní odinstalování driveru vřetně jeho vymazání z /Window/inf/oemX{.inf|.pnf}. Přešel na multi firmware.
Windows se po restartu korektně pustily, inf nenašly a vytvořili zařízení bez obladače s popisem že se jedná o ACM. Při požadavku o update ovladače došlo okamžitě k pádu.
win7-64-acm-multi-fresh-install.png
Souhlasím, že inf pro multi v pořádku není. Pro single však odpovídá doporučení od MS. Opět upozorňuji, žádný kernelový kód, který by byl od někoho jiného než MS, ve hře nebyl.
Ověřil jsem tedy, že MS má chybu v ovladači. Neověřil jsem, že lze takto napadnout počítač bez vědomé instalace infu, protože na VID:PID, co by Windows měly umět, se mi nepodařilo vyvolat automaticky instalaci. Opravdu překompilovávat firmware na všechny možné VID:PID jsem nezkoušel.Pokud ale existuje nějaký USB ACM, který skutečně MS podporuje, tak jsem přesvědčený, že multi firmware bude chodit jako spolehlivý vypínač Windows. I pokud MS vůbec žádný USB ACM nepodporuje, tak pokud si uživatel jakýkoliv takový modem pořídí a s ním dostane v MS doporučeném stylu vytvořený INF, tak lze takový počítač okamžitě shodit vložením zařízení se shodnou identifikací, ale mírně změněnými deskriptory.
Jinak USB ACM serial class je opravdu velmi jednoduché rozhraní přímo definované v USB specifikaci. To je, pokud nemají být aktivovaná nějaká proprietární rozšíření výrobce daného zařízení, tak opravdu stačí enumerace na CLASS a INFy k jednotlivým VID:PID jsou zcela zbytečné. Na Linuxu to takto chodí běžně a spolehlivě. Na Windows by to vedlo díky mizerné kvalitě ovladačů k nepěkným překvapení a je tedy nakonec dobře, že je použití jakýchkoliv zařízení komplikované a musí to vždy pro každou verzi výrobce testovat a pevně dávat VID:PID. Ale overhead na straně tvůrců zařízení je to extrémně velký. Kdyby věnovali jediné procento úsilí nutného pro podporu MS produktů podpoře Linuxu, tak by obecná podpora všech zařízení byla na Linuxu nádherná. A i přesto, že podpora výrobců je ještě menší, tak na tom je dnes GNU/Linux systém s bezproblémovostí podpory mnoha zařízení lépe.
Bohužel Vaší reálnou identitu neznám, abych mohl poslat notifikaci e-mailem, tak třeba se zde časem objevíte.
S pozdravem,
Pavel Píša
e-mail k dohledání na mojí webové stránce
http://cmp.felk.cvut.cz/~pisa/