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