标签: kgdb

Android:使用KGDB进行内核调试

我正在尝试为我的Nexus One进行内核调试,并且已经按照http://bootloader.wikidot.com/android:kgdb的说明进行操作.我想知道是否有人真的让这个工作?有没有人为使用KGDB调试内核做了更新的解决方案?

debugging android kernel android-source kgdb

14
推荐指数
2
解决办法
8815
查看次数

如何在ARM上使用kgdb?

ARMv7用作目标机器.我已经2.6.34.13为目标编译了Linux源代码.

Target使用minicom通过串口连接Host(Linux Development machine).

Target加载了新内核,并在命令提示符下启用了KGDB.

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc 
$ echo g > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)

显示输入KGDB ...消息并等待命令.

主机方面,

$arm-none-linux-gnueabi-gdb vmlinux

    gdb > set remotebaud 115200
    gdb > set debug remote 1
    gdb > target remote /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

在此之后,默认情况下会发生一些命令通信.

  1. qSupported从主机发送到目标.但目标不支持qSuppoted,因此返回$#00.同样?,HC-1发送命令但收到适当的响应.

  2. qOffsets命令没有收到目标的任何响应.

我怀疑是vmlinux.因为如果我放弃listgdb,它就不会显示10行代码

arch/arm/kernel/head.S : No such file or directory.
Run Code Online (Sandbox Code Playgroud)

注意::在服务器中完成的内核编译.因此在开发机器中没有可用的源.但看起来,arm-gdb正在寻找头部.

我不确定我在做什么错.我需要为整个内核加载符号.在这方面指导我.

c arm linux-kernel kgdb

14
推荐指数
1
解决办法
3522
查看次数

如何更改gdb中的执行线程?

我目前正在使用 KGDB 调试内核代码。每当我闯入时,我都会自然地跳转到 kgdb 的中断处理程序。在 GDB 下我运行了以下命令。

info threads 
Run Code Online (Sandbox Code Playgroud)

输出将是

7    Thread 7 (rcu_sched) 0x0000000000000000 in irq_stack_union ()

6    Thread 5 (kworker/0:0H) 0x0000000000000000 in irq_stack_union ()

5    Thread 3 (ksoftirqd/0) 0x0000000000000000 in irq_stack_union ()

4    Thread 2 (kthreadd) 0x0000000000000000 in irq_stack_union ()

3    Thread 1 (init)   0x0000000000000000 in irq_stack_union ()

2    Thread 3754 (Xorg) 0x0000000000000000 in irq_stack_union ()

* 1    Thread 4294967294 (shadowCPU0) kgdb_breakpoint ()

    at kernel/debug/debug_core.c:1042
Run Code Online (Sandbox Code Playgroud)

然后我会跳过代码,期望最终在不同的线程中结束(我对 Xorg 感兴趣),但是在我单步执行代码后,下一个执行线程将变为 cpu 空闲状态。

info thread

* 1    Thread 4294967294 (shadowCPU0) cpu_idle_loop …
Run Code Online (Sandbox Code Playgroud)

linux gdb kgdb

10
推荐指数
1
解决办法
2万
查看次数

在GDB中的solib-absolute-prefix与solib-search-path

我读了两者的描述,但我还不明白其中的区别.任何人都可以帮我理解差异吗?

set solib-absolute-prefix -
Specifies the local directory that contains copies of target libraries in the 
corresponding subdirectories. This option is useful when debugging with gdbserver.
Run Code Online (Sandbox Code Playgroud)

.

set solib-search-path command - 
Specifies directories where GDB will search for shared libraries with symbols. This option        
is useful when debugging with gdbserver.
Run Code Online (Sandbox Code Playgroud)

谢谢.

gdb kgdb

9
推荐指数
1
解决办法
8763
查看次数

将GDB通过串口连接到KGDB构建内核的问题


我想通过串口ttyS0从我的64位suse机器调试MIPS linux驱动程序.使用的gdb通过LAN调试应用程序而不是kgdb over serial.我使用此页面和其他一些内容来启动调试,但没有最终结果.

我的内核使用以下设置编译:

CONFIG_MAGIC_SYSRQ=y
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS is not set
CONFIG_CMDLINE="kgdboc=ttyS0,115200"
Run Code Online (Sandbox Code Playgroud)

如果我运行gdb:

gdb vmlinux
(gdb) set remotebaud 115200
(gdb) set debug remote 1
(gdb) target remote /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

我可以观察以下输出:

输出(GDB_TERMINAL):

