Nerozpoznane zarizeni. (USB kamera)

Dan Lukes dan at obluda.cz
Tue May 12 12:05:16 CEST 2020


On 12.5.2020 11:05, Jozef Drahovsky (FreeBSD cz) wrote:
> Vyzera to tak, ze dnes budem donuteny jeden ovladac napisat.
> Nie na priamo pripojene zariadenie, ale na zariadenie pripojene do USB.

Na te urovni, pod kterou jsem nezalezl pri popisovani PCI nezalezl, se 
da rict, ze enumerace USB sbernice vypada velice podobne.

Jen je na kazde sbernici pouze jedno zarizeni a misto bridge se pouziva 
switch (sitari ovsem vedi, ze mezi temito dvema terminy je rozdil spis 
filozoficky nez realny funkcni).

> System ju ako USB zariadenie rozpozna, ale to je vsetko.

To je ekvivalent toho, kdyz na PCI sbernici system vi o karte. V tomhle 
je to opravdu stejny - system si ze zarizeni precte identifikacni data 
(coz i u tebe nejspis jeste probehne) a pak dola _probe funkci ovladacu. 
Pokud se alespon jeden prizna ke schopnosti ovladat zarizeni (coz u tebe 
patrne nenastane) tak system zavola funkci _attach(). Dal uz to je plne 
v rezii kodu ovladace.

> Vo windovse viem debagovať komunikaciu s USB hubom,
> respektive aj s konkretnym zariadenim a vidim co si sw a kamera posielaju.

To je podminka nutna, k uspesnemu reverznimu inzenyrstvi nikoliv vsak 
dostatecna. jeste musis byt schopen pochopit co videna vymena dat znamena.

Prikladmo - podari se ti uhadnout, ze po zaslani nejake sekvence prikazu 
ze zarizeni zacalo lezt neco, co pravdepodobne jsou nasnimana video 
data. ta al emohou byt v prakticky libovolnem formatu, vcetne zcela 
proprietarniho, odvozeneho napriklad od technologickeho provedeni 
pouziteho CCD snimace. To nejakeho standardniho tvaru ta data muze 
postprocessingem prevadet az softwarovy ovladac. Nemusi byt vubec 
trivialni zjistit jak predavana data chapat.

Obdobne netrivialni vztah muze platit i pro konfiguracni data, ktera 
ovladac zariznei posila. To, ze v konfiguracnim dialogu ovladace zvysis 
jas o jednicku (a na nic jinyho nesahnes) vubec enznamena, ze zarizeni 
od ovladace dostane nejaka konfiguracni data, v nichz se jen v jednom 
miste bude hodnota o jednotku lisit od tech minulych.

Bylo by pro tebe ohromnou pomoci, kdybys pro dane zarizeni dokazal najit 
ovladac ve zdrojovyvh kodech pro jakykoliv (i zcel ajiny) operacni 
system. Rozhrani "nahoru" k systemu bude jine, ale "dolu" bude stejne 
jake potrebujes a usetris tim strasnou spoustu casu.

Pokud nic takoveho nenajdes, muze se stat, ze budes muset vzit ovladac 
pro Windows, disasssemblovat ho a tim potrebne "zdrojove kody" ziskat.

Nekdy se muze stat, ze nenajdes ovladac primo pro to co mas, ale vyrobcu 
hardwarovych chipu neni zas tak moc - takze i zarizeni se zcela ruznou 
identifikaci mohou byt postavene okolo stejneho chipu. A i kdyz jeho 
chovani muze zasadne ovlivnovat firmware, kterym vyrobce dany choip 
ozivil, neni nijak vyjimecne, ze takovy firmware cyvhazi z referencniho 
navrhu vyrobce hardware a tedy jsou si i nezavisle implementace vice ci 
mene podobne.

Pokdu bys to musel rozlejzat uplne kompletne sam, pocitej s tim, ze to 
muze byt casove opravdu extrenme narocnej projekt.

> Vie ma niekto nasmerovat na nejaky zmyslupny priklad pisania ovladacov / 
> drajvrov pre uzivatelske zariadenia pripojene cez USB.

Jakykoliv existujici ovladac USB - tedy neco z toho co je v 
/usr/src/sys/dev/usb/...

Treba /usr/src/sys/dev/usb/serial/u3g.c

> Ideálne funkcný priklad, ktory by som postupne modifikoval.

FreeBSD nema nativni podporu pro video vstup (jedno z jakeho zdroje). 
Neco by se mozna podarilo najit v portech.

Dan




More information about the Users-l mailing list