sysrq-g不会破坏内核

时间:2013-06-26 20:25:56

标签: kernel-module kgdb

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

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

$ echo g > /proc/sysrq-trigger

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

$ cat /proc/sys/kernel/sysrq" 

上面的命令返回1,因此启用了magic sysrq键。甚至“echo b> / proc / sysrq-trigger”正在工作并重启机器。任何人都可以指出我可能缺少的东西吗?

由于

1 个答案:

答案 0 :(得分:3)

您首先按如下方式配置目标内核

CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_KERNEL=y
CONFIG_KGDB=y
CONFIG_DEBUG_INFO=y
CONFIG_KGDB_SERIAL_CONSOLE=y (here I am using serial port for kgdb) 
CONFIG_MAGIC_SYSRQ= y (for sysrq functions).

现在使用imx6配置文件编译内核。 使用这个编译好的内核启动目标。你必须告诉目标你将使用哪个串口为kgdb pupose。在我的情况下我也使用相同的控制台端口为kgdb.This设置你可以通过内核参数或通过sysfs entry.For imx6 sabrelite board,我使用ttymxc1作为console.This将根据你的目标而改变

1)作为内核参数 将以下参数添加到bootargs

kgdboc=/dev/ttymxc1,115200 to your arguments.

2)如果您正在使用sysfs条目,请执行此操作

echo /dev/ttymxc1,115200 > /sys/module/kgdboc/parameters/kgdboc

由于同一串口用于控制台和调试,我们使用代理代理。通过代理程序代理,我们可以获得目标控制台以及进行调试。 编译agentproxy的源代码可在以下链接中找到 “https://kernel.googlesource.com/pub/scm/utils/kernel/kgdb/agent-proxy/+/agent-proxy-1.96” 编译完主机pc后,按以下步骤运行

sudo ./agent-proxy 5550^5551 0 /dev/ttyS0,15200

现在,您可以使用此agentproxy支持通过telnet查看目标终端

sudo  telnet localhost 5550

(最好使用这个telnet而不是minicom,只有这个代理代理支持来了。) 如果要开始调试,目标系统必须从正常模式进入调试模式。我们可以在目标

中以这种方式做到这一点
echo g > /proc/sysrq-trigger

现在它将进入调试器模式。 现在从主机端在arm编译内核的vmlinux上运行gdb。 转到相应的内核源目录并执行此操作

arm-fsl-linux-gnueabi-gdb ./vmlinux

现在它将显示gdb终端。从那里你必须连接到kgdb的目标,

$target remote /dev/ttyS0

在我的情况下,我的主机串口是/ dev / ttyS0。 现在它将连接到目标。在此之后,您可以使用gdb命令来调试内核。

你试试这种方式。