Cal*_*die 5 embedded embedded-linux sysfs gpio
我的目标是控制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引脚(将引脚更改为输入或输出HIGH / LOW)。
如果没有注册GPIO 设备,/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,然后在内核源代码中 grep 查找这些 ID。
[1] http://www.oreilly.com/openbook/linuxdrive3/book/ch14.pdf
[2] https://en.wikipedia.org/wiki/List_of_Intel_chipsets