在imx6sx硬件平台(恩智浦嵌入式ARM)上使用Linux 3.14.52。Linux,ARM:为什么gpiochip <num>仅在引导时存在I2C GPIO扩展器时才创建?
问题是,设备树中指定的PCF8575 I2C GPIO扩展器没有实例化为/ sys/class/gpio结构中的设备,除非它们在内核引导期间存在。这些器件列在/sys/bus/i2c/devices/i2c-1
(I2C总线1)结构中,但没有在/sys/class/gpio
结构中给出GPIO芯片。
有没有办法让这些设备在启动后被指定为gpiochip,一旦它们被添加到系统中?
在以前的(PowerPC)平台上,设备树中列出的所有设备都分配了gpiochip,无论它们在内核引导期间是否打开。但是通过我们的ARM平台,这些设备在内核启动时必须可用。我试过尽可能地将内核i2c/gpio选项(通过.config)更改为尽可能接近前一个平台,但这似乎没有效果。
你的内核版本有变化吗?当设备被实际探测时,较新的内核可能只是简单地创建sysfs条目。也许查看源代码,看看GPIO扩展器的探测功能发生了什么。 – bodangly
是的,内核已经改变。 PowerPC是2.6.37.6所以完全不同的版本。同意这可能是改变的原因。我想我可以尝试深入研究内核源码,但不知道探针的位置;也许gpiolib.c?希望有一个后启动的方式来处理这个,而不用改变内核。 – Bruce
正如您在我的答案中所看到的,我可以确认只有在设备探测时才会添加它。 – bodangly