Metody připojování periferií

Podobné dokumenty
Metody připojování periferií

Metody připojování periferií

Metody připojování periferií

Metody připojování periferií BI-MPP Přednáška 1

5. Čtení/zápis sektorů z/do USB paměťového média I

Metody připojování periferií

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

11. Implementace ovladače ve Windows

Metody připojování periferií

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Metody připojování periferií BI-MPP Přednáška 2

Metody připojování periferií

Komponenty v.net. Obsah přednášky

Procesy a vlákna (Processes and Threads)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Generické programování

Distribuované systémy a počítačové sítě

Programování v C++ 2, 4. cvičení

UNIVERZITA PARDUBICE FAKULTA ELEKTROTECHNIKY A INFORMATIKY Martin Lauterbach

Universal Serial Bus. Téma 12: USB. Komunikační principy Enumerace Standardní třídy zařízení

Mělká a hluboká kopie

udev a kamarádi... Středisko UN*Xových technologií

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Rozhraní USB. Rozhraní USB. Specifikace USB. Doplnění (upřesnění) 1.0. Rychlosti Low Speed (1.5 Mb/sec) a Full Speed (12 Mb/sec).

Uživatelská příručka

8 Třídy, objekty, metody, předávání argumentů metod

Více o konstruktorech a destruktorech

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základy programování (IZP)

Softwarové komponenty a Internet

Řešení pro správu klientů a mobilní tisk

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

ROZVOJ ICT A PDA ZAŘÍZENÍ THE DEVELOPMENT OF ICT AND PDA DEVICES Jiří Vaněk

Jazyk C++ I. Šablony

Spojová implementace lineárních datových struktur

PREPROCESOR POKRAČOVÁNÍ

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Základy programování (IZP)

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Externí zařízení. Uživatelská příručka

Vestavné systémy. BI-VES Přednáška 9. Ing. Miroslav Skrbek, Ph.D.

Základní informace. Operační systém (OS)

Programování v C++ 1, 1. cvičení

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Opakování programování

konec šedesátých let vyvinut ze systému Multics původní účel systém pro zpracování textů autoři: Ken Thompson a Denis Ritchie systém pojmnoval Brian

Úvod do programovacích jazyků (Java)

USB. Universal Serial Bus. revize 2.0 z 27.dubna 200

Externí zařízení. Uživatelská příručka

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Principy operačních systémů. Lekce 2: Správa paměti

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

Informační Systém pro Psychiatrii HIPPO

Jazyk C# (seminář 6)

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Sériové komunikace KIV/PD Přenos dat Martin Šimek

Universal Serial Bus (USB)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

5. Dynamické programování

Virtuální přístroje. Matlab a Instrument Control Toolbox. J.Tomek, A.Platil

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Soft-PLC systémy ICP DAS se softwarem ISaGRAF

TMU. USB teploměr. teploměr s rozhraním USB. měření teplot od -55 C do +125 C. 26. května 2006 w w w. p a p o u c h. c o m

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

1. Programování proti rozhraní

Operační systém. Mgr. Renáta Rellová. Výukový materiál zpracován v rámci projektu EU peníze školám

Jazyk C++ I. Šablony 2

Číslicové měřicí systémy. Téma 4

Abstraktní třídy, polymorfní struktury

Abstraktní datové typy: zásobník

PINEL plus. Informace, doporučení a nutná nastavení pro zajištění správné funkce v operačních systémech MS Windows a Linux

Fingerprint Verification Control

PB161 Programování v jazyce C++ Přednáška 10

Programování II. Objektová dekompozice Třída jako objekt 2018/19

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

TECHNICKÁ SPECIFIKACE VEŘEJNÉ ZAKÁZKY

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

IRAE 07/08 Přednáška č. 7. Začátek (head)

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Základní datové struktury

CA21 PŘÍRUČKA UŽIVATELE

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Vestavné systémy BI-VES Přednáška 1

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Konstruktory a destruktory

Informační Systém PINEL plus

