Embedded 在什么条件下/sys/kernel/debug/gpio将为空? 总结

Embedded 在什么条件下/sys/kernel/debug/gpio将为空? 总结,embedded,embedded-linux,gpio,sysfs,Embedded,Embedded Linux,Gpio,Sysfs,我的目标是在英特尔主板(配备C1037U处理器的NM70芯片组)上控制Peppermint 4 Linux(内核版本3.8.0)中的GPIO引脚 我正在调试我在使用sysfs接口时遇到的问题,并试图了解/sys/kernel/debug/gpio为空的条件 尝试通过导出引脚0到255时 echo XX>/sys/class/gpio/export 对于从0到255的XX,我得到以下错误消息 echo:写入错误:没有此类设备 在什么条件下/sys/kernel/debug/gpio将为空 背景

我的目标是在英特尔主板(配备C1037U处理器的NM70芯片组)上控制Peppermint 4 Linux(内核版本3.8.0)中的GPIO引脚

我正在调试我在使用sysfs接口时遇到的问题,并试图了解/sys/kernel/debug/gpio为空的条件

尝试通过导出引脚0到255时

echo XX>/sys/class/gpio/export

对于从0到255的XX,我得到以下错误消息

echo:写入错误:没有此类设备

在什么条件下/sys/kernel/debug/gpio将为空

背景
  • 主板:配备NM70芯片组的英特尔
  • 处理器:C1037U处理器
  • 操作系统:Peppermint 4 Linux
  • 内核版本:3.8.0
  • GPIO接口:sysfs
我试图使用sysfs接口,它允许通过文件系统从用户空间访问GPIO引脚

我已经成功地按照中的“替代构建方法:老式的Debian方式”部分重新编译内核,以便在用户空间中公开GPIO访问,并打开GPIO的调试模式:

编译新内核后,我第一次能够在/sys/class/GPIO中看到GPIO文件夹。然后,从理论上讲,应该能够通过写入文件系统来打开/关闭GPIO端口。该方法概述于

尝试通过导出引脚0到255时

echo XX>/sys/class/gpio/export

对于从0到255的XX,我得到以下错误消息

echo:写入错误:没有此类设备

尝试导出0到255范围以外的管脚时

echo XX>/sys/class/gpio/export

我收到以下错误消息

echo:写入错误:参数无效

本教程建议这可能是因为GPIO端口是为另一个程序保留的,如果是这样,调试文件(/sys/kernel/debug/GPIO)将能够显示它们的保留位置

但是,/sys/kernel/debug/gpio为空

我可以看到和控制BIOS中的GPIO引脚(将引脚更改为输入或输出高/低)

相关问题


如果没有注册gpio设备,则/sys/kernel/debug/gpio将为空(警告:当我说gpio设备时,我指的不是硬件,而是它的内核表示形式)

因此,这些GPIO设备在运行时由内核注册,并与特定的GPIO设备驱动程序相关联

反过来,GPIO设备驱动程序被选择并与给定设备关联,因为它是声明与所述GPIO设备兼容的驱动程序

例如,内核将匹配PCI供应商和产品ID,并探测声称支持该PCI供应商/产品的GPIO驱动程序。当探测GPIO驱动程序时,它通常会注册GPIO设备实例

最后,注册的GPIO设备是提供GPIO的设备,如/sys/kernel/debug/GPIO所示

以上是Linux中所谓的“设备驱动程序模型”的一部分。虽然有点过时,但你可以阅读[1]

现在,让我们看看您需要为NM70芯片组选择什么GPIO驱动程序。维基百科说芯片组的代号是“豹点M”[2]。幸运的是,lpc_ich驱动程序可以支持它。您必须使用CONFIG_LPC_ICH=y构建内核

或者,如果您的GPIO是由PCI设备提供的,您可以使用lspci获取ID,然后在内核源中为这些ID提供grep

[1]


[2]

我对x86 Linux不太确定。然而,/sys/kernel/debug/gpio是空的,这可能意味着Linux认为您没有gpio。您的内核必须在硬件上支持GPIO。您将如何检查您的内核是否在硬件上支持GPIO?(新问题开始于)