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

Linux驱动开发常用调试方法汇总

引言:在 Linux 驱动开发中,调试是一个至关重要的环节。开发者需要了解多种调试方法,以便能够快速定位和解决问题。

1.利用printk

描述: printk 是 Linux 内核中的一个调试输出函数,类似于用户空间中的 printf。它用于在内核日志中输出调试信息,可以帮助开发者追踪内核代码的执行过程。

使用场景

  • 监控函数调用和变量值。
  • 追踪内核模块的加载和卸载过程。

example:

printk(KERN_INFO "Hello from my driver!");  // 输出信息到内核日志

查看日志: 使用 dmesg 命令或查看 /var/log/kern.log 文件可以查看 printk 输出的日志信息。

不同的SDK平台也有对于打印函数的重写,可以grep多找找。

2. OOP (Out of Process) 消息

描述: OOP 消息是指通过 dmesg 或系统日志查看内核在运行时产生的错误或调试信息,特别是与硬件设备交互时的错误消息。

使用场景

  • 诊断硬件错误。
  • 调试驱动程序的问题。

特点:OOP 消息中包含了出错时的调用栈和相关的内存信息,便于定位问题。

处理方式:如果遇到 OOP 消息,首先要分析调用栈,找出出错的函数和行号。

example:

OOP 消息通常出现在内核遇到错误时。例如,如果你的驱动程序访问了错误的内存地址,内核会在 dmesg 中显示相关的错误信息。

// 假设有个错误的指针使用
int *ptr = NULL;
*ptr = 10;  // 会导致内核崩溃

查看错误

dmesg | grep -i "error"  # 查看内核中的错误消息

3. straceltrace

strace

描述:strace 是一个强大的调试工具,用于跟踪用户空间程序执行时的系统调用和信号。

使用场景:可以帮助开发者了解驱动与用户空间程序之间的交互,特别是在系统调用返回错误时。

示例:使用 strace 跟踪一个程序:

strace -e trace=file ./my_program  # 只跟踪与文件相关的系统调用

ltrace:

描述:ltrace 类似于 strace,但它用于跟踪程序执行时的库函数调用。

使用场景:可以帮助开发者了解用户空间程序如何与库交互,以及调用了哪些驱动程序的接口。

ltrace ./my_program  # 跟踪库函数调用

相比之下你想跟踪用户程序调用的库函数就ltrace

你想跟踪系统调用,包括打开文件、读取、写入等 就用strace

4. 内核内置的 Hacking 选项

描述: Linux 内核提供了一些调试选项,通常通过内核配置选项开启,如 CONFIG_DEBUG_KERNEL、CONFIG_DEBUG_INFO 等。这些选项可以在内核编译时启用,以便于调试和分析。

使用场景

开启内核的内存调试和错误检查。

监测和调试系统资源使用情况。

示例: 在内核配置中启用调试选项后,编译和安装新内核。

example:

  • 进入内核源代码目录。
  • 运行 make menuconfig
  • 选择 "Kernel hacking",然后启用相关选项,如 "Kernel debugging"。
make
make modules_install
make install

5. ioctl 方法

描述: ioctl 是一种用于控制设备的系统调用,允许用户空间与内核之间进行复杂的交互。

使用场景

通过 ioctl 向内核传递命令和参数,控制设备行为或获取设备状态。

示例: 在驱动中实现 ioctl 接口,用户空间通过 ioctl 调用与驱动进行交互。

example:在驱动中实现 ioctl 接口。

#include <linux/fs.h>
#include <linux/uaccess.h>#define IOCTL_SET_VALUE  _IOW('a', 'a', int32_t*)static long my_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {int32_t value;switch(cmd) {case IOCTL_SET_VALUE:copy_from_user(&value, (int32_t*)arg, sizeof(value));printk(KERN_INFO "Value set to %d\n", value);break;default:return -EINVAL;}return 0;
}

用户空间调用:

int fd = open("/dev/my_device", O_RDWR);
int32_t value = 10;
ioctl(fd, IOCTL_SET_VALUE, &value);
close(fd);

6. /proc 文件系统

描述: /proc 是一个虚拟文件系统,提供内核和系统的信息。通过在 /proc 下创建文件,驱动程序可以提供对内核状态和参数的访问。

使用场景

通过 /proc 文件与用户空间进行简单的交互,获取或设置驱动的状态。

示例: 在驱动中创建 /proc/my_driver 文件,用户空间可以读取或写入该文件来控制驱动。

#include <linux/proc_fs.h>
#include <linux/uaccess.h>#define PROC_NAME "my_proc"static ssize_t my_proc_read(struct file *file, char __user *buf, size_t count, loff_t *offset) {return sprintf(buf, "Hello from /proc/my_proc\n");
}static struct proc_ops my_proc_ops = {.proc_read = my_proc_read,
};static int __init my_driver_init(void) {proc_create(PROC_NAME, 0, NULL, &my_proc_ops);return 0;
}static void __exit my_driver_exit(void) {remove_proc_entry(PROC_NAME, NULL);
}module_init(my_driver_init);
module_exit(my_driver_exit);

查看内容:

cat /proc/my_proc  # 查看 /proc 文件内容

7. kgdb

描述: kgdb 是 Linux 内核调试器,允许开发者在内核态中进行单步调试、设置断点等。

使用场景

用于调试内核模块和驱动程序,特别是在出现严重错误时。

示例: 通过配置内核选项启用 kgdb,然后使用 GDB 进行调试:

  • 确保在内核配置中启用了 CONFIG_KGDBCONFIG_KGDB_SERIAL_CONSOLE
  • 启动内核时,传递 kgdboc=ttyS0,115200 参数,指定串行控制台。
gdb vmlinux
(gdb) target remote /dev/ttyS0  # 连接到内核

