Re: [PATCH 0/13] RFC ONLY - kdb for kgdb

From: Louis Rilling
Date: Mon May 11 2009 - 05:15:55 EST


Hi Jason,

On 08/05/09 16:23 -0500, Jason Wessel wrote:
> This patch series is a request for comments on several levels.
>
> 1) Do people find kdb useful? (See * and **)

Yes! Having a debugger on the main console is very handy, especially when
a) it is a pain, when it's possible (*), to setup a serial console, and
b) over ethernet, neither kgdb nor kdb is as reliable as kdb on tty0.

I won't answer the other questions since I'm definitely a user, not a developer
of kernel debugger.

(*) not everybody has IPMI 2 boards with serial over lan consoles.

> 2) Would kdb folks be willing to use it if it was a front end to kgdb?
> 3) Does kdb have a future in the mainline kernel?
> 4) Is this a reasonable approach to have some level of
> unification to end up with a more robust kernel debugger?
>
> * This is not meant to be a religious war
>
> ** This will never replace printk :-)
>
> What follows is a series of patches to the development kernel which
> enable kdb as a front end to kgdb for arm, mips, powerpc, and x86.
> This is a very raw prototype, but enough of it it works such that
> folks can try it out.
>
> To get the most basic functionality, you only need the first 2 patches
> in the series. The remainder of the patches go on to incrementally
> add back some of the functionality that was removed from kdb. I made
> an attempt to try to make the first part just the generic set of
> changes required to get kdb working on 1 or more archs.

Do you intend to support kdb modules? If yes, in which extent should they be
adapted?

Thanks,

Louis

