
文章目录一、前言二、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流程图threeconfig硬件dts解析DTS读取驱动resetenableconfig注册device注册调试手段三、调试手段驱动调试和硬件强相关需要掌握一定的技巧思路否则通常无从下手通常有如下思路先控制后数据先看控制通道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、可以通过万用表测导通的形式测试是否是共地的。以上就是驱动开发调试的全部内容啦希望对大家有所帮助欢迎讨论~