IUJCE 07/08 Přednáška č. 1

Jazyk C++ I. Šablony 3

Radek Krej í. NETCONF a YANG NETCONF. 29. listopadu 2014 Praha, IT 14.2

IUJCE 07/08 Přednáška č. 6

Jazyk C++ II. STL knihovna kontejnery část 1

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

konstruktory a destruktory (o)

ÚVOD DO OPERAČNÍCH SYSTÉMŮ. Vývoj SW aplikací. Unix, POSIX, WinAPI, programování komunikace s periferními zařízeními, ovladače zařízení

Struktura programu v době běhu

Prostředí pro výuku vývoje PCI ovladačů do operačního systému GNU/Linux

Transkript:

Metody připojování periferií BI-MPP Přednáška 10 Ing. Miroslav Skrbek, Ph.D. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze Miroslav Skrbek 2010,2011 ZS2011/12 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Agenda Ovladače USB zařízení v Linuxu Windows Driver Model BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 2

Literatura Gook, M.: Hardwarová rozhraní Průvodce programátora. Computer Press, Brno 2006. ISBN 80-251-1019-2 Corbet, J., Rubini A., Kroah-Hartman, G.: Linux Device Drivers. Third Edition. O Reilly Media 2005. ISBN: 0-596-00590-3. WDK Documentation, Windows Drivers Kits, Microsoft Corporation, 2009. BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 3

URB USB request block Datová struktura reprezentující USB přenosy Používá se pro posílání nebo přijímání dat z daného endpointu Zajišťuje asynchronní přenosy Obsahuje Číslo endpointu Délku přenosu Adresu bufferu (pro příjem nebo odeslání dat) Stav přenosu Adresu dokončovací rutiny, která se volá po ukončení přenosu Vytváří se a ruší struct urb *usb_alloc_urb(int iso_packets, int mem_flags); void usb_free_urb(struct urb *urb); BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 4

Příprava URB Pro vyplnění URB slouží funkce Interrupt transfers void usb_fill_int_urb(struct urb *urb, struct usb_device *dev,unsigned int pipe, void* transfer_buffer, int buffer_length, usb_complete_t complete, void *context, int interval); Bulk transfers void usb_fill_bulk_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void* transfer_buffer, int buffer_length, usb_complete_t complete, void *context); Control transfers void usb_fill_control_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, unsigned char *setup_packet, void *transfer_buffer, int buffer_length BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 5

Odeslání URB ke zpracování int usb_submit_urb(struct urb *urb, int mem_flags); Parametr urb je ukazatel na URB Parametr mem_flags se nastavuje podle kontextu, ve kterém funkce je použita GP_ATOMIC GP_NOIO GP_KERNEL Zpracování URB lze zastavit funkcemi int usb_kill_urb(struct urb *urb); int usb_unlink_urb(struct urb *urb); (nečeká na dokončení) BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 6

Informace o podporovaných zařízeních driverem static struct usb_device_id mydev_table [ ] = { { USB_DEVICE(USB_MYDEV_VENDOR_ID, USB_MYDEV_PRODUCT_ID) }, { } /* ukončující položka */ }; MODULE_DEVICE_TABLE (usb, mydev_table); Pokud driver podporuje více zařízení s různými VID a PID, pak má tabulka více položek. Tabulka se používá pro vyhledání driveru pro dané zařízení. BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 7

Registrace USB driveru static struct usb_driver my_driver = {.owner = THIS_MODULE,.name = myusbdev",.id_table = mydev_table,.probe = mydev_probe,.disconnect = mydev_disconnect, }; Registrace driveru uvnitř inicializační funkce modulu result = usb_register(&mydev_driver); if (result) err("usb_register failed. Error number %d", result); BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 8

Probe Funkce probe slouží k ověření zařízení z hlediska schopnosti driveru ovládat toto zařízení Vytváří vnitřní lokální struktury pro konkrétní (instanci) zařízení a registruje ho v jádře Vrací 1 pokud je zařízení úspěšně registrováno Registrace USB zařízení v Probe retval = usb_register_dev(interface, &mydev_class); if (retval) { err("not able to get a minor for this device."); usb_set_intfdata(interface, NULL); goto error; } BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 9

Přenosy bez URB int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,void *data, int len, int *actual_length, int timeout); int usb_control_msg(struct usb_device *dev, unsigned int pipe, u8 request, u8 requesttype, u16 value, u16 index, void *data, u16 size, int timeout); Zjednodušují psaní driveru, pro realizaci přenosu stačí jedno volání funkce usb_bulk_msg je pro blokové přenosy a usb_control_msg je pro řídící přenosy BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 10

