zoukankan      html  css  js  c++  java
  • 第十章 嵌入式Linux的调试技术读后感

    本章主要讲了嵌入式Linux的调试技术。

    (一)打印内核调试信息:printk

    Printk函数用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间,printk函数在printk.c文件中实现。

    Printk函数的原型如下:asmlinkage int printk(const char *fmt,...)

    第1个参数表示格式字符串,后面是可变参数。第一个参数值前面加尖括号包含的数字表示输出的日志级别,共有8个级别,在linux/kernel.h头文件中定义。

    不管消息级别是多少,所有通过printk函数发出的消息都会输出到日志文件(就算有的消息输出到控制台,也会同时输出到日志文件)。

    (二)  防止printk函数降低Linux驱动性能

    虽然使用printk函数可以很方便地将消息写入日志文件或控制台。但大量使用printk函数频繁操作日志问阿金或控制台设备文件会严重影响Linux驱动的性能。因此,这就要求Linux驱动只在开发阶段使用printk函数输出消息,在正式发布Linux驱动时将可能影响性能的printk函数去掉。最好的方法无疑是利用C语言中的编译指令。(#if、#else、#endif等)。如果不想使用printk输出消息,只要将#if中的1改为0即可不使用printk输出消息。

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

    /pron用来作为内核空间与用户空间进行数据交互的工具,它的文件系统的行为凡是与设备文件系统(/dev)类似,/pron是虚拟文件系统,是内存映射,所有读写/pron的操纵都是对内存的读写,因此,它也可以作为Linux驱动与用户空间程序交互的工具。

    /pron 文件系统主要通过proc_dir_entry.read_proc和proc_dir_entry.read_write函数指针来设置读写/pron目录中的虚拟文件的动作处理函数,proc_dir_entry结构体代表一个虚拟目录或文件

    (四)  调试工具

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

    1. gdb调试用户空间程序

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

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

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

      3.kgdb远程调试内核程序

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

  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/mayue777/p/5638323.html
Copyright © 2011-2022 走看看