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

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

    2)Printk函数至少要有1个参数,如果格式字符串中包含有占位符,后面必须跟与占位符相等数量的参数,以便一一传入Printk

    函数。

    3)如果想修改Printk文件中的内容 ,要求任何信息都输出到控制台,可以在Linux终端执行下面的命令。

    # echo 8 > /proc/sys/kernel/Printk

    4)虽然使用Printk函数可以很方便地将消息写入日志文件或控制台。但大量使用Printk函数频繁操作日志文件或控制台设备文件会严重影响Linux驱动的性能,因此,这就要求Linux驱动只在开发阶段使用Printk函数输出消息,在正式发布Linux驱动时将可能影响性能的Printk函数去掉。最好的方法无疑是利用C语言中的编译指令。

    5)Printk函数在控制台显示消息是通过/dev/console设备文件实现的。该设备文件只在字符界面的控制台下才起作用,所以Printk函数只有用在字符界面的控制台上才能正常输出消息。

    6)在Linux文件系统中,/proc经常被用来作为内核空间与用户空间进行数据交互的工具。/proc文件系统的行为方式与设备文件系统类似。/proc是虚拟文件系统,也就是说,/proc并不是真正的文件系统,而是内存映射。所以读写/proc的操作都是对内存的读写。所以读写/proc文件系统的速度要远比读写/dev文件系统的速度快。因此,/proc文件系统也可作为Linux驱动与用户空间程序交互的工具。

    7)在Linux驱动程序中可以使用内核函数在/proc目录中创建和删除虚拟文件,也可以建立和删除虚拟目录。

    8)gdb可以 跟踪调试用户空间的程序。尽管一般不会直接使用gdb命令在手机、开发板或模拟器上调试程序,但这些调试命令仍然可以用于gdbserver远程调试。

    9)由于gdb_debug是基于ARM处理器的可执行程序,因此需要使用专门用于调试基于ARM处理器的程序的调试器,而且最好使用哪个版本编译的程序,就使用与之对应版本的调试器,虽然gdb_debug是在Android模拟机上运行的,但在Linux终端执行调试器时仍然需要指定gdb_debug。

    10)kgdb除了提供类似Printk函数的日志输出功能,还允许开发人员直接在PC上通过GDB链接目标设备。

    11)Kgdb包含:Kgdb内核和一套连接接口。这些接口目前支持串口tty设备连接和以太网连接。其中串口链接需要通过内核参数kgdboc指定要连接的串口tty设备;以太网连接通过内核参数kgdboe指定IP和端口号。

  • 相关阅读:
    常用排序算法
    多线程基础知识 转
    转 大型项目架构演进过程
    TCP/IP 思维导图
    Java8 List字符串 去重
    docker lnmp php
    jpa 批量插入
    备忘提醒
    IntelliJ IDEA像Eclipse一样打开多个项目(转)
    IntelliJ Idea 常用快捷键列表
  • 原文地址:https://www.cnblogs.com/wl12/p/5652187.html
Copyright © 2011-2022 走看看