問(wèn)題描述
最近在學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)中SPI總線(xiàn)的驅(qū)動(dòng)框架,但在修改完設(shè)備樹(shù)添加完對(duì)應(yīng)的spi設(shè)備節(jié)點(diǎn)后,理應(yīng)在/sys/bus/spi下會(huì)有對(duì)應(yīng)的spi設(shè)備,我的目錄下面沒(méi)有。

然后我查看了/proc/device-tree,發(fā)現(xiàn)有對(duì)應(yīng)的spi設(shè)備節(jié)點(diǎn),我就先沒(méi)有過(guò)多理會(huì)這個(gè)問(wèn)題。

?

但在寫(xiě)完對(duì)應(yīng)的驅(qū)動(dòng)后加載spi對(duì)應(yīng)的.ko文件,.probe函數(shù)沒(méi)有執(zhí)行;卸載對(duì)應(yīng)的驅(qū)動(dòng)文件后.remove也沒(méi)有執(zhí)行(在終端沒(méi)有打印對(duì)應(yīng)的語(yǔ)句)。


原因分析:
這時(shí)我知道spi驅(qū)動(dòng)和spi設(shè)備沒(méi)有匹配,驅(qū)動(dòng)應(yīng)該沒(méi)有什么問(wèn)題,問(wèn)題大概率出現(xiàn)在.dts文件中對(duì)應(yīng)的spi設(shè)備節(jié)點(diǎn)。
解決方案:
我總看我的spi節(jié)點(diǎn)中的信息發(fā)現(xiàn)不出什么問(wèn)題,然后我實(shí)在沒(méi)辦法,將正點(diǎn)官方的設(shè)備樹(shù)對(duì)應(yīng)的spi節(jié)點(diǎn)信息復(fù)制到我的設(shè)備樹(shù)下,用修改過(guò)后的設(shè)備樹(shù)啟動(dòng),重新查看/sys/bus/spi/devices,發(fā)現(xiàn)出現(xiàn)了一個(gè)設(shè)備文件,然后重新加載驅(qū)動(dòng)、卸載驅(qū)動(dòng)對(duì)應(yīng)的.probe和.remove都會(huì)正常執(zhí)行了。
正點(diǎn)原子正常節(jié)點(diǎn)信息
&ecspi3 {
fsl,spi-num-chipselects = <1>;
cs-gpio = <&gpio1 20 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi3>;
status = "okay";
spidev: icm20608@0 {
compatible = "alientek,icm20608";
spi-max-frequency = <8000000>;
reg = <0>;
};
};
我的有錯(cuò)誤的節(jié)點(diǎn)信息
&ecspi3 {
fsl,spi-num-chipselects = <1>;
cs-gpio = <&gpio1 20 GPIO_ACTIVE_LOW>; //不能定義成cs-gpios
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi3>;
status = "okay";
spidev: icm20608@0 {
reg = <0>;
compatible = "alientek,icm20608";
spi_max_frequency = <8000000>;
};
};

?

?

我還是沒(méi)有發(fā)現(xiàn)到底是什么問(wèn)題,期間我還嘗試調(diào)整了一下每個(gè)屬性的順序,但還是不行。最后我在word中一句一句比較,最終發(fā)現(xiàn)了問(wèn)題。我的是spi_max_frequency,正點(diǎn)原子正常的是spi-max-frequency,然后查看綁定文檔確實(shí)不是''_''而是''-''。這個(gè)不會(huì)影響設(shè)備樹(shù),但可能就會(huì)導(dǎo)致內(nèi)核無(wú)法識(shí)別到是不是具體的spi設(shè)備。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-570264.html
總結(jié)
寫(xiě)代碼的時(shí)候還是仔細(xì)一些,可以減少一些奇奇怪怪的bug。不僅僅是spi設(shè)備,我猜想其他設(shè)備的節(jié)點(diǎn)屬性信息寫(xiě)錯(cuò),在對(duì)應(yīng)的總線(xiàn)下可能也不會(huì)出現(xiàn)相應(yīng)的設(shè)備文件。(未證實(shí))文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-570264.html
到了這里,關(guān)于嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)——解決/sys/bus/spi/devices下沒(méi)有對(duì)應(yīng)的spi設(shè)備文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!