[PATCH 0/37] kgdb, kdb and atomic kernel modesetting series
|[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]|
Back in May 2009 an initial kdb prototype was posted to lkml as an RFC to see if there was sufficient interest to merge kdb and kgdb together. There was enough interest to continue on with the project, and it is now in a state where further work can occur to review, and hopefully merge the code into a future kernel. If this is the first time you have heard about kgdb or kdb, you might consider taking a look at the presentation slides from LPC 2009. http://kgdb.wiki.kernel.org/index.php/Main_Page#Linux_Plumbers_Conference_presentation_2009 The code included in this series does not include any of the USB code referenced in the presentation. Several changes have occurred since the original prototype was posted. All of the architectures using the kgdb core today have had the functions implemented to make use of the kdb shell. This list includes x86, arm, ppc, mips, sh, sparc, and blackfin. The proposed atomic kernel modesetting project now has an initial implementation for the intel i915 driver, and it should be possible to add atomic mode setting hooks for any other video driver which makes use of builtin kernel mode setting. All the dead code and functions that were not previously implemented in the RFC have been removed or implemented. The directory of the kernel debugger changed as well. All the kernel debugger pieces, the debug core, gdbstub and kdb now live under kernel/debug. While the patch set may be slightly large, it is broken down into logical, incremental functionality. Only the first 12 patches are needed to see kdb in action on a serial port which has a kgdboc driver for example. It is important to understand that this work was directly derived from the original kdb, and the intent is to deprecate the out of tree kdb and move all its functionality to this code base. This version of kdb is completely wired into the debug core and the kgdboc polled I/O model using the same API used by the gdbstub (which people call kgdb). The kdb front end in this patch series works a little differently than if you were to take the original kdb patch set from: ftp://oss.sgi.com/projects/kdb/download/v4.4/ In the kernel .config you should enable the following options: CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y CONFIG_KGDB_LOW_LEVEL_TRAP=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y To use kdb with a serial port you would use the kgdb/kgdboc way of doing things. You would used a kernel command line with: console=ttyS0,115200 kgdboc=ttyS0 kgdbwait That will get you access to kdb just after the console has been registered. If you want to use the keyboard, you could use the following (NOTE it is kbd and not kdb, kbd is short for keyboard): console=tty0 kgdboc=kbd kgdbwait You can also use the keyboard and or serial console: console=ttyS0,115200 console=tty0 kgdboc=kbd,ttyS0 In terms of breaking into the debugger after the system is up, you must use the sysrq-g sequence. That means you could run: echo g > /proc/sysrq-trigger Or you can use the SysRq key on your key board. On a typical laptop you might have to do the following: press and hold ALT -- You will be holding this the whole time press and hold FN press and release the key with the SysRq label release FN press and release g release ALT Once you are in kdb you can run help to see a limited list of commands. You can also still connect gdb or re-enter kdb without leaving the exception state, if you are using a serial port. To get out of kgdb mode you can type "$3#33", or to get into kgdb mode from kdb, you can type "kgdb".