(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
Sending packet: $qSupported:qRelocInsn+#9a...Ack
Timeout in mid-packet, retrying
Timed out.
Timed out.
Ignoring packet error, continuing...
Packet qSupported (supported-packets) is supported
warning: unrecognized item "qSupported:qRelocIns" in "qSupported" response
Sending packet: $Hg0#df...Nak
Sending packet: $Hg0#df...Ack
Packet received: Hg0
Sending …
Run Code Online (Sandbox Code Playgroud)

c linux kernel linux-kernel kgdb

7
推荐指数
1
解决办法
6140
查看次数

5
推荐指数
1
解决办法
7726
查看次数

sysrq-g 不会破坏内核

我正在尝试设置 linux 内核模块调试,使用两台机器 - 目标和主机。在目标机器上,我已经编译并安装了一个带有CONFIG_MAGIC_SYSRQ=y标志和其他标志的 3.5.0 内核,用于串行控制台调试。

当我想破坏内核以附加远程 gdb 时,我使用

$ echo g > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)

但是上面的命令并没有破坏内核。

$ cat /proc/sys/kernel/sysrq" 
Run Code Online (Sandbox Code Playgroud)

上面的命令返回 1,因此启用了魔法 sysrq 键。甚至“echo b > /proc/sysrq-trigger”也在工作并重新启动机器。有人可以指出我可能遗漏了什么吗?

谢谢

kernel-module kgdb

5
推荐指数
1
解决办法
3276
查看次数

FreeBSD模块调试 - 无法访问内存地址

我试图破解/理解nullfs内核模块(在FreeBSD上)所以为此,我做了以下事情:

在目标机器上: kldstat给出:

Id Refs Address            Size     Name
 1   10 0xffffffff80200000 17e10c8  kernel
 2    1 0xffffffff819e2000 4cf0     vmxnet.ko
 3    1 0xffffffff819e7000 16e0     echo.ko
 4    1 0xffffffff81c11000 23dc     vmmemctl.ko
 5    1 0xffffffff81c14000 641b     nullfs.ko

nm /boot/kernel/nullfs.ko | grep mount
00000000000018f0 t null_getwritemount
0000000000000540 t nullfs_mount
0000000000000930 t nullfs_unmount
                 U vfs_mountedfrom
                 U vop_getwritemount_desc
Run Code Online (Sandbox Code Playgroud)

在通过充当串行控制台的命名管道(我正在使用虚拟机)连接到目标的本地计算机上:

(kgdb) tr0
kdb_sysctl_enter (oidp=<value optimized out>, arg1=<value optimized out>,
arg2=0xfffffe004e7cc7f0,
    req=<value optimized out>) at /usr/src/sys/kern/subr_kdb.c:446
446                     kdb_why = KDB_WHY_UNSET;
Current language:  auto; currently minimal
(kgdb) getsyms
During …
Run Code Online (Sandbox Code Playgroud)

debugging freebsd kernel-module kgdb

5
推荐指数
0
解决办法
406
查看次数

通过USB和串行连接,KGDB远程调试连接问题

我遇到主机和目标之间的串行和USB连接问题.以下是我的设置.主机和目标都没有任何串行(DB9)端口.

主持人:运行Windows + VMshare + Ubuntu

目标:运行Linux内核3.19.有一个MINI USB端口充当串口,我认为它(CP210x uart到usb)

连接1:主机(USB到DB9 male-PL2303)+ DB9母对母+(DB9公对USB)目标.

连接2:主机(USB) - 电缆 - (USB mini)目标

主机(ubuntu VM),可以将USB设备(两种连接类型)识别为/ dev/ttyUSB0.由于VM接管设备控制,因此设备未显示在Windows设备管理器上.

目标引导进入UEFI shell.我修改syslinux.cfg文件,将"kgdbwait kgdboc = ttyS0,115200"附加到APPEND标志.保存更改(按F2)然后退出(按F3).启动进入图像.Target现在使用以下消息进入kdb提示符

kgdb: Waiting for connection from remote gdb...
Entering kdb ( current= <64bit address>, pid 1) on processor 0 due to Keyboard Entry
Kgdb > _
Run Code Online (Sandbox Code Playgroud)

在主机端,我执行以下命令,下面是错误

root@ubuntu: cd /images
root@ubuntu: sudo gdb ./vmlinux
Reading symbols from ./vmlinux done.
(gdb)
(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0
Ignoring packet error, continuing...
warning: unrecognized item …
Run Code Online (Sandbox Code Playgroud)

gdb kgdb

3
推荐指数
1
解决办法
3115
查看次数