Linux 如何在设备树中指定gpiochip的名称?
我在一个嵌入式linux系统上工作,有很多IO线路,我想使用libgpiod访问这些线路。为了让事情变得更简单,如果我可以按名称搜索各种gpiochips,那就太好了,但不幸的是,gpiodetect的输出如下所示:Linux 如何在设备树中指定gpiochip的名称?,linux,gpio,device-tree,Linux,Gpio,Device Tree,我在一个嵌入式linux系统上工作,有很多IO线路,我想使用libgpiod访问这些线路。为了让事情变得更简单,如果我可以按名称搜索各种gpiochips,那就太好了,但不幸的是,gpiodetect的输出如下所示: gpiochip0 [ff708000.gpio] (29 lines) gpiochip1 [ff709000.gpio] (29 lines) gpiochip2 [ff70a000.gpio] (27 lines) gpiochip3 [pca9534] (8 lines)
gpiochip0 [ff708000.gpio] (29 lines)
gpiochip1 [ff709000.gpio] (29 lines)
gpiochip2 [ff70a000.gpio] (27 lines)
gpiochip3 [pca9534] (8 lines)
gpiochip4 [pca9534] (8 lines)
gpiochip5 [pca9534] (8 lines)
gpiochip6 [pca9534] (8 lines)
gpiochip7 [pca9534] (8 lines)
gpiochip8 [pca9534] (8 lines)
我想访问PCA9534 IO扩展器的GPIO,正如您所看到的,这些扩展器都有完全相同的名称
我知道我可以为每一行指定一个名称,但是芯片呢?
有没有办法在设备树中指定gpiochip的名称
编辑:
这是设备树的一部分,带有一些IO扩展器
i2c_mux: i2cmux@70 {
compatible = "nxp,pca9543";
reg = <0x70>;
#address-cells = <1>;
#size-cells = <0>;
ext0: i2c@0 {
reg = <0x00>;
#address-cells = <1>;
#size-cells = <0>;
ext0_id0: gpio@38 {
compatible = "nxp,pca9534";
reg = <0x38>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <8>;
};
ext0_id1: gpio@39 {
compatible = "nxp,pca9534";
reg = <0x39>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <8>;
};
ext0_gpio_out: gpio@3A {
compatible = "nxp,pca9534";
reg = <0x3A>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <8>;
};
};
};
libgpiod的版本(在这两种情况下)都是1.4.1,ls-l/sys/class/gpio的输出是
drwxr-xr-x 2 root root 0 Mar 12 14:00 .
drwxr-xr-x 32 root root 0 Jan 1 2001 ..
--w------- 1 root root 4.0K Mar 12 14:00 export
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1915 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-3/3-0039/gpio/gpiochip1915
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1923 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-3/3-0038/gpio/gpiochip1923
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1931 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-003b/gpio/gpiochip1931
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1939 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-003a/gpio/gpiochip1939
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1947 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-0039/gpio/gpiochip1947
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1955 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-0038/gpio/gpiochip1955
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1963 -> ../../devices/platform/sopc@0/ff70a000.gpio/gpio/gpiochip1963
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1990 -> ../../devices/platform/sopc@0/ff709000.gpio/gpio/gpiochip1990
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip2019 -> ../../devices/platform/sopc@0/ff708000.gpio/gpio/gpiochip2019
--w------- 1 root root 4.0K Mar 12 14:00 unexport
不幸的是,目前我还不能选择升级到5.6版,所以我想我只需要将gpiochip ID硬编码到我的应用程序中第二个字段(方括号中)是设备实例的名称。看,我所拥有的gpiochip0[0000:00:0c.0](192行)gpiochip1[spi-prp001:01](4行)gpiochip2[i2c-INT3491:00](16行)gpiochip3[i2c-INT3491:01](16行)gpiochip4[i2c-INT3491:02](16行)gpiochip5[i2c-INT3491:03](16行)
。这意味着对于PCA9534芯片,您有相当错误的描述,将您带入同一个设备。@0andriy这很有趣,与我想要的更接近。我已经在我的设备树中添加了一部分,希望有人能发现我可能犯的任何错误(尽管我基本上只是复制了PCA953x驱动程序的示例),您使用的内核版本是什么?我使用的是5.6-rc6测试的版本4.14.126(这是他们使用PREEMPT_RT补丁集的最新版本),它工作正常(我已经在我的帖子中添加了相关数据)。然而,这么大规模的内核升级是我无法真正做到的,特别是因为我需要一个支持实时的内核。所以我想我一直在努力将ID编码到我的应用程序中(希望,如果我们升级内核,这些ID不会改变)
drwxr-xr-x 2 root root 0 Mar 12 14:00 .
drwxr-xr-x 32 root root 0 Jan 1 2001 ..
--w------- 1 root root 4.0K Mar 12 14:00 export
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1915 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-3/3-0039/gpio/gpiochip1915
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1923 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-3/3-0038/gpio/gpiochip1923
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1931 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-003b/gpio/gpiochip1931
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1939 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-003a/gpio/gpiochip1939
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1947 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-0039/gpio/gpiochip1947
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1955 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-0038/gpio/gpiochip1955
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1963 -> ../../devices/platform/sopc@0/ff70a000.gpio/gpio/gpiochip1963
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip1990 -> ../../devices/platform/sopc@0/ff709000.gpio/gpio/gpiochip1990
lrwxrwxrwx 1 root root 0 Mar 12 14:00 gpiochip2019 -> ../../devices/platform/sopc@0/ff708000.gpio/gpio/gpiochip2019
--w------- 1 root root 4.0K Mar 12 14:00 unexport