Eșantionul SpbTestTool are două scopuri. În primul rând, demonstrează cum se deschide un mâner către controlerul SPB, se folosește interfața SPB de la un driver KMDF și se utilizează întreruperi la nivel pasiv GPIO. În al doilea rând, implementează un set de comenzi pentru comunicarea cu un dispozitiv periferic pentru a ajuta la depanare.
Acest eșantion este incomplet ca driver și demonstrează doar utilizarea interfeței de solicitare I/O SPB și a întreruperilor GPIO. Nu este destinat utilizării într-un mediu de producție.
Pentru a instala driverul periferic SpbTestTool, urmați acești pași:
Asigurați-vă că driverul construiește fără erori.
Copiați fișierele SYS și INF într-un folder separat.
Rulați Devcon.exe. Puteți găsi acest program în folderul tools \ devcon unde ați instalat WDK. Tastați următoarea comandă în fereastra de comandă:
actualizare devcon.exe SpbTestTool.inf ACPI \
Pentru a lansa aplicația SpbTestTool, urmați acești pași:
Navigați la directorul care conține SpbTestTool.exe.
Tastați următoarea comandă în fereastra de comandă:
În mod implicit, aplicația SpbTestTool folosește driverul eșantion SpbTestTool. Cu toate acestea, în schimb poate fi utilizat un driver de periferic alternativ. Pentru a specifica un driver alternativ, utilizați următorul format pentru linia de comandă:
Un script de intrare poate fi utilizat în locul unui prompt interactiv. Formatul scriptului necesită o comandă pe linie. Pentru a rula scriptul, utilizați următorul format pentru linia de comandă din fereastra de comandă:
Aplicația SpbTestTool se bucură la nesfârșit așteptând una dintre următoarele comenzi. Comenzile sunt traduse în cererea de I/O SPB corespunzătoare fără urmărirea stării în driver. Starea transferului, conținutul bufferului și codurile de eroare sunt returnate după cum este necesar. Tastați ajutor în orice moment pentru a afișa această listă de comenzi. Apăsați Ctrl-C în orice moment pentru a anula comanda curentă și a ieși din aplicație.
deschis | Deschideți mânerul către controlerul SPB. |
închide | Închideți mânerul controlerului SPB. |
Lacăt | Blocați autobuzul pentru acces exclusiv. |
debloca | Deblocați autobuzul. |
lockconn | Blocați conexiunea partajată pentru acces exclusiv. Această comandă este utilizată pentru a sincroniza transferurile de autobuz de către driverul de eșantion cu accesele în regiunea op prin firmware-ul ACPI. |
unlockconn | Deblocați conexiunea partajată. |
scrie <> | Scrieți o matrice de octeți pe dispozitivul periferic. Exemplu:> scrie |
citit | Citiți de pe dispozitivul periferic. Exemplu:> citiți 5 |
writeread <> | Scrieți atomic o matrice de octeți pe dispozitivul periferic și citiți înapoi. Exemplu:> writeread 5 |
semnal | Informați driverul SpbTestTool că întreruperea a fost gestionată. |
Ajutor | Afișați lista de comenzi acceptate. |
Ctrl-C | Apăsați Ctrl-C în orice moment pentru a anula comanda restantă și a ieși din aplicație. |
Următoarele sunt funcțiile relevante din driverul periferic SpbTestTool pentru utilizarea interfeței SPB de la un driver KMDF.
Următoarele sunt funcțiile relevante din driverul periferic SpbTestTool pentru gestionarea întreruperilor la nivel pasiv GPIO de la un driver KMDF.
OnPrepareHardware | Trece peste resursele de pornire ale șoferului. Dacă „ConnectInterrupt” este setat la 1 în registru, driverul conectează prima resursă de întrerupere găsită și înregistrează o rutină de servicii de întrerupere. |
OnInterruptIsr | Rutina de servicii de întrerupere, care a fost configurată pentru a rula la nivel pasiv. Acest lucru permite șoferului să recunoască sau să oprească întreruperea utilizând interfața SPB, care nu poate fi apelată la DIRQL. De obicei, un driver va șterge întreruperea hardware și va salva orice informație volatilă în ISR-ul său, iar apoi va pune la coadă un element de lucru pentru a continua procesarea. Driverul eșantionului nostru notifică în schimb aplicația SpbTestTool că a avut loc o întrerupere și îl cheamă pe KeWaitForSingleObject să aștepte până când este întreruptă înainte de a reveni. Un șofer „adevărat” nu ar trebui să se oprească niciodată în ISR astfel. |
SpbPeripheralWaitOnInterrupt | Apelat pentru a suspenda o cerere WaitOnInterrupt în driver, care va fi finalizată la următoarea întrerupere. |
SpbPeripheralInterruptNotify | Finalizează o solicitare WaitOnInterrupt remarcabilă pentru a informa aplicația SpbTestTool că a avut loc o întrerupere. |
SpbPeripheralSignalInterrupt | Notifică rutina serviciului de întrerupere că întreruperea a fost gestionată și ISR ar trebui să revină. |
Următoarele fișiere sursă se află în folderul \ SpbTestTool \ sys și sunt utilizate pentru a construi fișierele SpbTestTool.sys și SpbTestTool.inf.
driver.h, driver.cpp | Evenimente pe obiectul dispozitivului și citirea, scrierea și IOCTL-urile din aplicația SpbTestTool. Implementează rutina de service a întreruperii șoferului. |
intern.h | Comune include și tipuri |
makefile | Redirecționează către fișierul de make real care este partajat de toate componentele WDK. |
periferic.h, periferic.cpp | Reflectarea IOCTL-urilor SpbTestTool către API-ul SPB, inclusiv deschiderea controlerului prin hub-ul de resurse și utilizarea blocării, deblocării, citirii, scrierii și secvenței. |
resursă.rc | Fișier descriptor de resurse utilizat pentru versionare |
surse | Listează fișierele sursă și opțiunile de construire. |
surse.dep | Definește dependențe de construire. |
spbtesttool.asl | Exemplu de fișier ASL pentru un nod de dispozitiv periferic. Declară resursele de întrerupere I2C și GPIO. Rețineți că fiecare macrocomandă specifică o cale ACPI pentru a descrie dependențele directe. |
spbtesttool.h | IOCTL-uri private SpbTestTool pentru utilizare între aplicație și driverul periferic și numele căilor driverului. |
spbtesttool.inx | Descrie instalarea driverului. Procesul de construire îl transformă într-un INF. |
urmă.h | Configurează urmărirea WPP. |
Următoarele fișiere sursă se află în folderul \ SpbTestTool \ exe și sunt utilizate pentru a construi fișierul SpbTestTool.exe.
command.h, command.cpp | Clase care reprezintă fiecare dintre comenzile SpbTestTool. Pentru lista de comenzi, consultați Executarea comenzilor. |
intern.h | Definiții comune includ și funcții |
main.cpp | Punctul de intrare al aplicației, analiza de intrare și bucla principală de execuție. De asemenea, conține firul de notificare de întrerupere. |
makefile | Redirecționează către fișierul de make real care este partajat de toate componentele WDK. |
surse | Listează fișierele sursă și opțiunile de construire. |
util.cpp | Funcții de ajutor |
- Maestrul curăță un truc la nesiguranțele tale de Juli Kidd Medium
- Planul de masă al ciocanului și a daltei Maestrului Ce trebuie să știți
- Care este cea mai bună și mai sănătoasă hrană pentru câini pentru Mastiff Mastiff Master Master
- Pastile pentru slăbit - Pastillas Diet Master
- Cele 4 elemente ale energiei fizice și cum să le stăpânești