我的目标是在Intel主板(带有C1037U处理器的NM70芯片组)上控制Peppermint 4 Linux(内核版本3.8.0)中的GPIO引脚。
我正在调试我正在使用sysfs接口的问题并试图了解/ sys / kernel / debug / gpio将为空的条件?
尝试通过
导出引脚0到255时 echo XX > /sys/class/gpio/export
对于XX从0到255,我收到以下错误消息
echo: write error: No such device
在什么条件下/ sys / kernel / debug / gpio是空的?
我正在尝试使用sysfs接口,它允许通过文件系统从用户空间访问GPIO引脚。
我已成功遵循https://help.ubuntu.com/community/Kernel/Compile的“备用构建方法:老式Debian方式”部分重新编译内核,以便在用户空间中公开GPIO访问并打开GPIO的调试模式:
编译新内核后,我第一次能够在/ sys / class / gpio中看到GPIO文件夹。然后,理论上,它应该是能够通过写入文件系统来打开/关闭GPIO端口的情况。 http://falsinsoft.blogspot.co.uk/2012/11/access-gpio-from-linux-user-space.html概述了这种方法。
尝试通过
导出引脚0到255时 echo XX > /sys/class/gpio/export
对于XX从0到255,我收到以下错误消息
echo: write error: No such device
尝试通过
导出0到255范围之外的引脚 echo XX > /sys/class/gpio/export
我收到以下错误消息
echo: write error: Invalid argument
教程建议这可能是因为GPIO端口是为另一个程序保留的,如果是这样,调试文件(/ sys / kernel / debug / gpio)将能够显示它们的保留位置。
但是,/ sys / kernel / debug / gpio为空。
我可以看到并控制BIOS中的GPIO引脚(将引脚更改为输入或输出高/低)。
答案 0 :(得分:2)
/ sys / kernel / debug / gpio将为空(警告:当我说 GPIO设备时,我不是说硬件,而是它的内核表示。)
因此,这些GPIO设备在运行时由内核注册,并与特定的 GPIO设备驱动程序相关联。
反过来,GPIO设备驱动程序被选中并与给定设备相关联,因为它声明了与所述GPIO设备的兼容性。
,例如,内核将匹配PCI供应商和产品ID,并探测声称支持该PCI供应商/产品的GPIO驱动程序。探测GPIO驱动程序时,它通常会注册GPIO设备实例。
最后,注册的GPIO设备提供了/ sys / kernel / debug / gpio中显示的GPIO。
以上是所谓的"设备驱动程序模型的一部分"在Linux中。虽然它有点过时,但您可以阅读[1]。
现在,让我们看看您需要为NM70芯片组选择哪种GPIO驱动程序。维基百科说,芯片组的代号是" Panther Point-M" [2]。幸运的是,lpc_ich驱动程序可以支持它。您必须使用CONFIG_LPC_ICH = y构建内核。
或者,如果您的GPIO由PCI设备提供,您可以使用 lspci 来获取ID,然后在内核源代码中获取这些ID。
[1] http://www.oreilly.com/openbook/linuxdrive3/book/ch14.pdf