>
> The kdb front end 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_KGDB_KDB_PRIMARY=y
> CONFIG_KDB_KEYBOARD=y
> CONFIG_KDB_USB=y
>
> If you were using the serial port with kdb before, now you just use
> the kgdboc mechanism with no differences at all. IE use you 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:
>
> console=tty0 kgdboc=kdb kgdbwait
>
> You can also use the keyboard and or serial console:
>
> console=ttyS0,115200 console=tty0 kgdboc=kdb,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
>
> I have also found on some PS/2 keyboards you have press alt again
> after resuming the system because the key up event got lost somewhere.
>
> 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. To get out of kgdb mode you can type "$3#33", or to
> get into kgdb mode from kdb, you can type "kgdb". Also from gdb you
> can issue commands to the kdb front end, via gdb's montior command.
> For instance you could issue "monitor lsmod". Allowing the gdb
> monitor extension was certainly another motivation behind the
> prototype.
>
> From here it is a matter of deciding if it is worth continuing down
> this route.
>
> The evaulation of this project will definitely cause some further
> cleanup and improvement to kgdb, regardless of if this effort is
> carried forward. Two of the patches in this series are patches likely
> to get integrated into kgdb's code base and do not bear the "RFC ONLY"
> indication.
>
> Thanks,
> Jason.
>
> You can find the development branch for this here:
>
> http://git.kernel.org/?p=linux/kernel/git/jwessel/linux-2.6-kgdb.git;a=shortlog;h=kdb_prototype
>
> or grab a static version of the patches here:
>
> http://kernel.org/pub/linux/kernel/people/jwessel/branches/kdb_prototype.tar.bz2
>
> short log info follows:
>
> Jason Wessel (13):
> RFC ONLY - kdb: core for kgdb backend
> RFC ONLY - kgdb: core changes to support kdb
> RFC ONLY - kgdb,8250,pl011: Return immediately from console poll
> RFC ONLY - kgdb: gdb "monitor" -> kdb passthrough
> RFC ONLY - kgdboc,keyboard: Keyboard driver for kdb with kgdb
> kgdb: remove post_primary_code references
> RFC ONLY - x86,kgdb: Add low level debug hook
> RFC ONLY - arm,kgdb: Add hook to catch an oops with debugger
> RFC ONLY - powerpc,kgdb: Introduce low level trap catching
> RFC ONLY - mips,kgdb: kdb low level trap catch and stack trace
> kgdb: Add the ability to schedule a breakpoint via a tasklet
> RFC ONLY - kgdb,kdb: use async breakpoint for sysrq for usb
> RFC ONLY - usb,keyboard: uchi, echi, and ochi polling keyboard urbs
>
> Makefile | 1 +
> arch/arm/include/asm/kgdb.h | 2 +
> arch/arm/include/asm/kmap_types.h | 1 +
> arch/arm/kernel/kgdb.c | 13 +
> arch/arm/kernel/traps.c | 5 +
> arch/mips/include/asm/kgdb.h | 2 +
> arch/mips/include/asm/kmap_types.h | 3 +-
> arch/mips/kernel/kgdb.c | 27 +-
> arch/mips/kernel/traps.c | 14 +
> arch/powerpc/include/asm/kmap_types.h | 1 +
> arch/powerpc/kernel/kgdb.c | 12 +-
> arch/powerpc/kernel/traps.c | 7 +
> arch/x86/include/asm/kgdb.h | 3 +
> arch/x86/include/asm/kmap_types.h | 3 +-
> arch/x86/kernel/kgdb.c | 56 +-
> arch/x86/kernel/traps.c | 6 +
> drivers/char/Makefile | 1 +
> drivers/char/kdb_keyboard.c | 407 ++++
> drivers/char/kdb_keyboard.h | 143 ++
> drivers/hid/usbhid/hid-core.c | 26 +
> drivers/hid/usbhid/usbkbd.c | 13 +
> drivers/serial/8250.c | 4 +-
> drivers/serial/amba-pl011.c | 6 +-
> drivers/serial/kgdboc.c | 80 +-
> drivers/usb/core/hcd.c | 14 +
> drivers/usb/core/hcd.h | 4 +
> drivers/usb/host/ehci-hcd.c | 42 +
> drivers/usb/host/ehci-pci.c | 6 +
> drivers/usb/host/ehci-q.c | 225 ++
> drivers/usb/host/ohci-hcd.c | 66 +
> drivers/usb/host/ohci-pci.c | 6 +-
> drivers/usb/host/ohci-q.c | 63 +
> drivers/usb/host/uhci-hcd.c | 36 +
> drivers/usb/host/uhci-q.c | 51 +
> fs/proc/meminfo.c | 145 ++
> fs/proc/mmu.c | 16 +-
> include/linux/kdb.h | 172 ++
> include/linux/kdbprivate.h | 611 ++++++
> include/linux/keyboard.h | 2 +
> include/linux/kgdb.h | 25 +-
> include/linux/serial_core.h | 1 +
> init/main.c | 26 +
> kdb/.gitignore | 1 +
> kdb/Makefile | 48 +
> kdb/kdb_bp.c | 863 ++++++++
> kdb/kdb_bt.c | 209 ++
> kdb/kdb_cmds | 32 +
> kdb/kdb_io.c | 895 ++++++++
> kdb/kdbmain.c | 3669 +++++++++++++++++++++++++++++++++
> kdb/kdbsupport.c | 1120 ++++++++++
> kernel/kallsyms.c | 22 +
> kernel/kgdb.c | 321 +++-
> kernel/module.c | 19 +-
> kernel/panic.c | 6 +
> kernel/printk.c | 14 +
> kernel/sched.c | 93 +-
> kernel/signal.c | 49 +
> lib/Kconfig.kgdb | 37 +
> mm/hugetlb.c | 22 +
> mm/swapfile.c | 22 +
> 60 files changed, 9697 insertions(+), 92 deletions(-)
> create mode 100644 drivers/char/kdb_keyboard.c
> create mode 100644 drivers/char/kdb_keyboard.h
> create mode 100644 include/linux/kdb.h
> create mode 100644 include/linux/kdbprivate.h
> create mode 100644 kdb/.gitignore
> create mode 100644 kdb/Makefile
> create mode 100644 kdb/kdb_bp.c
> create mode 100644 kdb/kdb_bt.c
> create mode 100644 kdb/kdb_cmds
> create mode 100644 kdb/kdb_io.c
> create mode 100644 kdb/kdbmain.c
> create mode 100644 kdb/kdbsupport.c
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

--
Dr Louis Rilling Kerlabs
Skype: louis.rilling Batiment Germanium
Phone: (+33|0) 6 80 89 08 23 80 avenue des Buttes de Coesmes
http://www.kerlabs.com/ 35700 Rennes

Attachment: signature.asc
Description: Digital signature