UNIVERZITA PARDUBICE FAKULTA ELEKTROTECHNIKY A INFORMATIKY
´ RSK ˇ ´ PRACE ´ BAKALA A
2009
Martin Lauterbach
Univerzita Pardubice Fakulta elektrotechniky a informatiky
Ovladaˇ c pro USB videokameru pro operaˇ cn´ı syst´ em Linux
Autor pr´ ace: Vedouc´ı pr´ ace:
Martin Lauterbach Ing. Martin H´ ajek
Bakal´ aˇ rsk´ a pr´ ace 2009
Prohlaˇsuji: Tuto pr´aci jsem vypracoval samostatnˇe. Veˇsker´e liter´arn´ı prameny a informace, kter´e jsem v pr´aci vyuˇzil, jsou uvedeny v seznamu pouˇzit´e literatury. Byl jsem sezn´amen s t´ım, ˇze se na moji pr´aci vztahuj´ı pr´ava a povinnosti vypl´ yvaj´ıc´ı ze z´akona ˇc. 121/2000 Sb., autorsk´ y z´akon, zejm´ena se skuteˇcnost´ı, ˇze Univerzita Pardubice m´a pr´avo na uzavˇren´ı licenˇcn´ı smlouvy o uˇzit´ı t´eto pr´ace jako ˇskoln´ıho d´ıla podle § 60 odst. 1 autorsk´eho z´akona, a s t´ım, ˇze pokud dojde k uˇzit´ı t´eto pr´ace mnou nebo bude poskytnuta licence o uˇzit´ı jin´emu subjektu, je Univerzita Pardubice opr´avnˇena ode mne poˇzadovat pˇrimˇeˇren´ y pˇr´ıspˇevek na u ´hradu n´aklad˚ u, kter´e na vytvoˇren´ı d´ıla vynaloˇzila, a to podle okolnost´ı aˇz do jejich skuteˇcn´e v´ yˇse. Souhlas´ım s prezenˇcn´ım zpˇr´ıstupnˇen´ım sv´e pr´ace v Univerzitn´ı knihovnˇe.
V Kutn´e Hoˇre dne 13. srpna 2009
Martin Lauterbach
Podˇekov´an´ı: T´ımto bych r´ad podˇekoval vedouc´ımu pr´ace panu Ing. Martinu H´ajkovi za odborn´e veden´ı a rady v pr˚ ubˇehu pr´ace. D´ale bych chtˇel podˇekovat firmˇe Steinel Technik, kter´a iniciovala vytvoˇren´ı t´eto pr´ace a umoˇznila mi jej´ı zpracov´an´ı. Tak´e mi umoˇznila pod´ılet se na v´ yvoji cel´eho zaˇr´ızen´ı a z´ıskat tak cenn´e zkuˇsenosti.
Souhrn Tato bakal´aˇrsk´a pr´ace se zab´ yv´a tvorbou ovladaˇce pro USB videokameru pro operaˇcn´ı syst´em Linux. Popisuje moˇznosti operaˇcn´ıho syst´emu Linux a vyuˇzit´ı zpˇetn´eho inˇzen´ yrstv´ı pˇri tvorbˇe tohoto ovladaˇce.
Kl´ıˇ cov´ a slova ovladaˇc, Linux, USB, video, izochronn´ı pˇrenos, obrazov´ y senzor, V4L
Abstract This bachelor thesis describes the development of driver for USB video camera for the Linux operating system. Describes the possibility of using Linux and reverse engineering to create this driver.
Keywords driver, Linux, USB, video, isochronous transport, image sensor, V4L
Obsah ´ 1 Uvod
7
2 Operaˇ cn´ı syst´ em Linux
8
2.1
POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2
Licence GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3
Programov´an´ı j´adra . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.1
Uˇzivatelsk´ y reˇzim . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.2
Reˇzim j´adra . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.3
Syst´emov´a vol´an´ı . . . . . . . . . . . . . . . . . . . . . . . . .
10
3 Sbˇ ernice USB
11
3.1
Topologie sbˇernice . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.2
Rychlosti pˇrenosu dat . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3
Pˇrenosy pˇres USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.4
USB zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.4.1
Koncov´e body . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.4.2
Rozhran´ı a konfigurace . . . . . . . . . . . . . . . . . . . . . .
16
3.4.3
Tˇr´ıdy a podtˇr´ıdy USB zaˇr´ızen´ı . . . . . . . . . . . . . . . . . .
17
3.5
Rozboˇcovaˇce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.6
Tˇr´ıda USB Still Image Class . . . . . . . . . . . . . . . . . . . . . . .
18
3.7
Tˇr´ıda USB Video Class . . . . . . . . . . . . . . . . . . . . . . . . . .
19
4 Ovladaˇ ce v Linuxu
20
4.1
Znakov´a a blokov´a zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . .
20
4.2
Lad´ıc´ı zpr´avy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
1
9.1.3
Funkce sd config()
Dalˇs´ı d˚ uleˇzitou funkc´ı pro GSPCA je sd_config. Zde se nastavuj´ı parametry USB pˇrenosu. Pokud je bulk_size rovno nule pouˇzije se izochronn´ı pˇrenos. static int sd_config(struct gspca_dev *gspca_dev, const struct usb_device_id *id) { struct cam *cam; cam = &gspca_dev->cam; cam->epaddr = 0x81; cam->cam_mode = vga_mode; cam->nmodes = ARRAY_SIZE(vga_mode); cam->bulk_size = 0; cam->bulk_nurbs = 0; return 0; }
9.2
Pˇ rehr´ av´ an´ı videa z kamery
D´ıky rozhran´ı V4L se ovladaˇc urˇcit´ ym zp˚ usobem standardizoval a je moˇzn´e kameru pouˇz´ıvat nejen jedno´ uˇcelovˇe se softwarem na rozpozn´av´an´ı osob, ale lze ji pouˇz´ıt jako jakoukoliv jinou webkameru funguj´ıc´ı v Linuxu.
9.2.1
Program MPlayer
Program MPlayer [3] je filmov´ y pˇrehr´avaˇc pro Linux (spustiteln´ y na mnoha platform´ach a CPU architektur´ach). Pˇrehraje vˇetˇsinu multimedi´aln´ıch soubor˚ u s podporou mnoha nativn´ıch i bin´arn´ıch kodek˚ u. MPlayer podporuje velk´e mnoˇzstv´ı v´ ystupn´ıch audio a video rozhran´ı. Vyuˇz´ıvat je moˇzn´e X11 nebo lze pˇrehr´ava pouze s pomoc´ı frame bufferu.
56
9.2.2
Vyuˇ zit´ı MPlayeru pro webkameru
MPlayer lze pouˇz´ıt i pro pˇrehr´av´an´ı ze zaˇr´ızen´ı na zachyt´av´an´ı videa (s rozhran´ım v4l2). Nastaven´ı se provede volbou -tv s patˇriˇcn´ ymi parametry. Pˇrehr´at video z kamery je pak moˇzn´e pˇr´ıkazem mplayer -tv driver=v4l2:device=/dev/video tv://. Tohoto zp˚ usobu bylo pouˇzito pro otestov´an´ı dlouhodob´e stability v c´ılov´em zaˇr´ızen´ı neˇz bylo moˇzn´e vyuˇz´ıt uˇzivatelskou knihovnu s dalˇs´ım softwarem na zpracov´an´ı obrazu. Pro pˇrehr´av´an´ı pomoc´ı MPlayeru s t´ımto ovladaˇcem nen´ı potˇreba uˇzivatelsk´a knihovna.
57
Kapitola 10 Z´ avˇ er ´ Ukolem t´eto bakal´aˇrsk´e pr´ace bylo vytvoˇren´ı linuxov´eho ovladaˇce webkamery, kterou tvoˇr´ı v´ yvojov´ y kit od spoleˇcnosti Omnivision. Kamera zaloˇzen´a na kitu m´a b´ yt souˇc´ast´ı inteligentn´ıho senzoru pro rozpozn´avan´ı osob a mimo jin´e tˇreba pˇr´ıpadn´emu urˇcen´ı jejich poˇctu v m´ıstnosti. Ovladaˇc se podaˇrilo vytvoˇrit k dostaˇcuj´ıc´ı funkci zaˇr´ızen´ı, ale v nˇekter´ ych m´ıstech muselo doj´ıt ke kompromisu. Snaha byla o monochromatick´ y v´ ystupn´ı obraz bez komprese s hloubkou 10 bit˚ u, kter´eho by mˇelo j´ıt dos´ahnout podle specifikac´ı pouˇzit´ ych integrovan´ ych obvod˚ u. Nejvˇetˇs´ım probl´emem pˇri tvorbˇe ovladaˇce byl nedostatek informac´ı o kitu kamery Omnivision. Bylo nutn´e zkoumat velk´e mnoˇzstv´ı dat z´ıskan´ ych pod operaˇcn´ım syst´emem Windows a n´aslednˇe testovat r˚ uzn´e konfigurace v ovladaˇci v Linuxu. V´ ychoz´ım bodem pro ovladaˇc kamery Omnivision byl ovladaˇc pro nˇekter´e kamery ˇ s ˇcipem OV534, kter´ y jiˇz byl souˇca´st´ı j´adra. Cipy OV534 a OV538 jsou velmi podobn´e, ale nev´ yhodou byla konfigurace a programov´ y k´od uloˇzen´ y v pamˇeti EEPROM kamerov´eho kitu. T´ım bylo znaˇcnˇe zmˇenˇeno rozhran´ı kitu na sbˇernici USB. Nepodaˇrilo se u ´plnˇe dos´ahnout poˇzadovan´e konfigurace videokamery s ohledem na form´at video dat a je nutn´e spokojit se s form´atem YUYV o hloubce 8 bit˚ u. Tento form´at trochu postr´ad´a smysl, kdyˇz je kamera osazena monochromatick´ ym senzorem, a je vhodn´ y sp´ıˇs pˇri pouˇzit´ı barevn´eho senzoru. V´ ysledn´ y obraz i tak plnˇe vyhovuje a je moˇzn´e ho pouˇz´ıt pro dalˇs´ı zpracov´an´ı. 58
D´ıky tomuto form´atu je pˇren´aˇseno dvojn´asobn´e mnoˇzstv´ı dat na jeden sn´ımek, ale to nezp˚ usobuje pot´ıˇze. Po pˇr´ıjet´ı sn´ımku je jen nutn´e ho pˇretransformovat na monochromatick´ y. Vyt´ıˇzen´ı syst´emu touto transformac´ı, kter´a zde spoˇc´ıv´a ve vynech´an´ı kaˇzd´eho druh´eho bajtu obrazov´e informace, je zanedbateln´e. Jako prvn´ı bylo vytvoˇreno rozhran´ı ovladaˇce podle vlastn´ıho n´avrhu. Tento postup vypadal snadnˇejˇs´ı a nevyˇzadoval znalost syt´emu v4l. Druhou v´ yhodou v tomto pˇr´ıpadˇe bylo to, ˇze byl ze zaˇca´tku nezn´am´ y form´at obrazu, kter´ y se podaˇrilo z kamery z´ıskat. Testov´an´ım r˚ uzn´ ych zp˚ usob˚ u zobrazen´ı z´ıskan´ ych obrazov´ ych dat byl urˇcen jejich form´at (YUYV). Pˇri dalˇs´ım testov´an´ı ovladaˇce na c´ılov´em zaˇr´ızen´ı, kde nebyl software MATLAB, pouˇzit´ y v prvn´ım pˇr´ıpadˇe k zobrazen´ı dat, byla snaha ovladaˇc v´ıce standardizovat a byl upraven na rozhran´ı V4L2. T´ımto krokem se vylepˇsilo i dynamick´e vytvoˇren´ı souboru zaˇr´ızen´ı pˇri pˇripojen´ı kamery za bˇehu syst´emu a bylo moˇzn´e vyuˇz´ıt k pˇrehr´av´an´ı videa pˇri testov´an´ı program MPlayer. V koneˇcn´e f´azi, kdyˇz byl cel´ y inteligentn´ı senzor sestaven, se objevily velk´e probl´emy se stabilitou syst´emu. Bud’ doch´azelo k probl´em˚ um pˇri ˇcten´ı obrazu nebo cel´ y syst´em zatuhl. Prvn´ım probl´emem se uk´azala vzr˚ ustaj´ıc´ı teplota syst´emu. Vysok´e teplotˇe se zamezilo namontov´an´ım vˇetr´aˇcku do zaˇr´ızen´ı. Probl´emy se stabilitou setrvaly a v podezˇren´ı z nestability byl ovladaˇc. Pˇri testov´an´ı doch´azelo v syst´emu k odpojen´ı a pˇripojen´ı USB zaˇr´ızen´ı kamery, pˇrestoˇze byla st´ale fyzicky pˇripojena. V samotn´em ovladaˇci se probl´em nepodaˇrilo odstranit a vypadalo, ˇze m˚ uˇze b´ yt nˇekde na u ´rovni ovladaˇce usb_core nebo na u ´rovni hardwaru. Pˇri kompletaci zaˇr´ızen´ı byl nahrazen klasick´ y USB kabel typu A-B, kter´ ym se kamera pˇripojovala, kr´atk´ ym p´arem kroucen´ ych vodiˇc˚ u a dvˇema vodiˇci pro nap´ajen´ı. Vˇsechny tyto vodiˇce byly na obou stran´ach pˇrip´ajeny a konektory na zaˇr´ızen´ıch nevyuˇzity. Ve snaze odstranit probl´emy se stabilitou, byly nahrazeny uveden´e vodiˇce zpˇet USB kabelem A-B zapojen´ ym do konektor˚ u. V tomto zapojen´ı bylo schopno zaˇr´ızen´ı pracovat des´ıtky hodin bezchybnˇe. Probl´em mohl b´ yt zp˚ usoben nevyhovuj´ıc´ı impedanc´ı nebo chybˇej´ıc´ım st´ınˇen´ım pouˇzit´ ych vodiˇc˚ u. Pˇripojen´ı kamery k z´akladn´ımu modulu je pˇredmˇetem dalˇs´ıch u ´prav a testov´an´ı.
59
Literatura [1] GNU General Public License, version 2. [online, cit. 1.8.2009]. URL http://www.gnu.org/licenses/gpl-2.0.html [2] HHD Software, USB Monitor. [program, cit. 5.8.2009]. URL http://www.hhdsoftware.com/Products/home/usb-monitor.html [3] MPlayer manual page. [online, cit. 18.7.2009]. URL http://www.mplayerhq.hu/DOCS/man/cs/mplayer.1.html [4] OmniVision Serial Camera Control Bus, Functional Specification. [online, cit. 5.8.2009]. URL http://www.ovt.com/products/sccbspec_an_2_1.pdf [5] OV538 Advenced Information Datasheet. [online, cit. 28.7.2009]. URL http://www.yuanxinfeng.com/upload/OV538-B88.pdf [6] OV7720 Product Brief. [online, cit. 28.7.2009]. URL http://www.ovt.com/uploads/parts/OV7720_PB%20(1.11)_web.pdf [7] Overview of the V4L2 driver framework. [zdrojov´e k´ody j´adra Linuxu, soubor Documentation/video4linux/v4l2-framework.txt]. [8] Still Image Capture Device Definition 1.0. [online, cit. 5.8.2009]. URL
http://www.usb.org/developers/devclass_docs/usb_still_img10.
zip [9] Universal Serial Bus Specification Revision 2.0. [online,cit.28.7.2009]. URL http://www.usb.org/developers/docs/usb_20_052709.zip 60
[10] USB 2.0 - d´ıl 2. [online, cit. 20.7.2009]. URL http://hw.cz/Rozhrani/ART1244-USB-2.0---dil-2.html [11] USB Device Class Definition for Video Devices, Revision 1.1. [online, cit. 5.8.2009]. URL
http://www.usb.org/developers/devclass_docs/USB_Video_Class_
1_1.zip [12] Corbet, J.: Linux Device Drivers. O’Reilly Media, 2005, ISBN 0-596-00590-3. URL http://lwn.net/Kernel/LDD3/ [13] Jel´ınek, L.: J´adro syst´emu Linux. Praha: Computer Press, 2008, ISBN 978-80251-2084-2. [14] Richard Stones, N. M.: Beginning Linux Programming, Second Edition. United States: Wrox Press Ltd., 2001, ISBN 1-861002-97-1. [15] Schimek, M.: Video for Linux Two API Specification. [online, cit. 25.6.2009]. URL http://v4l2spec.bytesex.org/spec-single/v4l2.html [16] Tiˇsnovsk´ y, P.: Univers´aln´ı s´eriov´a sbˇernice (USB). [online, cit. 1.8.2009]. URL http://www.root.cz/clanky/universalni-seriova-sbernice-usb/
61
Obsah CD Obsah pˇriloˇzen´eho CD je n´asleduj´ıc´ı: • soubor bp.pdf - technick´a zpr´ava ve form´atu PDF • adres´aˇr tex - zdrojov´e soubory technick´e zpr´avy • adres´aˇr driver1 - zdrojov´e soubory ovladaˇce s vlastn´ım rozhran´ım • adres´aˇr driver2 - zdrojov´e soubory ovladaˇce s rozhran´ım V4L2 • adres´aˇr capture - zachycen´a komunikace s kamerou ve Windows
62