您首先配置您的目标内核如下
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 条目。对于 imx6 sabrelite 板,我将 ttymxc1 用于控制台。这将根据您的目标而改变
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
现在您可以使用此代理代理支持通过 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命令来调试内核了。
你试试这个方法。