在imx6sx硬件平台(恩智浦嵌入式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)更改为尽可能接近以前的平台,但这似乎没有效果。
答案 0 :(得分:1)
确保内核在2.6内核分支中对sysfs的工作方式不同。我也遇到过类似的问题。它与处理设备树有关。设备树将变得不平整,但这只会启动设备的实际发现。如果设备实际不存在,则不会对它们进行探测,也不会在sysfs中创建条目。
Linux板支持代码调用of_platform_populate(NULL,NULL,NULL,NULL) 开始在树的根部发现设备。该 参数都是NULL,因为从根目录开始 树,没有必要提供一个起始节点(第一个NULL),a 父结构设备(最后一个NULL),我们没有使用匹配 表(还)。对于只需要注册设备的电路板, .init_machine()可以完全为空,除了 of_platform_populate()调用。
因此设备树只会告诉内核要发现什么,如果找不到它,它实际上不会添加任何东西。
我可以确认仅在您的设备探测时添加了gpiochip:
请注意第397行到gpiochip_add
我建议尝试使用gpio扩展器设置为模块来编译内核,然后在实际附加后对其进行insmod。