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.

[参考译文] DM388:在 DM388中使用 GPIO (用户空间)((IPNC RDK 3.9.9)

Guru**** 2558460 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/609897/dm388-using-gpios-in-dm388-from-application-user-space-ipnc-rdk-3-9-0

器件型号:DM388

在 Source/ti_tools/IPNC_PSP_Arago/u_boot/board/ti/dm38x/evm.c 中

在函数'static void GPIO_init (void)'中,添加了 CSK 中发光 BB_LED2的代码。 因此、在通电时 LED 会发光。

现在、在 evm.h 中编写并声明了一个新函数"void led (void)"

我尝试在位于 Source/IPNC_RDK/IPNC_APP/...的.c 文件中调用此函数。

将 EVM.h (带路径)包含 在该.c 文件中、我希望调用 LED 发光函数。

但在构建时,它会显示“No files found for ./evm.h (找不到./的 文件)”错误

这可以通过在 makefile 中包含头文件来实现吗?

实现这一目标的正确步骤是什么? 请提供帮助。

谢谢 n 此致。

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

    根据我的理解、您希望从用户空间应用程序调用 u-boot 函数。 我认为这是不可能的。 您可以通过某些 API (即 ALSA 音频 API)从用户空间应用调用 Linux 内核函数(驱动程序)、有关详细信息、请参阅下面的 Wiki:

    processors.wiki.ti.com/.../TI81XX_PSP_AUDIO_Driver_User_Guide

    您还可以使用 u-boot 独立应用程序、其中不涉及 Linux 内核和文件系统。

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

    因此、我们无法从用户应用程序部分调用 u-boot 函数? 我们无法通过将头文件与相应的 makefile 一起包含来实现这一点?

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

    在 Pavel 的答复中添加内容、通过构建代码、我们可以通过添加相关的 C 文件和 H 文件来解决依赖关系、甚至可以构建代码。 但需要注意的一点是、Linux 不是一个二进制文件、它具有内核来执行管理工作。 因此、如果有一段代码需要访问硬件、正确的方法是浏览内核框架(尽管您可以从用户空间映射 GPIO 寄存器并完成工作、这将与内核框架有所不同)。 因此,请浏览 GPIO sysfs 功能: www.kernel.org/.../sysfs.txt

    使用 sysfs 将 GPIO (LED 连接到哪个端口)导出到用户空间、然后编写代码来访问此 sysfs 条目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="nithin Dominic">我们无法从用户应用程序部件调用 u-boot 函数? 我们无法通过将头文件与相应的 makefile 一起包含来实现这一点?

    不能、您不能使用 u-boot。

    在 DWARakesh 状态下、应使用 GPIO sysfs 进行用户空间访问。 有关更多信息、请参阅以下 wiki 页面:

    此致、
    帕维尔

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

    谢谢 Dwarakesh 和 Pavel、

    我正在浏览这些文档、并按照 Dwarakesh "所述、使用 sysfs 将 GPIO (LED 连接到哪个 LED)导出到用户空间、然后编写代码来访问此 sysfs 条目。"

    将 GPIO 引脚导出到发光 LED;

    $ echo 56 >/sys/class/gpio/export

    $ echo "out">/sys/class/gpio/gpio56/direction

    $ echo 1 >/sys/class/gpio/gpio56/value

    这里的 LED 亮起。

    然后、您提到了"编写代码以访问此 sysfs 条目"、我应该在哪里编写代码? 请说明

    如何根据需要在代码中的任何位置编写 LED 发光码?

     

    此致。

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

    您可以使用 shell 脚本或 C 应用程序从用户空间访问 sys/class/gpio。 请查看以下链接以了解更多信息:

    Linux-kernel/Documentation/GPIO/sysfs.txt

    developer.ridgerun.com/.../How_to_use_GPIO_signals -有关示例 shell 脚本、请参阅 gpio.sh;对于示例 C 应用、请参阅 GPIO-int-test.c

    e2e.ti.com/.../495550
    e2e.ti.com/.../370560
    e2e.ti.com/.../156496

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

    感谢 Pavel、

    通过以下链接、

    中的"Driver Usage/Kernel Level"。

    我可以在用户空间中添加以下代码:

    ERR = GPIO_REQUEST (56、LED2); 
    GPIO_DIRECT_OUTPUT (56、1); 
    GPIO_EXPORT (56、true); 

    如中所述:



    我遇到类似的错误、此处的帖子建议更改 makefile
    以消除误差。 但是、我在以下方面进行更改时感到困惑:

    /ti/ipnc_rdk-3.9.0/Source/ti_tools/ipnc_psp_arago/kernel/drivers/gpio/Makefile

    或我尝试使用 GPIO 功能的位置

    /ti/ipnc_rdk-3.9.0/Source/ipnc_rdk/ipnc_app/network/dhcpcd/Makefile



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

    [引用用户="Nithin Dominic"]。/ti/ipnc_rdk-3.9.0/Source/ti_tools/ipnc_psp_arago/kernel/drivers/gpio/Makefile [/quot]

    [引用用户="Nithin Dominic"]。/ti/ipnc_rdk-3.9.0/Source/ipnc_rdk/ipnc_app/network/dhcpcd/Makefile [/quot]

    两者均不相同。 您不能将 C 应用程序与这些函数(GPIO_Request()、GPIO_DIRECion_OUTPUT ()、GPIO_EXPORT ())一起使用、您应该使用应从用户空间加载(使用 insmod/modprobe)的外部内核模块(.ko 文件)。

    您应该创建自己的目录(GPIO 测试目录)、在其中放置 C 代码(结构为内核模块、而不是用户空间应用)、并创建自己的 Makefile、填充该文件并将其放置在该目录中。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Pavel、
    因此、您说我无法调用中的函数:

    /ti/ipnc_rdk-3.9.0/Source/ti_tools/ipnc_psp_arago/kernel/drivers/gpio/gpiolib-sysfs.c
    我们有的地方;
    gpioD_export (struct gpio_desc * desc、bool direction _may _change)、等等

    我的应用中?
    因此、我应该使用从用户空间加载的外部内核模块。 如何创建.ko 文件

    要访问 GPIO 引脚、我应该开发一个新的 GPIO C 代码吗?
    我应该在内核中将代码放置在何处?

    如果我写入绝望的 GPIO 代码、是否可以将 GPIO 函数调用到应用中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="nithin Dominic">您说我无法调用以下函数:

    /ti/ipnc_rdk-3.9.0/Source/ti_tools/ipnc_psp_arago/kernel/drivers/gpio/gpiolib-sysfs.c
    我们有的地方;
    gpioD_export (struct gpio_desc * desc、bool direction _may _change)、等等

    我的应用中?[/quot]

    是的

    您还可以使用 C 应用程序、但应将 GPIO 函数导出到用户空间。 我在之前的答覆中已详细解释了所有这方面的情况。

    [引用 user="nithin Dominic"]因此,我应该使用从用户空间加载的外部内核模块

    是的

    [引用 user="nithin Dominic"]如何创建.ko 文件

    TI 在这方面没有具体的规定。 您可以在 google 中搜索如何创建和使用外部内核模块。 您可以在以下链接中找到示例教程:

    [引用 USER="Nithin Dominic]要访问 GPIO 引脚、我应该开发一个新的 GPIO C 代码吗?
    我应该在内核中将代码放置在何处?

    如果我写入绝望的 GPIO 代码、是否可以将 GPIO 函数调用到应用中?

    我无法理解这些问题,因此我无法回答。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Pavel、
    正如您在上一篇文章中提到的那样;
    developer.ridgerun.com/.../How_to_use_GPIO_signals

    我可以使用 C 应用程序从用户空间访问 sys/class/gpio。
    创建目录、放置 c 代码、创建必要的 make 文件。

    因此、在本例中、我不想创建任何外部内核模块。 我的理解是否正确?

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

    是的、您可以使用 C 应用程序从用户空间访问 sys/class/gpio。 在这种情况下、您不需要外部内核模块。 您还可以检查以下 e2e 线程:

    e2e.ti.com/.../495550



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

    感谢 Pavel、

    现在、我尝试使用 C 应用程序从用户空间访问 sys/class/gpio。

    让我明确说明要采取的步骤;

    •   我必须使用此处提供的类似 C 代码:'https://e2e.ti.com/support/embedded/linux/f/354/t/495550' 以从用户空间访问 sys/class/gpio
    •   将代码放置在用户空间中? 或内核中? 我可以访问 GPIO。
    •   那么、如果我能够从用户空间访问 GPIO、那么什么是 API 或用于设置 GPIO 引脚方向和值的内容(如 gpioD_DIRECion_OUTPUT (等))?

    我是否可以使用上述文章中提到的相同 C 代码、它包含 while (1)、我可以对其进行修改并将其用于我的目的?

    请帮助采取正确的步骤并消除我的疑虑。

    此致

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

    编写 C/C++应用程序时、应将代码放置在用户空间中。 您可以在 gpioX/value 文件上使用标准 POSIX API、例如打开、读取、写入等、以通过 C 代码控制 GPIO。

    有关如何通过 POSIX API 请求、导出、设置方向等的信息、请参阅以下链接:

    developer.ridgerun.com/.../How_to_use_GPIO_signals
    falsint.blogspot。bg/.../access-gpio-from-linux-user-space.html
    www.kernel.org/.../sysfs.txt
    e2e.ti.com/.../495550

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

    您好、Pavel、

    首先、我感谢您耐心地帮助我。

    本文档有助于: falsint.blogspot。bg/.../access-gpio-from-linux-user-space.html

    从应用程序管理 GPIO

    一切都很清楚要使用的代码、用于出口和控制。 现在、我可以使用我的应用中的 GPIO。 :-)

    谢谢大家、此致