第十章 嵌入式Linux的调试技术
本章主要学习到如何利用开发板、Android模拟器以及一些函数、工具(gdb、gdbserver、以及kgdb)调试嵌入式Linux内核模块、可执行程序和共享库。
1.打印内核调试信息:printk
Printk 函数的用法和printf函数类似,但是printk函数运行在内核空间,而printf运行在用户空间,printk函数在printk.c文件中实现,路径为/root/lernel/linux_kernel_2.6.36/kernel/printk.c.他有自己的函数原型,其中第一个参数的值不加信息级别,默认值是KERN_WARNING。此函数既可以将日志信息写到日志文件,也可以将日志信息写到控制台。Printk文件是一个简单的有4个数字组成的文本文件,默认值如下:6 4 1 7,其中6将消息输出到控制台的级别,只有高于该级别的输出信息才会输出到控制台,4默认的信息日志级别。1控制台日志级别可被设置的最小值,即最高优先级别。7控制台日志级别的默认值。
2.防止printk 函数降低Linux驱动性能
大量使用printk函数频繁操作日志文件或控制台设备文件(/dev/console)会严重影响Linux驱动的驱动的性能。所以就要求linux驱动只在开发阶段使用printk函数输出消息,在正式发布linux驱动是将可能影响性能的printk函数去掉。然后最方便的方法就是C语言中的编译指令。
(1)可变参数的宏
(2)Do{}while(0),次循环体只执行一次就退出。
3.通过虚拟文件系统(/proc)进行数据交互
/proc并不是真正的文件系统,而是内存映射,他可以作为linux驱动与用户空间程序交互的工具。可以使用内核函数在/proc目录中创建和删除虚拟文件,也可以建立和删除虚拟目录。
4.调试工具
(1)用gdb调试用户空间程序
(2)用kgdb远程调试内核程序
总之LInux内核调试一直被很多人认为是困难的,大多数人宁愿直接使用printk函数输出调试信息,也不愿意使用各种命令进行调试。因为这样并不一定能换来更多的好处。本章介绍到的调试技术需要我们依据自己的经验不断去领悟,成为属于自己最好的资源。
http://www.cnblogs.com/xxyue/