本章主要讲Linux调试技术。打印内核调试信息:printk,printk函数运行在内核空间,linux内核程序只能使用printk函数输出调试信息。printk文件由一个4个数字组成文本文件。6:将消息输出到控制台的级别。4:默认的消息日志级别。1:控制台日志级别可被设置的最小值。7:控制台日志级别的默认值。
在不想使用prink输出消息时,还需要了解可变参数的宏和do while。通过虚拟文件系统进行数据交互:在 Linux文件系统中/proc被用来作为内核空间与用户空间进行数据交互的工具。/proc文件系统和/dev文件系统一样,需要设置访问文件的动作处理函数。而/proc文件系统主要通过 proc_dir_entry.read_proc和proc_dir_entry.read_write函数指针来设置读写处理函数。
调试工具:gdb、gdbserver和调试内核空间程序的kgdb。gdb可跟踪调试用户空间的程序。quit用于退出gdb调试界面;list用于列出程序中的代码。用gdbserver远程调试用户空间程序,是一个可以运行在ARM架构上的服务端程序。首先进入Android模拟器的终端,然后进入data/local目录。Android模拟器只能通过端口映射方式使用gdbserver调试程序。
用kgdb远程调试内核程序,kgdb除了提供类似prink函数的日志输出功能,还让开发人员在pc上链接目标设备。kgdb包含两部分:kgdb内核和一套链接接口,支持串口tty设备连接和以太网连接。用kgdb调试Linux内核前需要先配置Linux内核和设置内核参数,使用make menuconfig命令进Linux内核配置菜单中。