Windows Driver Model Model ovladačů pro OS Windows, který podporuje Plug&Play zařízení K dispozici je od Windows 98 Vývoj ovladačů probíhá v jazyce C (včetně knihovní podpory) Pro vývoj ovladačů je k dispozici Windows Driver Kit (WDK) BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 11

Rozdělení ovladačů dle kontextu Kernel Drivers Jsou ovladači v kontextu jádra Mohou přistupovat přímo na hardware a využívat přímého přístupu do paměti Složitější vývoj a ne tak komfortní ladění User Mode Drivers Jsou ovlači v uživatelském kontextu Mají formu DLL knihovny Nacházejí v horních patrech hierarchie ovladačů pro dané zařízení Tento typ driverů využívají např. USB zařízení BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 12

Rozdělení ovladačů dle funkce Sběrnicové ovladače (Bus Drivers) Obsluhujířadiče sběrnic, sběrnicové adaptéry nebo můstky Příkladem jsou sběrnicové ovladače pro PCI, SCSI a USB Najdeme je na nejnižší úrovni v hierarchii Typicky zajišťují enumeraci (identifikaci a evidenci) zařízení připojených na sběrnici a konfiguraci těchto zařízení Funkční ovladače (Function Drivers) Ovladač konkrétního typu zařízení (myš, tablet, ) Obvykle poskytován výrobcem zařízení Filtry (Filter Drivers) "průchozí" ovladače vkládané mezi ovladače Používají se pro logovací nebo bezpečnostní funkce BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 13

Hierarchie ovladačů Uživatelský kontext Aplikace Kontext jádra Horní třídní filtr Dolní filtr zařízení Funkční ovladač Horní filtr zařízení Funkční ovladač Filtr sběrnicového ovladače Sběrnicový ovladač Sběrnicový ovladač Dolní filtr třídy zařízení Hardware BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 14

Vývoj ovladačů Windows Driver Model Původní, k dispozici od Windows 98 Knihovní podpora pouze základních funkcionalit Typické funkcionality ovladače je nutno implementovat v každém ovladači znovu a znovu Náročné na vývoj a znalosti Kernel-Mode Driver Framework (KMDF) Knihovna, která poskytuje sadu funkcí na vyšší úrovni, které zjednodušují vývoj ovladačů Typické funkcionality jsou implementovány v knihovně Knihovna využívá objektový přístup Implementace v jazyce C Snažší vývoj, zvláště pro začátečníky BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 15

Objektový přístup (princip) Jedná se o objektový přístup ve smyslu objektového programování. Implementován v jazyce C. Instanční proměnné jsou ve strukturách typedef struct { int pocet; void (*clean)(pmy_class obj); } MY_CLASS, *PMY_CLASS; Nová instance třídy Metody void set(pmy_class obj, int value) { obj->pocet = value; } Destruktor dealokuje instanční proměnné typu reference na objekt PMY_CLASS my_class_create(pmy_class obj, int value, void (*clean)(pmy_class obj)()) { PMY_CLASS obj = (PMY_CLASS)calloc(1, sizeof(my_class)); return obj; } Zrušení instance třídy void my_class_destroy(pmy_class *obj) { (*obj)->clean(*obj); // volání callbacku clean pro výmaz referencí free(*obj); *obj = NULL; } BI-MPP Přednáška 10 Miroslav Skrbek 2010,2011 16