驱动调试
如何利用dts
注意关注gpio和irq
注意 等号 左边变量 与驱动 probe函数里边对应:
如何调gpio
想知道gpio电平状态
在driver中调用api后,编译下载,看/sys/class/gpio目录
如何调试irq
调试时候需要确定硬件是否产生中断:后看需要的文件(本质看源码)
cat /proc/interrupts
后
cd /proc/irq/irq_num
dts和sysfs有什么关联
方便确定使用的设备用的哪个系统dts
查看运行的系统设备树相关信息:包括dts节点以及属性均在sysfs
cd /sys/firmware/devicetree/base
sysfs用处
sysfs可以看出devic是否注册成功,存在的device,driver是否匹配等;
- 查看device是否注册,eg:
i2c总线下的设备,首先确定设备挂接的总线是哪个(i2c0,i2c1),例如i2c1,从地址0x1c,那么/sys/bus/i2c/devices/下查看是否有 1-001c即可 - 如何确定device是否匹配了驱动?进入1-001c 目录,可以看到driver的符号链接,如果没有,就是没有driver
- 如何确定driver是否注册?cd /sysfs/bus/i2c/drivers 同上
排查driver的probe没有执行问题
probe是否执行只和device和driver是否匹配成功有关,排查方法:
- 通过sysfs确定对应的device是否注册成功
- 通过sysfs确定对应的driver是否注册成功
- 通过sysfs中的dts展开信息得到compatible属性的值,然后和driver的compatible进行对比
1.1 如果device没注册:首先通过sysfs中dts展开文件查看是否有添加的device信息,没有就在dts添加device信息;如有添加。查看设备树中相应设备status属性是否是 okay
2.1 如果driver没注册就查看对应Makefile是否参与编译,看log信息,是不是驱动注册时报错了
原文:驱动调试技巧点滴分享