相关文章:

Linux驱动开发常用调试方法汇总

引言&#xff1a;在 Linux 驱动开发中&#xff0c;调试是一个至关重要的环节。开发者需要了解多种调试方法&#xff0c;以便能够快速定位和解决问题。 1.利用printk 描述&#xff1a; printk 是 Linux 内核中的一个调试输出函数&#xff0c;类似于用户空间中的 printf。它用于…...

将列表中的各字符串sn连接成为一个字符串s使用;将各sn间隔开os.pathsep.join()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 将列表中的各字符串sn 连接成为一个字符串s 使用;将各sn间隔开 os.pathsep.join() [太阳]选择题 下列说法中正确的是? import os paths ["/a", "/b/c", "/d&q…...

算法题总结(八)——字符串

531、反转字符串二 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c…...

大数据开发--1.2 Linux介绍及虚拟机网络配置

目录 一. 计算机入门知识介绍 软件和硬件的概述 硬件 软件 操作系统概述 简单介绍 常见的系统操作 学习Linux系统 二. Linux系统介绍 简单介绍 发行版介绍 常用的发行版 三. Linux系统的安装和体验 Linux系统的安装 介绍 虚拟机原理 常见的虚拟机软件 体验Li…...

2024CSP-J复赛易错点

低级错误 不开long long见祖宗写代码要有输入&#xff0c;别没写输入就交写完代码要在本地测试&#xff0c;多想写极端测试数据&#xff0c;或对拍注意考官说文件夹怎么建&#xff0c;别文件夹建错&#xff0c;爆0别忘写freopen或忘给freopen去注释记着把.exe文件删掉考试时不…...

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…...

Spring Boot项目的创建与使用

1.通过IDE创建Spring Boot项目 2.目录结构 3.新建TestController控制器 Controller public class TestController {RequestMapping("/test")public ModelAndView test(RequestParam(name "name", defaultValue "刘德华") String name){ModelA…...

pytorch常用函数view、sum、sequeeze、cat和chunk

文章目录 view()函数sequeeze和unsequeezecat和chunk函数sum函数view()函数 view()相当于reshape、resize,重新调整Tensor的形状。 指定调整形状之后的维度import torch re = torch.tensor([1, 2, 3, 4, 5...

【STM32开发之寄存器版】(四)-独立看门狗IWDG

一 、前言 独立看门狗简介&#xff1a; STM32F103ZET6内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。 独立看门狗主要性能&#xff1a; 自由运行的递减计数器时钟…...

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM 一&#xff0c;文档简介二&#xff0c; 功能实现2.1 软硬件平台2.2 软件控制流程2.3 资源分配概览2.4 EB 配置2.4.1 Dio module2.4.2 Icu module2.4.4 Mcu module2.4.5 Platform module2.4.6 Port module2.4.7 Pwm module 2.5 …...

华为OD机试真题---绘图机器(计算面积)

题目描述 绘图机器的绘图笔初始位置在原点(0,0)&#xff0c;机器启动后按照以下规则绘制直线&#xff1a; 尝试沿着横线坐标正向绘制直线直到给定的终点E。期间可以通过指令在纵坐标轴方向进行偏移&#xff0c;offsetY为正数表示正向偏移&#xff0c;为负数表示负向偏移。 给…...

HarmonyOs 查看官方文档使用弹窗

1. 学会查看官方文档 HarmonyOS跟上网上的视频学习一段时间后&#xff0c;基本也就入门了&#xff0c;但是有一些操作网上没有找到合适教学的视频&#xff0c;这时&#xff0c;大家就需要养成参考官方文档的习惯了&#xff0c;因为官方的开发文档是我们学习深度任何一门语言或…...

uniapp+Android智慧居家养老服务平台 0fjae微信小程序

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 老年人 登…...

在一台电脑上实现网页与exe程序使用udp通信

要在同一台电脑上实现网页&#xff08;前端&#xff09;与 EXE 程序&#xff08;后端&#xff09;通过 UDP 通信&#xff0c;可以使用以下步骤。前端可以使用 JavaScript 通过 WebSocket 与自定义服务器进行通信&#xff0c;该服务器通过 UDP 发送和接收数据&#xff0c;再与 E…...

基于Java的GeoTools对Shapefile文件属性信息深度解析

目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile&#xff08;shp&#xff09;&#xff0c;或简称shapefile&#xff0c;是美…...

付费计量系统实体和接口(1)

13.System entities and interfaces 系统实体和接口 See also Clause 4 for a discussion on general concepts and Clause 5 for generic entity model. 参见条目 4 讨论总体概念、条目 5 通用实体模型。 An entity specification should specify the embodied functions and …...

网易博客旧文----bacnet学习系列之四----VTS的初步使用

bacnet学习系列之四----VTS的初步使用 2014-02-07 13:32:28| 分类&#xff1a; BACnet | 标签&#xff1a; |举报 |字号大中小 订阅 这是一个测试用 的工具&#xff0c;而且是开放源码的&#xff0c;下载地址为&#xff1a;VTS下载官网 也可以从我的网盘下载 VTS下载 我用的是…...

SpringIoC容器的初识

一、SpringIoC容器的介绍 Spring IoC 容器&#xff0c;负责实例化、配置和组装 bean&#xff08;组件&#xff09;。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这…...

队列的实现与讲解

一.概念与结构 1.概念 只允许在⼀端进行插⼊数据操作&#xff0c;在另⼀端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) ​ 入队列&#xff1a;进⾏插⼊操作的⼀端称为队尾 ​ 出队列&#xff1a;进⾏删除操作的⼀端称为队头 注意&…...

hbuilderx+uniapp+Android健身房管理系统 微信小程序z488g

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...