写了个spi1的驱动函数,insmod后发现没有反应。
添加打印信息后,发现执行了驱动入口函数(在入口函数中执行了spi_register_driver),但是probe函数没有执行,检查compatible和设备树是相同的,于是开始排查:
1、搜索compatible,看看是否其他驱动或者设备树节点已经使用
2、找个相似功能的驱动,看下能否正常probe。
我找了个spi0的驱动,发现工作是正常的,于是一点点修改为spi1,当把pinctrl-0 = <&spi0_pins>;
改为pinctrl-0 = <&spi1_pins>;
时,驱动不能probe,于是猜测是IO口冲突导致的。
果然uart3和spi1使用了相同的IO
spi1_pins: spi1 {
pins = "PA15", "PA16", "PA14", "PA13";
function = "spi1";
};
...
uart3_pins: uart3 {
pins = "PA13", "PA14";
function = "uart3";
};
uart3_rts_cts_pins: uart3_rts_cts {
pins = "PA15", "PA16";
function = "uart3";
};
并且uart3还被激活了:
&uart3 {
pinctrl-names = "default";
pinctrl-0 = <&uart3_pins>, <&uart3_rts_cts_pins>;
status = "okay";
};
把status = "okay";
改为status = "disabled";
问题解决。