Penguin
Diff: KernelDevelopment
EditPageHistoryDiffInfoLikePages

Differences between version 10 and predecessor to the previous major change of KernelDevelopment.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 10 Last edited on Saturday, October 15, 2005 2:27:36 pm by IanMcDonald Revert
Older page: version 9 Last edited on Monday, September 19, 2005 9:45:24 am by IanMcDonald Revert
@@ -2,8 +2,46 @@
  
 There are useful tools for kernel development available such as [Ostra] and [Sparse]. 
  
 Today most KernelDevelopment is done with [Git]. See KernelDevelopmentWithGit for more details. 
+  
+To debug a kernel crash you can use objdump to show the assembler for the routine shown and if debug symbols from kernel hacking menu are turned on then you can see the C code also. There will be a hex offset in the crash output and just use that to find the valid line of code/assembler. For example:  
+<tt>  
+objdump -r -S -l --disassemble net/dccp/ipv4.o  
+</tt>  
+  
+NB. You need to be at the top level of the kernel tree for this to pick up your C files.  
+  
+If you don't have access to the code you can also debug on some crash dumps e.g. crash dump output as shown by Dave Miller.  
+<verbatim>  
+EIP is at ip_queue_xmit+0x14/0x4c0  
+ ...  
+Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00  
+00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08  
+<8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85  
+  
+Put the bytes into a "foo.s" file like this:  
+  
+ .text  
+ .globl foo  
+foo:  
+ .byte .... /* bytes from Code: part of OOPS dump */  
+  
+Compile it with "gcc -c -o foo.o foo.s" then look at the output  
+of "objdump --disassemble foo.o".  
+  
+Output:  
+  
+ip_queue_xmit:  
+ push %ebp  
+ push %edi  
+ push %esi  
+ push %ebx  
+ sub $0xbc, %esp  
+ mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb)  
+ mov 0x8(%ebp), %ebx ! %ebx = skb->sk  
+ mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt  
+</verbatim>  
  
 A couple of useful articles for kernel development from [IBM]: %%% 
 http://www-128.ibm.com/developerworks/linux/edu/l-dw-linux-kernelhack1-i.html %%% 
 http://www-128.ibm.com/developerworks/linux/edu/l-dw-linux-kernelhack2-i.html %%%