你首先配置目标内核如下
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的同一个控制台端口。你可以通过内核参数或通过sysfs的entry.For imx6 sabrelite板,我使用ttymxc1为console.This将根据你的目标
1)为内核参数 添加更改以下参数bootargs
kgdboc=/dev/ttymxc1,115200 to your arguments.
2)如果您正在使用sysfs条目,请这样做:
echo /dev/ttymxc1,115200 > /sys/module/kgdboc/parameters/kgdboc
由于同一个串口用于控制台和调试,我们使用代理代理。通过代理代理,我们可以获得目标控制台以及调试。 来源编制座席代理模块可通过以下链接 “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
现在你可以看到的目标通过telnet终端与此座席代理模块支持
sudo telnet localhost 5550
(最好使用此telnet而不是minicom,其中仅支持此代理程序代理支持。) 当您要开始调试时,目标系统必须从正常模式进入调试模式。我们可以这样做目标
echo g > /proc/sysrq-trigger
现在它会进入调试模式。 现在从主机端运行gdb on arm编译内核的vmlinux。 转到相应的内核源代码目录,做这样的
arm-fsl-linux-gnueabi-gdb ./vmlinux
,我们将会看到GDB终端。从那里,你必须连接到目标进行的kgdb,
$target remote /dev/ttyS0
在我的情况,我的主机串行端口是/ dev/ttyS0来。 现在它会连接到目标。在此之后,您可以使用gdb命令来调试内核。
您试试这种方式。
你的内核参数是否正确?请参阅https://www.kernel.org/pub/linux/kernel/people/jwessel/kdb/EnableKGDB.html。 – dbrank0
我已经使用“kgdboc = ttyS0,115200 vmalloc = 256MB”作为启动参数。我也试过没有vmalloc,但仍然无法正常工作。我已经提到kernel.org –
我会试着用kgdbwait参数。如果它甚至没有停止,那么在配置时你可能会漏掉一些东西。 – dbrank0