Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kdb: Add kdb kernel module sample

Add an example of how to add a dynamic kdb shell command via a kernel
module.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>

+81 -2
+12 -1
Documentation/DocBook/kgdb.tmpl
··· 710 710 <listitem><para>A simple shell</para></listitem> 711 711 <listitem><para>The kdb core command set</para></listitem> 712 712 <listitem><para>A registration API to register additional kdb shell commands.</para> 713 - <para>A good example of a self-contained kdb module is the "ftdump" command for dumping the ftrace buffer. See: kernel/trace/trace_kdb.c</para></listitem> 713 + <itemizedlist> 714 + <listitem><para>A good example of a self-contained kdb module 715 + is the "ftdump" command for dumping the ftrace buffer. See: 716 + kernel/trace/trace_kdb.c</para></listitem> 717 + <listitem><para>For an example of how to dynamically register 718 + a new kdb command you can build the kdb_hello.ko kernel module 719 + from samples/kdb/kdb_hello.c. To build this example you can 720 + set CONFIG_SAMPLES=y and CONFIG_SAMPLE_KDB=m in your kernel 721 + config. Later run "modprobe kdb_hello" and the next time you 722 + enter the kdb shell, you can run the "hello" 723 + command.</para></listitem> 724 + </itemizedlist></listitem> 714 725 <listitem><para>The implementation for kdb_printf() which 715 726 emits messages directly to I/O drivers, bypassing the kernel 716 727 log.</para></listitem>
+7
samples/Kconfig
··· 54 54 55 55 If in doubt, say "N" here. 56 56 57 + config SAMPLE_KDB 58 + tristate "Build kdb command exmaple -- loadable modules only" 59 + depends on KGDB_KDB && m 60 + help 61 + Build an example of how to dynamically add the hello 62 + command to the kdb shell. 63 + 57 64 endif # SAMPLES
+1 -1
samples/Makefile
··· 1 1 # Makefile for Linux samples code 2 2 3 3 obj-$(CONFIG_SAMPLES) += kobject/ kprobes/ tracepoints/ trace_events/ \ 4 - hw_breakpoint/ kfifo/ 4 + hw_breakpoint/ kfifo/ kdb/
+1
samples/kdb/Makefile
··· 1 + obj-$(CONFIG_SAMPLE_KDB) += kdb_hello.o
+60
samples/kdb/kdb_hello.c
··· 1 + /* 2 + * Created by: Jason Wessel <jason.wessel@windriver.com> 3 + * 4 + * Copyright (c) 2010 Wind River Systems, Inc. All Rights Reserved. 5 + * 6 + * This file is licensed under the terms of the GNU General Public 7 + * License version 2. This program is licensed "as is" without any 8 + * warranty of any kind, whether express or implied. 9 + */ 10 + 11 + #include <linux/module.h> 12 + #include <linux/kdb.h> 13 + 14 + /* 15 + * All kdb shell command call backs receive argc and argv, where 16 + * argv[0] is the command the end user typed 17 + */ 18 + static int kdb_hello_cmd(int argc, const char **argv) 19 + { 20 + if (argc > 1) 21 + return KDB_ARGCOUNT; 22 + 23 + if (argc) 24 + kdb_printf("Hello %s.\n", argv[1]); 25 + else 26 + kdb_printf("Hello world!\n"); 27 + 28 + return 0; 29 + } 30 + 31 + 32 + static int __init kdb_hello_cmd_init(void) 33 + { 34 + /* 35 + * Registration of a dynamically added kdb command is done with 36 + * kdb_register() with the arguments being: 37 + * 1: The name of the shell command 38 + * 2: The function that processes the command 39 + * 3: Description of the usage of any arguments 40 + * 4: Descriptive text when you run help 41 + * 5: Number of characters to complete the command 42 + * 0 == type the whole command 43 + * 1 == match both "g" and "go" for example 44 + */ 45 + kdb_register("hello", kdb_hello_cmd, "[string]", 46 + "Say Hello World or Hello [string]", 0); 47 + return 0; 48 + } 49 + 50 + static void __exit kdb_hello_cmd_exit(void) 51 + { 52 + kdb_unregister("hello"); 53 + } 54 + 55 + module_init(kdb_hello_cmd_init); 56 + module_exit(kdb_hello_cmd_exit); 57 + 58 + MODULE_AUTHOR("WindRiver"); 59 + MODULE_DESCRIPTION("KDB example to add a hello command"); 60 + MODULE_LICENSE("GPL");