第十章嵌入式Linux的调试技术

第十章嵌入式Linux的调试技术

第十章主要介绍如何利用开发板、Android模拟器以及一些函数、工具(gdb、gdbservice以及kgdb)调试嵌入式Linux内核模块、可执行程序和共享库。

       对于复杂的Linux驱动以及HAL等程序库,需要使用设置断点、逐步跟踪代码、输出调试信息等方法对其进行调试。

       对于嵌入式Linux内核模块、可执行程序、共享库的调试可能要更复杂一些。因为在大多数时候需要至少两台机器(开发机和目标机)经行调试。

第一节打印内核调试信息:printk

       printk函数运行在内核空间,与运行在用户空间的printf函数类似。像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息。

       在图形界面将printk文件的第一个数字设为8,仍然不会在控制台输出任何消息。只有在字符界面下的控制台,执行build.sh脚本文件,才能在控制台输出相应的消息。

第二节防止printk函数降低Linux驱动性能

       由于大量使用printk函数频繁操作文件日志或者控制台文件(/dev/console)会严重影响Linux驱动的性能(写磁盘的速度远没有读写内存的速度快)。因此,要求Linux驱动只在开发阶段使用printk函数输出消息,在正式发布的Linux驱动是将可能影响性能的printk函数去掉。最好的方法是利用C语言中的编译指令(#if、#else、#endif等)。

第三节通过虚拟文件系统(/proc)进行数据交互

       在Linux文件系统中,/proc经常被用来作为内核空间与用户空间进行数据交互的工具。/proc是虚拟文件系统,是内存映射。所有读写/proc的操作都是对内存的读写,同时速度远比读写/dev文件系统快速。/proc文件系统也可作为Linux驱动与用户空间程序交互的工具。

第四节调试工具

       用gdb调试用户空间程序

       用gdbserver远程调试用户空间程序

       用kgdb远程调试内核程序

posted @ 2016-07-08 16:51  maxgty  阅读(176)  评论(0编辑  收藏  举报