咨询一下 jetpack6.2 下,overlay 未生效的原因

你好,

我们准备将 SPI1_SCK pin,配置成 GPIO 模式并进行控制。我们在 extlinux.conf 中,修改如下:

OVERLAYS /boot/jetson-io-hdr40-user-custom.dtbo, /boot/my_custom_overlay.dtbo

my_custom_overlay.dts 这样写:

/dts-v1/;
/plugin/;

/ {
compatible = “nvidia,p3768-0000+p3767-0000”;

fragment@0 {
    target-path = "/pinmux@2430000";
    __overlay__ {
            spi1_sck_pz3_gpio: spi1_sck_pz3 {
                    nvidia,pins = "spi1_sck_pz3";
                    nvidia,function = "rsvd1";
                    nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
                    nvidia,tristate = <TEGRA_PIN_ENABLE>;
                    nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                    nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
                    nvidia,lpdr = <TEGRA_PIN_DISABLE>;
            }
    };
};

};

然后,将 dts 文件转为 dto 文件,并放在 /boot 目录下。重启系统后,使用如下命令去查看:

cat /sys/kernel/debug/pinctrl/2430000.pinmux/pins | grep pin133

结果:

pin 133 (SPI1_SCK_PZ3) 133:tegra234-gpio 2430000.pinmux

发现 SPI1 没有变成期望的 SOC_GPIOXX_PZ3,这样 OVERLAY 应该没有起到作用。

请问一下,应该如何修改,才能将 SPI1_SCK_PZ3 配置为 GPIO ?

Could you specify it as following instead?

OVERLAYS /boot/jetson-io-hdr40-user-custom.dtbo /boot/my_custom_overlay.dtbo

你好,

多谢回应!

我试过了。还是不行。

在 6.2 版本下,无法通过 jetson-io 来单独修改 40 pin 的功能,我们又不想重新烧录系统,应该只能修改 overlay 来解决吧?

目前看起来,直接去修改 jetson-io-hdr40-user-custom.dtbo(先转成 dts),按上面的 gpio 格式撰写新代码,更容易一些。

我之前对 cat /sys/kernel/debug/pinctrl/2430000.pinmux/pins 的显示结果有误会,以为在正确配置后,SPI1_SCK_PZ3 可以变成 SOC_GPIOXX_PZ3, 在搜寻了定义相关文件后,我发现 SOC_GPIOXX_PZ3 并不存在。 目前 pinmux-pins 可以在提示 pin 是 SPI 配置:

如果利用 jetson-io.py 将 SPI1_SCK_PZ3 配置为 SPI :

sudo cat /sys/kernel/debug/pinctrl/2430000.pinmux/pinmux-pins

pin 133 (SPI1_SCK_PZ3): 2430000.pinmux (GPIO UNCLAIMED) (HOG) function spi1 group spi1_sck_pz3

如果不配置为 SPI ,

则结果是:

pin 133 (SPI1_SCK_PZ3): (MUX UNCLAIMED) (GPIO UNCLAIMED)

注意: 看到这种情况,不意外着该 PIN 可以用 gpioset 操作,实际上还得修改配置文件,最简单的办法就是在 jetson-io-hdr40-user-custom.dtbo (先转成 dts)的基础上进行修改:

以 PIN-7(144) 为例(刚才 PIN23 已切成 SPI 模式了, 用 PIN-7 做测试)

hdr40-pin7 {
nvidia,pins = “soc_gpio59_pac6”;
nvidia,tristate = <0x0>;
nvidia,enable-input = <0x1>;
nvidia,pull = <0x0>;
};

然后将修改好的 dts 转回 dtbo,覆盖之前的 jetson-io-hdr40-user-custom.dtbo,重启即可。

另需注意:

  1. 由于修改了 jetson-io-hdr40-user-custom.dtbo, jetson-io.py 会闪退,如果想恢复,得删掉 jetson-io-hdr40-user-custom.dtbo,重新生成即可
  2. 如果用 C/PYTHON 编程,问题不大,如果用 gpioset 命令,需要用 –mode==wait

以上方法只是临时测试用,希望能提供更方便可靠的方式。

It seems the expected workflow to update the configuration on runtime device as you don’t want to reflash the board.