首先为什么是否需要将SPI设备节点暴露给用户空间?
我能想象两种可能:
- 您正在创建将使用用户空间的驱动程序
- 您与不同的设备试验(即显然没有内核空间的驱动程序尚)
物联网软件
在任何情况下:
根据马rk Brown(内核中SPI子系统的维护者):
spidev不应该直接出现在ACPI或DT中,因为我们关于控制硬件的最佳方法的想法可能会改变。
查看完整的discussion的详细信息。
不过马克用于支持在ACPI特殊SPI节点暴露spidev您可以使用
由于固件是很难改变对市场上现有的主板,您需要升级ACPI表中OS。目前一些工程师正在研究如何使这件事更容易的机制。现在你可以尝试最新的香草核心。让我们说V4.8-RC3为写这篇文章,并采取其中的一部分以使SPI设备(这只是一个例子,你需要调整它对于正在使用的硬件):
>
/*
* Intel Joule
*
* This adds an SPI test device to the SPI host controller available on
* Intel Joule breakout #1 header:
*
* pin name pin number
* -----------------------------
* SPI_1_MISO_LS 2
* SPI_1_MOSI_LS 4
* SPI_1_FS2_LS 8
* SPI_1_CLK_LS 10
*
* In Linux you need to set CONFIG_SPI_SPIDEV=y (or m) to be able to use
* this device.
*/
DefinitionBlock ("spidev.aml", "SSDT", 5, "INTEL", "SPIDEV", 1)
{
External (_SB_.PCI0.SPI2, DeviceObj)
Scope (\_SB.PCI0.SPI2)
{
Device (TP0) {
Name (_HID, "SPT0001")
Name (_DDN, "SPI test device connected to CS2")
Name (_CRS, ResourceTemplate() {
SpiSerialBus (
2, // Chip select
PolarityLow, // Chip select is active low
FourWireMode, // Full duplex
8, // Bits per word is 8 (byte)
ControllerInitiated, // Don't care
1000000, // 1 MHz
ClockPolarityLow, // SPI mode 0
ClockPhaseFirst, // SPI mode 0
"\\_SB.PCI0.SPI2", // SPI host controller
0 // Must be 0
)
})
}
}
}
既然你没有指出确切的规格,你可能需要做一个额外的工作。对于较旧的Atom,vanilla Linux内核缺少一个补丁到propagate ACPI handle to the platform driver。
请详细说明使用什么板的确切的规格。 – 0andriy
@Andy:添加板规格 – jackhab
嗯......没有看到任何东西,除了名称。我们都可以谷歌吗? – 0andriy