This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:在器件树中设置 GPIO 输出

Guru**** 2615265 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/657553/linux-am5728-setting-gpio-output-in-device-tree

器件型号:AM5728

工具/软件:Linux

我希望能够在器件树中设置默认 GPIO 状态、我还希望在系统引导后轻松更改输出。 我可以使用 GPIO-hog 属性设置初始输出、但在使用 sysfs 启动后无法修改其值。 在器件树中是否有另一种初始化 GPIO 输出的方法? 或者、在 GPIO 节点中使用 GPIO-hog 属性后、是否有方法在引导后修改输出?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Heather、

    您使用的是 AM572x TI 电路板还是定制电路板?

    您是否使用 AM57x TI PSDK? 如果是、是哪个版本?

    请访问以下链接:

    processors.wiki.ti.com/.../Processor_SDK_Linux_GPIO_Driver_Overview
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们使用的是自定义电路板、我们使用的是 Ubuntu、但根据我可以告诉的内容、此功能不应特定于 PSDK。

    我确实找到了一个至少有效的解决方案、但最好使用 GPIO-hog 属性、并且仍然使用 sysfs。 我要做的是使用 GPIO-hog 在器件树中设置初始 GPIO 输出、然后如果我想稍后修改输出、我使用 devmem2直接修改寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Heather、

    PSDK 内核驱动程序可配置 GPIO 硬件、并将其提供给 sysfs 接口以进行用户空间交互。 请提供重现问题的步骤吗? 我将使用 PSDK 在 AM572x TI EVM 上尝试这些方法。

    "GPIO-hog"是 GPIO 节点属性、指示 GPIO 控制器在启动期间将引脚设置为高电平/低电平。 我认为"gpi-hog"不会阻止您使用 GPIO 的 sysfs 控制。

    另请参见以下 e2e 线程:

    e2e.ti.com/.../495548

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    这就是我在设备树中所拥有的内容:

    GPIO8{&G
    pinctrl-names ="default";
    pinctrl-0 =<&GPIO8_PINs>;
    OUTPSI_GPIO{
    GPIO-hog;
    GPIO =<9 GPIO_ACTIVE_HIGH_>;
    输出高电平;
    };
    };
    

    当我尝试在/sys/class/gpio 中导出 GPIO 时:

    root@ENSO:/sys/class/gpio # echo 233 >导出
    bash:echo:write error:device or resource busy

    当我注释 output_GPIO 部分时:

    GPIO8{&G
    pinctrl-names ="default";
    pinctrl-0 =<&GPIO8_PINs>;
    // output_GPIO{
    // GPIO-hog;
    // GPIO =<9 GPIO_ACTIVE_HIGH>;
    // 输出高电平;
    //};
    };
    

    我可以运行相同的命令而不会出现任何问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Heather、

    当 u-boot 或内核使用 GPIO 引脚(有或没有 GPIO-hog)时、您可能无法从用户空间导出该引脚。

    有关更多信息、请参阅以下指针:

    e2e.ti.com/.../2349690

    www.spinics.net/.../msg15040.html
    stackoverflow.com/.../purpose-and-usage-of-gpio-hog-declaration

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么、基本而言、实现目标的正确方法是将 GPIO 设置为 LED?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Heather、

    驱动程序中已使用的 GPIO 无法通过 sysfs 进行控制、除非驱动程序导出该特定引脚。 运行这些命令以了解驱动程序中已请求的 GPIO。

    $mount -t debugfs debugfs /sys/kernel/debug

    $cat /sys/kernel/debug/gpio

    为了控制 LED 和按钮、内核分别具有标准驱动程序"LED-GPIO"和"GPIO_keys"、这些驱动程序应该被直接使用而不是 GPIO。  

    请注意、通用"LED 和按钮"GPIO 任务分别存在标准内核驱动 程序:"LED-GPIO"和"GPIO_keys"。 使用它们而不是直接与 GPIO 通信;它们与内核框架集成的效果要优于您的用户空间代码。

     

    您也可以尝试此方法:尝试通过 CTRL_CORE_PAD_x 寄存器中配置的内部上拉使能、而不是通过 GPIO-hog 来控制 GPIO 输出值。 您应该在 u-boot-spl 代码中控制 pinmux。

    此致、
    帕维尔