当前位置:首页>Linux>Linux驱动开发调试通用流程

Linux驱动开发调试通用流程

  • 2026-09-10 04:15:41
Linux驱动开发调试通用流程

一、前言

本文介绍BSP驱动开发和调试经验,驱动是和硬件打交道,那就要明确硬件和软件的分界线,硬件一般负责模拟信号、大数据量的处理等工作,而驱动则专注于控制流。所以作为一个BSPer,走读datasheet时、看代码等主要关注配置流。

二、Linux驱动开发

Linux的驱动模型bus-device-driver基本已被说烂了,本文不再过多赘述,不了解的同学可以自行搜索。本文则专注于驱动初始化probe流程应该做的事情来展开,提取共性的内容:

  • probe流程

主要分3个大流程:

1、从dts中解读驱动配置

2、配置硬件

3、对接Linux驱动子系统

  • 操作硬件

遵循从外设的全局配置到局部配置,以网络交换芯片为例,先配global参数比如使能等,再配每个port的参数。通常流程如下:

1、reset:芯片复位,寄存器回复默认值

2、enable:使能芯片

3、config: 配置流,先global,再局部到每个port

  • 对接Linux软件驱动子系统

1、对接Linux驱动子系统bus-device-driver模型,注册device结构。Linux驱动通过OPS实现对接,硬件驱动层ops负责操作底层寄存器等操作。

2、注册调试手段:sys/proc/字符设备等。

mermaid流程图

三、调试手段

驱动调试和硬件强相关,需要掌握一定的技巧思路,否则通常无从下手,通常有如下思路:

  • 先控制后数据

先看控制通道(I2C/SPI等)是否联通,通过dump寄存器查看,是否配置生效。

  • dump寄存器列表

dump所有寄存器用于调试,好多驱动会提供ui读写寄存器的工具可以分析每个字段的含义。这里提一句供应商通常提供的资料通常包括:sample code、官方docs官网、datasheet手册、user guide用户手册。

  • 通信类调试方法

网卡设备、摄像头MIPI总线,

1、抓包

2、查看link状态

3、查看错包统计、错误统计

  • 调试手段先行

驱动开发阶段硬件是个黑盒子,所以调试和检查手段很重要,调试手段先行,先确认验收手段,明确“正确的长什么样子”,通过对比验证建立认知。

  • 分层调试

比如OSI分层模型、PHY、MAC、网络层等,每一层都要有调试手段,从下层往上排查。

  • 硬件优先

嵌入式是软硬配合的工作,有时候软件死活调不出来,可能是硬件接错了,所以一定要拉上硬件同事一起分析,比如常见的问题:

1、电平不匹配

GPIO空载信号正常,但是接上负载信号就变形。

2、板子烧了

控制信号死活不响应,需要示波器测量总线信号

3、连接线质量问题等等。

  • 硬件调试工具

硬件:万用表、逻辑分析仪、示波器。

万用表:GPIO高低电平,PWM脉宽,可以量最重的电压值。

逻辑分析仪:看数字信号,I2C时序、PWM脉宽等低速信号。

示波器:很重要,示波器看模拟信号,有时候数字信号正常,模拟信号可能出现振铃,比如可能会导致软件中出现中断风暴问题。

  • 多系统共地

1、多个电路板之间要通过GPIO连接,要共地,否则电平会飘。

2、使用逻辑分析仪和示波器时也要和待测设备共地。

3、同一套电源系统供电,会共电源地。

4、可以通过万用表测导通的形式测试是否是共地的。

以上就是驱动开发调试的全部内容啦,希望对大家有所帮助,欢迎讨论~

最新文章

随机文章