zoukankan      html  css  js  c++  java
  • 第十章嵌入式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远程调试内核程序

  • 相关阅读:
    python中元类(metaclass)的理解
    aiohttp
    async/await
    asyncio
    协程
    Bayesian Non-Exhaustive Classification A case study:online name disambiguation using temporal record streams
    技术网址
    网站
    各种网址
    OpenGL学习网址2
  • 原文地址:https://www.cnblogs.com/maxgty/p/5653946.html
Copyright © 2011-2022 走看看