Linux 如何在设备树中指定gpiochip的名称?

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)

我在一个嵌入式linux系统上工作,有很多IO线路,我想使用libgpiod访问这些线路。为了让事情变得更简单,如果我可以按名称搜索各种gpiochips,那就太好了,但不幸的是,gpiodetect的输出如下所示:

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