• 嵌入式linux的调试技术


    打印内核调试信息:printk

    Printk函数运行在内核空间,printf函数运行在用户空间。Linux内核程序只能使用printk函数输出调试信息。

    防止printk函数降低linux驱动性能

    Linux驱动只在开发阶段使用printk函数输出消息。正式发布linux驱动是将可能影响性能的printk函数去掉。利用c语言中的编译指令(#if, #else, #endif等)

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

    /proc经常被用来作为内核空间与用户控件进行数据交互的工具。/proc文件系统的行为方式与设备文件系统/dev类似。/proc并不是真正的文件系统,而是内存映射。

    Proc_mkdir

    name:虚拟目录名称

    parent:虚拟目录父目录的proc_dir_entry结构体指针

    create_proc_entry

    name:虚拟文件名称

    mode:虚拟文件的访问权限,等同于Linux问价的访问权限

    parent:虚拟文件父目录的proc_dir_entry结构体指针。

    Create_proc_read_entry

    name:虚拟文件名称

    mode:虚拟文件的访问权限,等同于Linux问价访问权限。

    base:虚拟文件父目录的proc_dir_entry结构体指针。    

    read_proc:处理读动作的函数指针。

    data:用于虚拟文件系统的数据。

    remove_proc_entry

    name:要删除的虚拟文件的名称

    parent:虚拟文件父目录的proc_dir_entry结构体指针

    调试工具

    这些工具可以逐行跟踪程序代码

    1.用gdb调试用户空间程序

    跟踪调试用户空间的程序。只可在pc上进行测试

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

      测试运行在开发板、手机或者android模拟器上的程序。可运行在arm架构上的服务端程序

    3.用kgdb远程调试内核程序

      提供类似printk函数的日志输出功能,允许开发人员直接在pc上通过GDB连接目标设备。

  • 相关阅读:
    SQL查询出现1055 this is incompatible with sql_mode=only_full_group_by
    Nacos的9848端口报错:Docker容器的Nacos2.x版本
    将Object数组转换为String数组
    nacos2.x配置
    出现错误vuecli · Failed to download repo vuejstemplates/webpack: XXX的解决方法
    iOS开发——设置支持的iOS设备(512m内存以上设备)
    js 深度合并两个对象
    vue 前端解决跨域
    git 在idea中解决冲突
    前端抱怨API响应慢,怎么办
  • 原文地址:https://www.cnblogs.com/orange921/p/5638466.html
Copyright © 2020-2023  润新知