Specifications

15
Driver Testing and Debugging
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-1
Preparing a Driver for Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-1
General Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-2
Putting Debug Statements in a Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-2
Installing a Driver for Testing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-4
Emergency Recovery (New Kernel Does Not Boot). . . . . . . . . . . . . . . . . . 15-4
Common Driver Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-5
Coding Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-5
Installation Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-5
Data Structure Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-5
Timing Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-6
Corrupted Interrupt Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-6
Accessing Critical Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-6
Overuse of Local Driver Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-6
Incorrect DMA Address Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-6
Driver Debugging Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-7
Using the Console Processor and Setting Breakpoints. . . . . . . . . . . . . . . . . . . . 15-7
Booting Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-9
Shutdown and Reboot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-9
System Panic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-12
Breakpoints in the Initialization Phase. . . . . . . . . . . . . . . . . . . . . . . . . 15-14
Using crash to Debug a Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-16
Saving the Core Image of Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-16
Initializing crash on the Memory Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-17
Using crash Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-17
Using crash Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-18
Kernel Debugger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-18
Entering kdb from a Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-19
System Panics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-19