在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/

10-09 21:55