Ladění ovladačů pomocí virtuálního stroje ................................................................................2 Úvod .......................................................................................................................................2 Ladění ovladačů pomocí dvou fyzických počítačů ............................................................2 Ladění ovladačů pomocí jednoho fyzického počítače........................................................2 Výběr aplikace na virtualizaci počítače..............................................................................2 Postup nastavení WinDbg a virtuálního stroje .......................................................................3 Instalace virtuálního stroje..................................................................................................3 Nastavení operačního systému cílového virtuálního počítače pro ladění...........................3 Nastavení operačního systému hostitelském počítače........................................................4 Postup ladění – příklad ...........................................................................................................4 Závěr .......................................................................................................................................5 Použité zdroje .........................................................................................................................5
Jan Kravar
[email protected]
Ladění ovladačů pomocí virtuálního stroje Úvod Ovladače operačního systému Windows nelze ladit standardním způsobem (jako běžné aplikace), protože ovladač běží v režimu jádra operačního systému. Krokování a výpis proměnných pak znamená krokovat celý operační systém. Chyba v kódu ovladače zapříčiní pád operačního systému.
Ladění ovladačů pomocí dvou fyzických počítačů K ladění ovladačů použijeme zdarma šířený software od firmy Microsoft WinDbg, který umožňuje ladit programy jak v uživatelském režimu tak i programy (ovladače) běžící v režimu jádra operačního systému. Pokud chceme ladit programy v režimu jádra, předpokládá WinDbg propojení dvou počítačů (např. přes sériový port, USB).
Na cílovém počítači (target) běží program, který chceme ladit. Na hostitelském počítači (host) pak WinDbg. Operační systém na cílovém počítači je pak možno řídit (krokovat, vypisovat proměnné) pomocí hostitelského počítače. Chyba v ovladači pak zapříčiní pouze pád cílového počítače, který však během ukončování systému může hostitelskému počítači odeslat množství ladících informací, které vývojář ovladače využije k analyzování chyby kódu ovladače.
Ladění ovladačů pomocí jednoho fyzického počítače Místo dvou fyzických počítačů použijeme pouze jeden fyzický počítač (host), ve kterém pomocí příslušné aplikace spustíme virtuální stroj, který bude odpovídat cílovému počítači. Celé tato myšlenka je závislá na možnostech aplikace provádějící virtualizaci počítače.
Výběr aplikace na virtualizaci počítače Na trhu je k dostání program Virtual PC od firmy Microsoft nebo řešení od firmy VMware. Virtual PC lze získat zdarma. U VMware lze verzi VMWare Server taktéž získat zdarma (ostatní verze produktů VMware jsou placené, tato verze však plně postačuje). Oba programy fungují velice podobně a jejich funkčnost se zdála ekvivalentní. Během testování jsem hlavně zkoumal, jakým způsobem lze ve virtuálním PC zpřístupnit hardware, který je připojován k fyzickému počítači. Toto bylo klíčové, protože právě virtuální PC musí zastávat roli cílového počítače, ke kterému je připojen hardware obsluhovaný laděným ovladačem. Virtual PC má nevýhodu v tom, že neumožňuje připojení USB zařízení do virtuálního stroje.
Jelikož moje práce předpokládá vývoj ovladače právě USB zařízení, byl Virtual PC pro mě nepoužitelný. Pro ladění ovladačů jsem proto použil VMWare Server.
Postup nastavení WinDbg a virtuálního stroje Instalace virtuálního stroje • • • • •
VMWare Server nainstalujeme standardním způsobem. Pomocí průvodce vytvoříme nový virtuální stroj. Do příslušného virtuálního stroje nainstalujeme požadovaný operační systém. Po instalaci virtuální stroj spustíme a nainstalujeme VMware tools (nabídka „VM - > Install VMware tools“). Po té stroj vypneme a v nabídce „Edit virtual machine settings“ přidáme: o Síťovou kartu v režimu „Bridged“ o USB Controller o Sériový port v režimu „named pipe“ , kde vyplníme požadované jméno roury.
Nastavení operačního systému cílového virtuálního počítače pro ladění •
Do souboru c:\boot.ini přidáme k záznamu našeho operačního systému přepínače /debugport=<sériový port> /baudrate=
, které nastaví ladění operačního systému. [boot loader] timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" debugport=COM1 /baudrate=115200
•
Síťová karta v režimu bridged (síťová karta ve virtuálním stroji sdílí fyzickou kartu v hostitelském stroji) umožňuje vytvořit sdílení souboru mezi virtuálním a hostitelským strojem. Využijeme ji pro zpřístupnění vyvíjených ovladačů ve virtuálním stroji.
Nastavení operačního systému hostitelském počítače • • •
WinDbg nainstalujeme standardním způsobem. Nastavíme systémovou proměnnou _NT_DEBUG_BAUDRATE na hodnotu, kterou jsme nastavili v boot.ini. Nastavíme systémovou proměnnou _NT_SYMBOL_PATH na srv*C:\symbols*http://msdl.microsoft.com/download/symbols, kde C:\symbols je složka, do které budou ukládány symboly binárních souborů. Toto nastavení způsobí, že pokud nebude požadovaný soubor nalezen v dané složce, tak bude stáhnut z internetu.
Postup ladění – příklad •
Spustíme
WinDbg
následujícím
příkazem
•
, kde port odpovídá jménu roury, které jsme nastavili v konfiguraci virtuálního stroje. Spustí se WinDbg, kde se v okně vypíše hláška:
windbg.exe
-k
com:pipe,
port=\\.\pipe\krndbg,resets=0,reconnect
Waiting for pipe \\.\pipe\krndbg Waiting to reconnect...
• •
Fyzicky připojíme požadovaný hardware (USB zařízení) k hostitelskému počítači. Spustíme virtuální stroj, který se během startování připojí k WinDbg, kde budeme pozorovat výpisy o úspěšném připojení: Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE Kernel Debugger connection established. Symbol search path is: srv*x:\temp\symb*http://msdl.microsoft.com/download/symbols Executable search path is: Windows XP Kernel Version 2600 UP Free x86 compatible Built by: 2600.xpsp_sp2_gdr.070227-2254 Kernel base = 0x804d7000 PsLoadedModuleList = 0x805533a0 System Uptime: not available
•
Po spuštění virtuálního stroje vybereme z nabídky VMWare VM -> Removable Device -> USB Devices , kde vybereme požadované USB zařízení, které chceme zpřístupnit ve virtuálním stroji.
• • • • • •
Zařízení se ohlásí v operačním systému virtuálního stroje a my jej standardně nainstalujeme. Nyní můžeme v programu WinDbg pomocí příkazu CTRL+BREAK přerušit běh operačního systému ve virtuálním stroji. Pomocí příkazu bp <jméno ovladače>!<jméno funkce> nastavíme požadovaný breakpoint. Zadáním příkazu g ve WinDbg pokračujeme v běhu cílového operačního systému. Ve virtuálním stroji provedeme příslušnou operaci tak, aby bylo dosaženo námi zadaného breakpointu. Běh cílového operačního systému je zastaven a v hostitelském počítači můžeme pomocí WinDbg krokovat, sledovat proměnné nebo vypisovat paměť našeho driveru.
Závěr Pomocí výše zmíněného způsobu lze plnohodnotně ladit jádro operačního systému a ovladače zařízení, které nám VMWare Server dovolí zpřístupnit do virtuálního stroje. V aktuální verzi jsou to zařízení připojované přes USB, SCSI, sériový a paralelní port, diskové jednotky a jednotky CD-ROM (kromě USB netestováno). Tento způsob ladění využívá software, který je zdarma (kromě vlastního operačního systému windows) a ušetří jeden fyzický počítač, čímž snižuje náklady na vývoj ovladačů.
Použité zdroje 1. 2. 3. 4.
http://blog.vyvojar.cz/lazo/archive/2006/01/29/7236.aspx http://blog.vyvojar.cz/lazo/archive/2005/01/25/3011.aspx http://blog.vyvojar.cz/lazo/archive/2006/01/29/7237.aspx http://silverstr.ufies.org/lotr0/windbg-vmware.html