第21章 Linux设备驱动的调试之KGDB和使用仿真器调试内核

21.9 KGDB

    Linux直接提供了对KGDB的支持,KGDB采用了典型的嵌入式系统“插桩”技巧,一般依赖于串口与调试主机通信。为了支持KGDB,串口驱动应该实现轮询收发单一字符的成员函数,以供

drivers/tty/serial/kgdboc.c调用,譬如drivers/tty/serial/8250/8250_port.c中的:

static const struct uart_ops serial8250_pops = {
................................................................................
#ifdef CONFIG_CONSOLE_POLL
.poll_get_char = serial8250_get_poll_char,
.poll_put_char = serial8250_put_poll_char,
#endif

};

    在编译内核时,运行make ARCH=arm menuconfig时需选择关于KGDB的编译项目,如图21.6所示。


图21.6 KGDB编译选项配置

    对于目标板,需要在bootargs中设置与KGDB对应的串口等信息,如kgdboc=ttyS0,115200  kgdbcon。

如果想一开机内核就直接进入等待GDB连接的调试状态,可以在bootargs(Uboot给内核传递的参数)中设置kgdbwait,kgdbwait的含义是启动时就等待主机的GDB连接。若想在内核启动后进入GDB调试模式,可运行echo g > /proc/sysrq_trigger命令给内核传入一个键值是g的magic_sysrq。

    在调试PC上,依次运行如下命令就可以启动调试并连接至目标机(假设串口在PC上对应的设备节点是/dev/ttyS0):

# arm-eabi-gdb ./vmlinux
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0                              //连接目标机
(gdb)

之后,在主机上,可以使用GDB像调试应用程序一样调试使能了KGDB的目标机上的内核。

21.10 使用仿真器调试内核

    在ARM Linux领域,比较主流的是采用ARM DS-5 Development Studio方案。ARM DS-5是一个针对基于Linux的系统和裸机嵌入式系统的专业软件开发解决方案,它涵盖了开发的所有阶段,从启动代码、内核移植直到应用程序调试、分析。如图21.7所示,它使用了DSTREAM高性能仿真器,在Eclipse内包含了DS-5和DSTREAM的开发插件。


图21.7 DSTREAM仿真器和DS-5开发环境

    调试主机一般通过网线与DSTREAM仿真器连接,而仿真器则连接与电路板类似的JTAG接口,之后用DS-5调试器进行调试。DS-5图形化调试器提供了全面和直观的调试图,非常易于调试Linux和裸机程序,易于查看代码,进行栈回溯,查看内存、寄存器、表达式、变量,分析内核线程,设置断点。

    DS-5也提供了Streamline Performance Analyzer。ARM Streamline性能分析器为软件开发人员提供了一种用来分析和优化在ARM11和Cortex-A系列平台上运行的Linux和Android系统的直观方法。使用Streamline,Linux内核中需包含一个gator模块,用户空间则需要使能gatord后台服务器程序。关于Streamline具体的操作方法可以查看《ARM® DS-5 Using ARM Streamline》。

    

图21.8 ARM Streamline性能分析器


猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80667426