Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux,ARM:为什么gpiochip<;num>;仅在启动时存在I2C GPIO扩展器时创建?_Linux_Linux Kernel_Embedded Linux_Gpio_I2c - Fatal编程技术网

Linux,ARM:为什么gpiochip<;num>;仅在启动时存在I2C GPIO扩展器时创建?

Linux,ARM:为什么gpiochip<;num>;仅在启动时存在I2C GPIO扩展器时创建?,linux,linux-kernel,embedded-linux,gpio,i2c,Linux,Linux Kernel,Embedded Linux,Gpio,I2c,在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)平台上,设备树中列出的所有设备

在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中创建条目

Linux板支持\u平台\u填充的代码调用(NULL,NULL,NULL,NULL) 从树的根开始发现设备。这个 参数都为NULL,因为从 树,则无需提供起始节点(第一个NULL),即 父结构设备(最后一个NULL),我们没有使用匹配项 表(尚未)。对于只需要注册设备的板, .init_machine()可以完全为空,但 _platform_populate()调用的

因此,设备树只会告诉内核要发现什么,如果找不到,它实际上不会添加任何内容

我可以确认gpiochip仅添加在您设备的探针上:

请注意第397行对
gpiochip\u add


我建议您尝试将gpio扩展器集作为模块来编译内核,然后在实际连接后对其进行insmod。

您的内核版本是否已更改?在实际探测设备时,较新的内核很可能只是创建sysfs条目。也许可以检查源代码,看看在GPIO扩展器的探测功能期间发生了什么。是的,内核已经更改。PowerPC是2.6.37.6,所以版本完全不同。同意这可能是改变的原因。我想我可以尝试深入研究内核源代码,但不确定探测器在哪里;也许是gpiolib.c?我希望有一个开机后的方式来处理这个问题,而不改变内核。正如你在我的回答中所看到的,我可以确认它只在设备探测时添加。谢谢!很高兴得到证实。你的建议可能行得通,但我决定从设备树中删除这些设备,而不是作为gpio芯片访问它们。相反,我只是将它们作为简单的I2C设备来访问,这适用于这些简单的扩展器。@Bruce没问题!如果这回答了您的问题,请将其标记为:)