Skip to content

Commit 4aad8f5

Browse files
committed
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 <[email protected]>
1 parent 12ba8d1 commit 4aad8f5

File tree

5 files changed

+81
-2
lines changed

5 files changed

+81
-2
lines changed

Documentation/DocBook/kgdb.tmpl

+12-1
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,18 @@ Task Addr Pid Parent [*] cpu State Thread Command
710710
<listitem><para>A simple shell</para></listitem>
711711
<listitem><para>The kdb core command set</para></listitem>
712712
<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>
714725
<listitem><para>The implementation for kdb_printf() which
715726
emits messages directly to I/O drivers, bypassing the kernel
716727
log.</para></listitem>

samples/Kconfig

+7
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,11 @@ config SAMPLE_KFIFO
5454

5555
If in doubt, say "N" here.
5656

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+
5764
endif # SAMPLES

samples/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Makefile for Linux samples code
22

33
obj-$(CONFIG_SAMPLES) += kobject/ kprobes/ tracepoints/ trace_events/ \
4-
hw_breakpoint/ kfifo/
4+
hw_breakpoint/ kfifo/ kdb/

samples/kdb/Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
obj-$(CONFIG_SAMPLE_KDB) += kdb_hello.o

samples/kdb/kdb_hello.c

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Created by: Jason Wessel <[email protected]>
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");

0 commit comments

Comments
 (0)