在imx6sx硬件平台(NXP嵌入式ARM)上使用Linux 3.14.52。
问题在于,除非在内核引导过程中存在设备树中指定的PCF8575 I2C GPIO扩展器,否则它们不会被实例化为/sys/class/gpio结构中的设备。设备在/sys/bus/i2c/devices/i2c-1
(i2c总线1)结构中列出,但在/sys/class/gpio
结构中未指定gpiochip。
一旦将这些设备添加到系统后,是否可以将它们分配为gpiochip?
在以前的(PowerPC)平台上,设备树中列出的所有设备都分配了gpiochip的设备,无论它们在内核引导期间是否打开。但是在我们的ARM平台上,设备必须在内核引导期间可用。我尝试过更改内核i2c/gpio选项(通过.config),使其尽可能接近先前的平台,但这似乎没有效果。
最佳答案
确保内核在2.6内核分支中对sysfs的工作方式有所不同。我也遇到过类似的问题。它与设备树的处理有关。设备树将变得不平坦,但这只会开始实际发现设备。如果设备不存在,则将不会对其进行探测,也不会在sysfs中创建条目。
Device Tree Usage
因此,设备树只会告诉内核要发现的内容,如果找不到,它实际上不会添加任何内容。
我可以确认gpiochip仅添加在您设备的探头上:
gpio-pcf857x.c
注意第397行对gpiochip_add
的调用
我建议您尝试使用设置为模块的gpio扩展器编译内核,然后在实际连接后对其进行insmod。
关于linux - Linux,ARM : Why is gpiochip<num> only created if I2C GPIO Expander is present at boot?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37168540/