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.

[参考译文] TDA4VM:仅使用用户空间的 remoteproc

Guru**** 2468460 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1468659/tda4vm-only-use-remoteproc-from-user-space

器件型号:TDA4VM

工具与软件:

尊敬的专家:


kernel 6.6.

我们的用例是完全控制 R5加载和从用户空间运行。 通常约为400V
我们不希望任何尝试从 U-Boot 加载 rproc 固件的东西。 我们有一个自定义 U-Boot
不使用"dorprocboot"的环境、仍然存在固件尝试加载的迹象:

Starting kernel ...

I/TC: Secondary CPU 1 initializing
I/TC: Secondary CPU 1 switching to normal world boot
I/TC: Reserved shared memory is enabled
I/TC: Dynamic shared memory is enabled
I/TC: Normal World virtualization support is disabled
I/TC: Asynchronous notifications are disabled
[ 0.351545] k3_r5_rproc bus@100000:bus@28380000:r5fss@41000000: k3_r5_cluster_rproc_init failed, ret = -517
[ 0.353672] k3_r5_rproc bus@100000:r5fss@5c00000: k3_r5_cluster_rproc_init failed, ret = -517
[ 0.355680] k3_r5_rproc bus@100000:r5fss@5e00000: k3_r5_cluster_rproc_init failed, ret = -517
[ 0.474574] remoteproc remoteproc1: request_firmware failed: -2
[ 2.501890] remoteproc remoteproc2: request_firmware failed: -2
[ 4.519341] remoteproc remoteproc3: request_firmware failed: -2
[ 6.533481] remoteproc remoteproc4: request_firmware failed: -2

一个恼人的副作用是每个内核需要2秒钟来评估没有可用固件。
如何才能完全消除这一情况并仅取决于我自己从用户空间加载的固件?

此致、

