【发布时间】:2016-11-14 11:03:48
【问题描述】:
Linux 内核:
我的问题是如何从内核驱动程序访问 SPI 从设备,如果该设备已被“spidev”驱动程序访问。
在硬件层面,我们在 SOC 端(Marvell Cetus)有一个 SPI 主设备,一个 SPI 从设备(FPGA 设备)连接到 4 线 SPI 总线顶部的主设备。 所以系统中只使用了一条SS线。
在软件层面,我们有 linux 内核 3.10.104,基于设备树源模型探测设备驱动程序。
在我们的 DTS 文件中,我们在 CS (ChipSelect) #0 上定义了一个 SPI 主机(“marvell,orion-spi”)和一个 SPI 从机(“spidev”)。 尝试在同一 CS #0 上的同一 SPI 主机下添加另一个 SPI 从机失败 - 抱怨只能将一个从机注册到同一 CS 上的主机。
(dmesg: "orion_spi f1010600.spi: 芯片选择 0 已经在使用")
这是我们 DTS 文件中的相关部分:
spi0: spi@10600 {
status = "okay";
spifpga@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "spidev";
reg = <0>;
spi-max-frequency = <25000000>;
};
lattice {
#address-cells = <1>;
#size-cells = <1>;
compatible = "msys_lattice_drv";
reg = <0>;
spi-max-frequency = <25000000>;
};
};
“spidev”经常被我们的用户空间进程使用,我们不能删除它。 此外,确实需要为从属 FPGA 添加新的内核驱动程序,以处理一些问题,包括内核空间中的中断。
假设这个设备已经由“spidev”处理,我们如何添加另一个内核驱动来处理同一个 SPI 从设备?
谢谢!
【问题讨论】:
-
您根本不能为一台设备安装两个驱动程序。这是不合逻辑的。你可能有一个XY问题。为从设备编写一个真正的SPI协议驱动,并消除spidev实例。
-
您以后必须删除
spidev。这是一个hack,很久以前就进入内核了。
标签: linux linux-kernel