代码改变世界

第十章

2016-07-08 10:30  1010101010  阅读(90)  评论(0编辑  收藏  举报

对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试。例如,设置断点,逐步跟踪代码、输出调试信息等。打印内核调试信息:printk,printk 函数的用法与printf 函数类似,只不过printk函数运行在内核空间, printf函数运行在用户空间。也就是说,像Linux 驱动这样的Linux内核程序只能使用printk函数输出调试信息。值得注意的是:大量使用printk函数会严重影响Linux驱动的性能,在正式发布Liunx驱动时要去掉可能影响性能的printk函数,要想挨个去掉printk函数,非常麻烦,所以就要利用c语言中的编译指令。

Linux系统中提供了一类工具,这些工具可以逐行跟踪程序的代码,这些工具包含用于调试用户空间程序的gdb、gdbserver和调试内核空间程序的kgdb

1、gdb调试用户空间程序,gdb可以跟踪调试用户空间的程序,只能在PC上进行测试

2、gdbserver远程调试用户空间程序,用gdbserver 测试运行在开发板、手机或Android模拟器上的程序。gdbserver是一个可以运行在ARM架构上的服务端程序,在开发板上使用gdbserver打开要测试的程序,然后通过串口、有线或无线网络可以在PC上进行调试

3、kgdb远程调试内核程序,最好的内核调试工具。提供类似printk函数的复制输出功能,允许开发人员直接在PC上通过GDB链接目标设备。