Differences between version 12 and predecessor to the previous major change of KernelDevelopment.
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 12 | Last edited on Wednesday, October 19, 2005 7:30:21 pm | by AristotlePagaltzis | Revert |
Older page: | version 10 | Last edited on Saturday, October 15, 2005 2:27:36 pm | by IanMcDonald | Revert |
@@ -1,65 +1,32 @@
-This page is going to be about
LinuxKernel development.
+!! Tools for
LinuxKernel development
-There are useful tools for kernel development available such as
[Ostra] and
[Sparse].
+*
[Ostra]
+*
[Sparse]
+* [Git]; see See KernelDevelopmentWithGit
-Today most KernelDevelopment is done with [Git]. See KernelDevelopmentWithGit for more details.
+!! Resources
-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>
+* KernelDevelopmentDebugging
+* [Linux
kernel source cross reference | http://lxr
.linux.no
/]
+* [Hacking the Linux 2
.6 kernel, Part 1
: Getting ready | http://www
-128.ibm.com/developerworks/linux/edu/l
-dw
-linux
-kernelhack1
-i.html]
+* [Hacking the Linux 2.6 kernel, Part 2: Making your first hack | http:
//www-128
.ibm.com
/developerworks/linux/edu/l-dw-linux-kernelhack2-i.html]
-NB. You need to be at the top level of the kernel tree for this to pick up your C files.
+!! Some notes
-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
+Using [DistCC] for KernelDevelopment
can be problematic
.
-Put the bytes into
a "foo.s" file like this
:
+A script to copy
a new [Kernel] to remote machines
:''''
- .text
- .globl foo
-foo:
- .byte
.... /* bytes from Code
: part of OOPS dump *
/
+ <verbatim>
+ #!/bin/bash
+ SRC=$HOME/linuxsrc/dccpwork
+ VER=2
.6
.14-rc4
+ rm $HOME/tmp/lib/modules/$VER/build
+ rm $HOME/tmp/lib/modules/$VER/source
+ scp $SRC/System
.map root@$1:/boot/System
.map-$VER
+ scp $SRC
/arch/i386/boot/bzImage root@$1
:/boot/vmlinuz-$VER
+ scp -r $HOME/tmp/lib root@$1:/
+ </verbatim>
-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 %%%
-
-A useful cross reference of the LinuxKernel source code can be found at http://lxr.linux.no/
-
-In theory you can use [DistCC] to do KernelDevelopment although it can be problematic.
-
-Here is a script that I use to copy my new kernel to other remote machines:
-<verbatim>
-#! /bin/bash
-SRC=$HOME/linuxsrc/dccpwork
-VER=2.6.14-rc1
-rm $HOME/tmp/lib/modules/$VER/build
-rm $HOME/tmp/lib/modules/$VER/source
-scp $SRC/System.map root@$1:/boot/System.map-$VER
-scp $SRC/arch/i386/boot/bzImage root@$1:/boot/vmlinuz-$VER
-scp -r $HOME/tmp/lib root@$1:/
-</verbatim>
----
CategoryKernel