Třídy PnP
Snad jsem zvolil kategorii dobře...
Zajímalo by mě, kde na netu najdu popsanou specifikaci PnP tříd (příklad *PNP0000 - programovatelný řadič přerušení, co to dělá, jak se to konfiguruje, jaký nastavení to používá, co to žere, kde to spí...)
Mrkvosoftí detekce hardwaru mě totiž nanejvýš irituje tím, jak pro každou komponentu zobrazí "systém našel nový hardware - Neznámé zařízení - a hledá k němu ovládače". Když jsem si projížděl INF soubory, tak drtivá většina zařízení, který mě zajímají, má společnou konfiguraci, používá společný ovládač a liší se pouze VID, PID a jménem, který mu Mrkvosoft přiřadí.
Nebo, pokud by někdo věděl, jak udělat "obecnou konfiguraci PC", která by používala "generické ovládače" (něco se mi už povedlo zavést do klíče HKLM\Enum\Root), byl bych mu velmi zauzlován
Pavle? Netušíš?
Za případné rady velmi velmi děkuji.
EDIT: Jo, Google znám a používám, ale vůbec nemám tušení, co do něj zadat. Pár věcí jsem zkoušel, ale PNP tranzistory nejsou to, co bych hledal
sem tam narval
mozna pomuze
pres tohle
http://www.microsoft.com/whdc/driver/install/defaul t.mspx
az k tomuhle
http://www.microsoft.com/whdc/system/CEC/machine_in f.mspx
Tohle je pro mě moc náročná otázka. Nicméně, pokud by šlo o konkrétní PC a už by na něm byly konkrétní ovladače, pak bych asi použil TAP.exe (z XP Embedded Studia) a prošel si vytvořenej soubor. Tam se (možná) pár věcí dozvíš.
Co se týká generických ovladačů, tam moc netuším, snad si zkusit udělat live verzi WinXP - Reatogo, nabootovat a podívat se, jaký ovladače se použily...
Pavel
edit: Jakej OS? WinXP?
Nějaký info:
http://db.ilug-bom.org.in/Documentation/HOWTO/Plug- and-Play-HOWTO.html
Pavel
Sorry, OS je Win9x/ME, měl jsem za to, že to každýmu dojde, když HKLM\Enum\Root se používá jen v devítkových systémech. NT/2K/XP mají odlišnou architekturu registru, co se týká detekovaného hardwaru. My Shame. Zkusím si ty odkazy projít, dík za ně. Pořád se to týká live CD Win98.
Nedojde. Tohle normální člověk v hlavě nenosí...
Pavel
PNPcislo je len informacne (operacnemu systemu ho oznami ovladac alebo BIOS, samotne zariadenie tuto informaciu neobsahuje). Zariadenie obsahuje informaciu tuto: u PCI zariadeni Vendor ID (VID) a Device ID (DID), pripadne este k tomu subvendor ID, a subdevice ID, podla toho windows hlada spravne .inf. Tieto vsetky ID si OS precita zo zariadenia z PCI config space (vid pci specifikaciu).
P.S. Windows musi najprv zobrazit ze nasiel "nezname zariadenie", ptz. dokial nenajde spravne .inf, tak vie len VID/DID, a podla tych cisel nevie co to za zariadenie nasiel (je pre WIndows nezname), kym nenajde spravny .inf (v .inf je potom uvedeny nazov zariadenia odpovedajuci tomu VID a DID). Win by mohol napisat "naslo sa zariadenie VID:1234h DID:1234h", ale BFU by tym zbytocne len zmiatol a expert vie co do PC stracil takze vie co Windows nasiel a nepotrebuje vypisovat VID a DID.
P.S. k tvojmu problemu: podla inej otazky myslim ze ti ide o usb controllery, co su vsetko PCI zariadenia (aj ked su v chipsete), preto pisem o PCI zariadeniach.
Ak si si isty ze pouzivaju uplne rovnaky ovladac (ale rovnaky nazov suboru este neznamena ze je aj rovnaky obsah suboru), tak si do .inf pridaj vsetky vendorID a deviceID a budes mat jeden ovladac pre vsetky (ak pouzivaju tie zariadenia 100% rovnake subory/kod ovladaca tak by to malo fungovat)
este P.S.3. zariadenie v PCI config space ma informaciu "class" zariadenia, podla ktoreho sa da odlisit ci sa napr. jedna o IDE kontroller alebo sietovku apod., ale nie je to PNPcislo. V .inf by mal byt uvedeny tusim aj tento PCI-class, ale USB kontrollery maju ho tusim vsetky rovnaky (neviem zhlavy musel by som pozriet ku kazdemu chipsetu datasheet).
P.S.4. to na co sa pytas na zaciatku otazky je moc komplexne, stranka kde by boli rozpisane vsetky neexistuje, ako sa to programuje je popisane v roznych specifikaciach ktore je uz aj tazko najst na inete, a neprecital by si to vsetko ani do roku 2010. PCI zariadenia sa programuju kazde inac zavisi od vyrobcu konkretneho zariadenia, kvoli tomu su nutne ovladace.
Nejde pouze o USB zařízení. Pokud jsem to dobře pochopil, na začátku se najde pár zařízení s označením *PNPXXXX, za XXXX se vždy dosazuje čtyřmístné číslo. Kde 0000 je AT programovatelný řadič přerušení, 0100 AT časovač, 0200 AT řadič DMA, 0303 IBM 101/202 klávesnice (nepotřebuju aby tam byla), 0600 standardní řadič HDD, 0800 reproduktor, 0C01 systémová deska, (ale ne všude se najde 0C00 PnP BIOS, někde je 0C05 APM BIOS, dá se nahradit PnP Biosem, pokud v infu zadám matching device 0C05,0C00)... Tohle se mi objeví v první fázi detekce HW, pokud v HKLM vyprázdním klíč Enum. Naleze to do HKLM\Enum\Root. Ale už to neobjeví třeba 0A03 Sběrnice PCI (proč? je to taky součást základní desky a má to taky své PNP číslo). Ve druhé fázi si to nainstaluje ovládače pro systémové věci bez dotazu, jestli chci ovládač hledat. Teprve pak to najde sběrnici PCI a další věci, pozor, ale tady už jdou dotazy na vyhledání konkrétního typu hardware. Třeba PCI Bridge. Neinstaluje se nic (No_DRV), ale musíš odklepnout dotaz woken, jestli chceš hledat ovládač... To samý USB. Jsou tři typy, z toho třetí typ (EHCI) neznají wokna vůbec, OHCI mají desky s chipsetem SiS. VIA a Intel používají UHCI. Podle VID & PID poznají wokna, že se jedná o (např.) VIA 3038 USB host controller, ale stejně chtějí, abych jim odklepnul, že mají hledat ovládač.... což mě neskutečně se*re, páč nevím jak tyhle hlášky a dotazy zrušit. CDROM se instaluje bez dotazu a bez upozornění, prostě se tam objeví bez nějaké hlášky "systém našel nový hardware..." Zkoumal jsem inf pro cdrom, je tam položka NoSetupUI, SilentInstall... tohle jsem zkoušel zadat do infu pro USB, ale nejde to, dělá to jakoby to tam vůbec nebylo.
Takže jsem vykoumal, že leccos se dá nechat v HKLM\Enum\Root a systém to bere, jakože to tam je a chodí (vyzkoušeno na pár kompech). Ale nejde mi tam (zatím) nahodit PCI sběrnice a samozřejmě USB. Ano, USB jsem tam dostal, když jsem pozměnil Matching device, tvářilo se, že tam je, ale nechodilo do té doby, dokud jsem mu nezměnil přerušení. Pak si to dokonce našlo i RootHub, ale byl u něj žlutej vykřičník a nechodil.
Pokud jsem zkoušel instalovat W98 na různejch mašinách (od jistý doby nedělám nic jinýho, než že instaluju W98...), jako ovládač pro USB to mělo vždy UHCD.SYS, USBD.SYS, USBHUB.SYS a USBUI.DLL. Až na jednu vyjímku, tou byl SiS čipset a OHCI USB, tam si to místo UHCD.SYS zavedlo OPENHCI.SYS.
PS: já chápu, že upozornění a hledání driveru je z toho důvodu, abys mohl podstrčit woknům jinej drajvr, tohle není špatná věc, ale já hledám způsob, jak to odrbat, aby se to nainstalovalo v tichosti samo, nebo aby se nejraději nic neinstalovalo a použilo to co už tam je.
Tie prve zariadenia (PNPcisla) oznami operacnemu systemu BIOS (cez prislusne funkcie BIOSu a/alebo ACPI), vcetne resourcov ktore momentalne potrebuju, ptz. tie sa nedaju (alebo daju len dost blbo) detekovat. PCI zariadenia si prehlada Win tusim sam. Cely ten gulas vseliakych roznych sposobov detekcie HW vznikal postupne v historii PC, kedze sa furt vymyslali a bastlili kdejake nove nezmysly, stare nezmysly ale tiez ostavali.
To co popisujes je cisto zalezitost Windowsov, ak ti ide o toto tak si zadal otazku na nieco uplne ine. Potrebujes poznat ako si ktore zariadenia Win9x instaluje a preco. K tomuto neviem, nie som expert na Windowsie inf, ale mari sa mi ze Win9x maju niekde (asi v registroch alebo kde) nieco ako "databazu ovladacov" (alebo databazu inf alebo co), a otazka nevyskoci ak je prislusne zariadenie (inf) uz v tej databaze. K tomu musi byt inf tusim aj vo Windows\inf adresari. Ale v tomto by si mal pouzit najrpv google alebo MS web a hladat informacie o inf vo Win98. Mozno by pomohli helpy z Windows98 DDK (driver development kitu) ktory je na MSDN CD-ckach, ale stiahnut ho pre W98 asi uz z MS nejde.
- to su presne tie problemy o ktorych som ti pisal ked si sa pytal na to "ako odstranit detekciu HW", napisal som ti ze to nejde, ptz. PCI je cisto PnP konfigurovane, pri kazdom boote moze mat uplne ine resourcy a IRQ, a je nutne aby to OS prescanoval a enumeroval pri kazdom boote (= "detekcia HW"). Cakam teda ze ti poradia machri ktori tvrdili ze "ide to, staci vyhodit dll", ze teda ti napisu ze ako mas rozchodit USB controllery a ine PCI zariadenia
P.S. to co chces urobit by som robil tak ze by som sa do tych Win snazil nacpat co najviac akoze "predinstalovanych" ovladacov (.inf+subory) a detekcia HW musi ostat.
... mam pocit ze chces vpodstate len to, aby Win HW zdetekoval, nainstalil to na co ma ovladace, a pre HW na ktory nema ovladace aby neinstaloval (aby nevyskocilo to okno) a v spravcovi zariadeni bude ten HW s vykricnikom a nebude fungovat. To by mohlo ist ja nepoznam Windowsie dll ktore robia to vyskakovacie okno, ale takto si zatial otazku nepolozil (sem a do googlu).
Ak tie USB kontrollery (ne)funguju tak ako to popisujes tak uz mam pocit ze si z tych Win vyhadzal moc vela, aj nieco co je potrebne pre korektnu konfiguraciu PCI zariadeni.
Ano, v podstatě potřebuju to, co píšeš, tzn narvat tam co nejvíc zařízení, který wokna znají a mají pro ně ovládač (ty ovládače překopírovat na patřičné místo) a na ostatní kašlat. O to vyskakovací okno se stará knihovna SetupX.dll ve spolupráci se Setup4.dll. Ty stačí před startem přejmenovat, pak se neprovede detekce nového hardware a systém bere to, co už tam je. Teoreticky by stačil nějaký "patch" SetupX.dll. Co se týká tříd PnP, našel jsem tohle:
http://lists.freedesktop.org/archives/hal-commit/20 06-September/002699.html
kde je to v jakýmsi "listu" docela přehledně vypsaný, zkusím se tím probrat.
Ako ti ten list pomoze riesit tvoj problem?
P.S. linka od pavla vyssie (plug and play howto) je skor zaujimavejsia ako ten list.
P.S. skus tam tie setup-dll dat nazad, rozchodit USB kontrollery (nainstalit ovladace apod) a az bude USB fungovat potom tie dll skus zas premenovat.