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

    10.1  打印内核调试信息:printk

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

    printk 函数的原型

    asmlinkage int printk(const char * fmt, ... )

    printk 函数至少要有1个参数(格式字符串),如果格式字符串中包含有占位符,后由必须跟与占位符相等数量的参数,以便一一对应传入printk 函数如果想让printk 函数将消息输出到控制台.还需要另外一个条件,就是要求在字符界面下操作,printk 函数只有用在字符界面的控制台上才能正常输出消息.虽然使用printk 函数可以很方便地将消息写入日志文件或控制台。但大量使用printk 函数频繁操作日志文件或控制台设备文件会严重影响Linux 驱动的性能,后期要删除printk函数。

    查询Ubuntu Linux的日志消息:

    # cat /var/log/syslog

    当日志文件内容很多时,可以使用grep或tail命令过滤显示的内容

    # dmesg | grep printk

    # cat /var/log/syslog | grep printk

    # tail –n 10 /var/log/syslog

    10.2  防止printk函数降低Linux驱动性能

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

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

    在Linux 文件系统中,/proc 经常被用来作为内核空间与用户空间进行数据交换的工具。/proc 文件系统和/dev 文件系统一样,也需要设置访问文件的动作处理函数(主要是读写操作)。/dev 文件系统通过且le_operations.read 和file_operations. write 函数指针变量设置读写设备文件的读写作处理函数。而/proc 文件系统主要通过proc_dir_entry.read_proc 和proc_dir_entry.read_write 函数指针来设置读写/proc 目录中的虚拟文件的动作处理函数。

    有四个函数   proc_mkdir   create_proc_entry     create_proc_read_entry     remove _proc _ entry

    create _proc _read_ entry 函数在内部是通过调用create_proc _ entry函数实现的。

    Linux 文件的读写由属性决定.在程序中可以用八进制表示,例如0666 表示八进制的666,也就是二进制的110110110。如果查看文件属性,会看到文件开头是-rw-rw-rw-.而将文件属性设为0444 ,贝lj文件属性是-r--r--r--,表示只读。

    删除虚拟目录之前, 要先删除虚拟自录中的虚拟文件。

    10.4  调试工具

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

    gdb 可以跟踪调试用户空间的程序。

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

    用kgdb 远程调试内核程序,Kgdb 除了提供类似printk 函数的日志输出功能,还允许开发人员直接在PC 上通过GDB 链接目标设备,Kgdb 包含了两部分: kgdb 内核和一牵连接接口。


  • 相关阅读:
    关于'selffilter' is not a registered tag library. Must be one of:
    关于Django报错django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configure
    大杂烩
    PyQt5多个GUI界面设计
    OpenCV读取图像问题:OpenCV(3.4.3) D:BuildOpenCVopencv-size.width0 && size.height0 in function 'cvimshow'
    MOOC课程信息D3.js动态可视化
    详解教务系统模拟登录与爬取二
    教务系统模拟登录与成绩爬取一
    pyecharts各省人口GDP可视化分析
    python爬虫伪装技术应用
  • 原文地址:https://www.cnblogs.com/zhuixinshaonian/p/5652855.html
Copyright © 2011-2022 走看看