======================= 我的环境 ==========================
PC 端: win7 + vmware-15 ubuntu16.04
开发板:Freescale i.MX6 单CPU Linux-4.1.15
交叉编译器为 arm-none-linux-gnueabi-gcc(gcc version 4.6.3)
===========================================================
1. 前言
之前介绍了应用程序调试工具 gdb + gdbserver, 那有没有调试内核的呢? 没错, 就是本文介绍的kgdb, 当然早期有kdb, 后面kdb合并到kgdb了, 作为kgdb的前端, 后面我们会介绍, 而kgdb工具跟开发板通信支持kgdboc(串口)和kgdboe(网络),但新版内核只整合kgdboc, 网络被废弃了, 所以下文我们只介绍串口通信。
串口通信有个问题就是, 如果开发板有多余的串口接出来是最好的, 但一般只有控制台console接出来, 所以当我们占用console作为kgdboc的通信接口, 那内核printk等打印我们是没办法通过shell CRT软件看到的, 只有退出kgdb的时候才可以使用,
另外需要非常注意的是, 虚拟机必须用vmware, 不能用virtbox, 我用vbox-6.4版本的经常通信一会儿就没反应了。
2. kernel配置选项
Kernel hacking --->
[*] KGDB: kernel debugger --->
如果想用kdb 则选上“KGDB_KDB: include kdb frontend for kgdb”, 但触发kgdb是会先进入kdb模式, 也配置文件多出以下几个选项(注意红色):
--- target/linux/imx6ul/config-4.1 (revision 8040)
+++ target/linux/imx6ul/config-4.1 (working copy)
@@ -386,10 +386,12 @@
# CONFIG_COMPILE_TEST is not set
CONFIG_CONFIGFS_FS=y
# CONFIG_CONNECTOR is not set
+CONFIG_CONSOLE_POLL=y
CONFIG_CONSOLE_TRANSLATIONS=y
# CONFIG_CORDIC is not set
CONFIG_COREDUMP=y
# CONFIG_CORESIGHT is not set
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
# CONFIG_CPUFREQ_DT is not set
CONFIG_CPU_32v6K=y
CONFIG_CPU_32v7=y
@@ -550,7 +552,10 @@
# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_GPIO is not set
CONFIG_DEBUG_IMX_UART_PORT=1
-# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_INFO_DWARF4 is not set
+# CONFIG_DEBUG_INFO_REDUCED is not set
+# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KOBJECT is not set
@@ -751,6 +756,7 @@
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
# CONFIG_GAMEPORT is not set
+# CO