当前位置: 首页 > news >正文

统信UOS设备驱动开发-调试优化

包含linux设备驱动开发的基础知识及统信UOS设备驱动的总体架构,常用的设备驱动开发调试优化手段及在环境搭建和代码编写过程中常见问题处理等。

文章目录

  • 一、驱动开发调试
    • 调试信息打印
    • debugfs
  • 二、KGDB使用
    • KGDB 配置
  • 三、bpftrace
    • 安装
    • 语言规则
    • 单行例程

在这里插入图片描述
在这里插入图片描述


一、驱动开发调试

调试信息打印

printk
驱动开发中,往往需要借助调试信息明确函数执行流程或者观测关键数据,此时我们可以使用内核提供的printk()接口输出信息到到内存环形缓冲区、终端、串口,由于printk()接口可用于中断上下文、进程上下文以及持有锁的情形而被内核开发者广泛使用。printk()接口定义如下:

asmlinkage __visible int printk(const char *fmt,…)

为区分不同的紧急程度,内核定义了0到7多个打印级别。如下所示,数字越大,相应的日志输出级别越低。

  //include/linux/kern_levels.h5 #define KERN_SOH        "\001"          /* ASCII Start Of Header */             6 #define KERN_SOH_ASCII  '\001'                                                  7                                                                                 8 #define KERN_EMERG      KERN_SOH "0"    /* system is unusable */                9 #define KERN_ALERT      KERN_SOH "1"    /* action must be taken immediately */  10 #define KERN_CRIT       KERN_SOH "2"    /* critical conditions */               11 #define KERN_ERR        KERN_SOH "3"    /* error conditions */                  12 #define KERN_WARNING    KERN_SOH "4"    /* warning conditions */                13 #define KERN_NOTICE     KERN_SOH "5"    /* normal but significant condition */  14 #define KERN_INFO       KERN_SOH "6"    /* informational */                     15 #define KERN_DEBUG      KERN_SOH "7"    /* debug-level messages */ 

使用printk()输出时可指定输出级别,如下所示

printk(KERN_ERR "%s:%d hello uos\n",__func__,__LINE__);//以KERN_ERR级别输出 "函数名:行号 hello uos"printk(KERN_INFO "%s:%d hello uos\n",__func__,__LINE__);//以KERN_INFO级别输出 "函数名:行号 hello uos"

或者使用与printk(XXX)对应的pr_xxx()版本(推荐),如下所示

pr_err("%s:%d hello uos\n",__func__,__LINE__);//同printk(KERN_ERR "%s:%d hello uos\n",__func__,__LINE__);pr_info("%s:%d hello uos\n",__func__,__LINE__);//printk(KERN_INFO "%s:%d hello uos\n",__func__,__LINE__);...

或者使用与printk(XXX)对应的dev_xxx()版本(针对设备驱动开发者),如下所示。其中dev_xxx()为pr_xxx()的对应变体,此接口行为与pr_xxx()接口一直,但会额外输出"设备名称"、"主设备号"以及"次设备号“(如果存在)信息用于调试。

dev_err(dev,“%s:%d hello uos\n”,func,LINE);//以error级别输出 “函数名:行号 hello uos”;

dev_info(dev,“%s:%d hello uos\n”,func,LINE);//以error级别输出 “函数名:行号 hello uos”;

系统默认日志输出级别为4,即只输出以KERN_EMERG、KERN_ALERT、KERN_CRIT、KERN_ERR、KERN_WARNING级别打印


http://www.mrgr.cn/news/65086.html

相关文章:

  • 详细分析Js中保留前几位小数的基本知识(附Demo)
  • 数据库Redis篇
  • centos7 安装python3.9.4,解决import ssl异常
  • ipv6的 fc00(FC00::/7) 和 fec0(FEC0::/10)
  • VsCode显示空格
  • 算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
  • 好多好多的排序方法——(C语言)
  • synchronized加锁原理以及锁升级过程
  • 2025上海市公务员考试报名流程详细教程
  • 数据结构之树
  • 简记Vue3(三)—— ref、props、生命周期、hooks
  • 如何基于pdf2image实现pdf批量转换为图片
  • Java毕业设计-基于SpringBoot+Vue的体育用品库存管理系统
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-12
  • 【Android面试八股文】你能说说kotlin怎么取消CPU密集型任务吗?
  • CentOS 7 软件/程序安装示例
  • 每周算法比赛
  • c++模板入门
  • Golang--函数、包、defer、系统函数、内置函数
  • 线性代数:Matrix2x2和Matrix3x3
  • 数据结构-二叉树中的递归
  • DBeaver的sql查询结果突然不见了,怎么办?
  • 练习题 - Scrapy爬虫框架 Cookies 本地终端数据
  • 每一次放纵自己,意味着比以前更弱小(8)
  • 数据结构-链表【chapter1】【c语言版】
  • Unity Job System详解(3)——NativeList源码分析