使用kdb/kgdb调试内核
开启kgdb
J6X内核默认并不支持kgdb,需要对内核做一些修改:
修改 hobot-drivers/configs/hobot_j6x_defconfig 增加配置选项
启动过程调试
在U-Boot内通过修改bootargs,如使用ttyS0,波特率默认为921600bps,则bootargs末尾增加 kgdboc=ttyS0,921600 kgdbwait,再执行boot命令启动内核,内核加载启动后,将打印提示进入kdb。
之后将进入kdb操作界面,可切入kgdb等待连接,之后等待主机gdb连接。
也可以在内核命令行进入kdb:
可使用kdb的命令进行一些简单的调试。如果要进行带符号表的更复杂的调试,可以切换到kgdb。
主机gdb连接
agent-proxy工具安装
使用该工具可以在通过串口进行gdb远程调试的同时查看串口的输出日志。
从 https://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git 下载工具编译后得到agent-proxy执行程序
按照如下方式运行,将串口虚拟为两个网络连接:
这里的ttyUSB0是要连接J6X的调试串口,根据具体情况修改。然后可以使用命令 telnet localhost 5550 登录到串口查看调试信息,且不会和gdb使用串口产生冲突。
需要注意的是如果有其他直接使用/dev/ttyUSB0的程序,如picocom等,需要退出,避免和agent-proxy冲突。
需要注意的是如果有其他直接使用/dev/ttyUSB0的程序,如picocom等,需要退出,避免和agent-proxy冲突。
gdb远程连接
在提示等待连接时,关闭串口终端(避免占用串口)。之后在主机上使用对应的gdb工具(此处为gdb-multiarch)加载内核vmlinux,并通过主机串口(/dev/ttyUSB0)连接目标机(若设备有权限要求,加sudo):
其中vmlinux是带调试信息的内核镜像,需要和板端运行的内核是同一个编译版本。
连接上后,使用gdb命令调试。