/Bo

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

    尊敬的 Bo:

    以下命令的输出是什么:

    cat /sys/class/remoteproc/remoteproc?*/firmware

    此致!
    Jared

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

    尊敬的 Jared:

    输出为:

    root@AS-P-3-340009:~# cat /sys/class/remoteproc/remoteproc?*/firmware
    unknown
    j7-main-r5f0_0-fw
    j7-main-r5f0_1-fw
    j7-main-r5f1_0-fw
    j7-main-r5f1_1-fw

    这些文件没有在 lib/ firmware 文件夹中、我不希望在启动时加载它们。 我想从用户空间控制加载、启动和停止。

    您是否可以将其标记为未解析? 我按错了按钮。

    此致、

    /Bo

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

    尊敬的 Bo:

    我已经玩了环境变量在 u-boot 和由于某种原因设置 dorprocboot 为0不阻止 u-boot 试图加载我的设备上的固件。

     但是、更改 boot_rprocs 变量会成功地阻止固件加载。

    内核还会尝试加载固件、而不考虑 u-boot、我认为没有办法防止这种情况、但我目前正在深入研究这一点。

    [报价 userid="551261" url="~/support/processors-group/processors/f/processors-forum/1468659/tda4vm-only-use-remoteproc-from-user-space/5637506 #5637506"]

    您是否可以将其标记为未解析? 我按错了按钮。

    [报价]

    我无法将其标记为未解析、但每当您发送消息时、线程都会重新打开。

    此致!
    Jared

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

    尊敬的 Jared:

    感谢您的调查。 我怀疑 boot_rprocs 对我们来说是有用的、但我要看一下。

    我正在浏览 k3_r5_remoteproc.c 文件、但我不确定什么需要保留。

    感谢所有的帮助。

    /Bo

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

    尊敬的 Bo:

    是否可以在 uboot 提示符下发送 printenv 的输出?

    此致!
    Jared

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

    尊敬的 Bo:

    [报价用户 id="551261" url="~/support/processors-group/processors/f/processors-forum/1468659/tda4vm-only-use-remoteproc-from-user-space "] I/TC: Asynchronous notifications are disabled
    [ 0.351545] k3_r5_rproc bus@100000:bus@28380000:r5fss@41000000: k3_r5_cluster_rproc_init failed, ret = -517
    [ 0.353672] k3_r5_rproc bus@100000:r5fss@5c00000: k3_r5_cluster_rproc_init failed, ret = -517
    [ 0.355680] k3_r5_rproc bus@100000:r5fss@5e00000: k3_r5_cluster_rproc_init failed, ret = -517
    [ 0.474574] remoteproc remoteproc1: request_firmware failed: -2
    [ 2.501890] remoteproc remoteproc2: request_firmware failed: -2
    [ 4.519341] remoteproc remoteproc3: request_firmware failed: -2
    [ 6.533481] remoteproc remoteproc4: request_firmware failed: -2[报价]

    这将在内核启动日志中非常早地显示。 似乎您正在将 Remoteproc 驱动程序内置到内核中。

    TI SDK 将 Remoteproc 驱动程序构建为模块、这也是目前各种内核驱动程序的典型预期。 固件不会内置于 Linux 内核中、因此对于需要固件的驱动程序来说、这一点甚至更重要。

    Unknown 说:
    一个恼人的副作用是每个内核需要2秒钟来评估没有可用固件。

    这来自 Linux 内核的标准固件类代码。  这是您尝试构建内置 Remoteproc 驱动程序的副作用、该驱动程序要求固件只能存在于文件系统中、而文件系统会在稍后初始化。

    如果尝试内置这些驱动程序、则必须在 initramfs 中提供固件、并在 U-Boot 中加载 initramfs、并在内核命令行中提供 initramfs。 我相信这不是你想要的用例。

    Unknown 说:
    如何才能完全删除这个问题、并且只取决于我自己从用户空间加载固件?

    需要使用 Remoteproc 驱动程序来引导和 创建 virtio rpmsg 总线设备、以便 Linux 用户空间应用程序与其对等实体进行通信。

    请将 Remoteproc 驱动程序作为模块构建。 在文件系统初始化后、这仍将作为加载各种模块的一部分自动加载/引导。 如果您不想让 remoteprocs 自动加载、请将文件系统中的模块黑列表、然后按需加载它们。  

    此致

    Suman

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

    大家好、Jared 和 Souman、

    谢谢苏曼的详细解释。 这种副作用确实不是想要的情形。 我将与同事讨论这个问题、很可能我们会决定改用可加载模块。

    我会将此标记为已解决(再次)。

    此致、

    /Bo

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

    您好!

    我正在修改模块、我有一些问题。

    1.在 SDK10中、REMOTEPROC=y、RPMSG_NS=y 和 RPMSG_virtiio=y 中、正确吗?

    2.这意味着我需要构建和加载的模块是:
    * TI_K3_R5_REMOTEPROC
    * RPMSG_CTRL
    * RPMSG_CHAR

    3.我按以下顺序加载它们:
    ROOT@AS-P-3-340009:~# insmod /lib/modules/6.6.58-ti-01614-g52c7243d3aa4/kernel/drivers/rpmsg/rpmsg_char.ko
    ROOT@AS-P-3-340009:~# insmod /lib/modules/6.6.58-ti-01614-g52c7243d3aa4/kernel/drivers/rpmsg/rpmsg_ctrl.ko
    ROOT@AS-P-3-340009:~# insmod /lib/modules/6.6.58-ti-01614-g52c7243d3aa4/kernel/drivers/remoteproc/ti_k3_r5_remoteproc.ko
    [ 114.739842] k3_r5_rproc bus@100000:bus@28380000:r5fss@41000000:k3_r5_cluster_rproc_init 失败、ret =-517
    [114.756315] remoteproc remoteproc0:正在释放41000000.r5f
    [ 114.768334] k3_r5_rproc bus@100000:r5fss@5c00000:k3_r5_cluster_rproc_init 失败、ret =-517
    [ 114.782663] remoteproc remoteproc0:正在释放5c0000.r5f
    [ 114.791826] k3_r5_rproc bus@100000:r5fss@5e00000:k3_r5_cluster_rproc_init 失败、ret =-517
    [ 114.803325] remoteproc remoteproc0:正在释放5e0000.r5f

    正如您所看到的,我仍然收到这些集群错误,现在我没有在/sys/class/remoteproc 下得到任何 remoteproc*

    我在做什么错?

    /Bo

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

    尊敬的 Bo:

    请将与10.x SDK 配置相关的问题发布到单独的线程、因为原始线程标题主题已得到解决。

    此致

    Suman