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/DRA746:应用程序无法直接访问 VIDDEC3_create?

Guru**** 2589280 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/640202/linux-dra746-application-can-not-access-viddec3_create-directly

器件型号:DRA746

工具/软件:Linux

您好 RAM、

我在正确控制方面有问题。

我创建了可执行的测试来解码264流、其 uid/Gid 是根。

但是,创建与 可执行测试相同的应用程序无法正常工作。  在 VIDDEC3_create 上失败、这似乎是正确的控制问题。

我将777命令写入/dev/folder 中的所有设备、如下所示:

chmod 777 /dev/

但它似乎不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高您好、
    我不知道如何重现此问题。 它是否特定于一个应用?
    请确认 Engine_open 是否通过、如果通过、VIDDEC3_create 也应起作用。
    您看到了什么错误?

    RAM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 RAM、
    应用程序首先调用 Engine_open、也失败。
    我添加了一些日志进行调试、当 Engine_open 返回 NULL 时、错误代码是 Engine_eok。

    在我的应用程序中、在正常进程中直接调用 Engine_open、而不是像 media_server 这样的系统进程。
    它似乎是正确的控制,因为同一代码可以在具有根权限的可执行测试中运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RAM、

    我们在 libdce 顶部编写一个包装解码器(称为 V4l2编解码器)、以将 TI HW 编解码器放入我们的多媒体框架中。

    问题是、如果我们以 root 身份运行 cmdline 测试、则一切正常;当运行另一个非 root 测试时、我们会遇到错误、如 GAO 所述。 是否必须调用具有 root 特权的 libdce?

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

    1.是否有任何快速方法可以绕过视频解码的访问检查?

    例如、更改 DRM 器件的访问权限;

    DCE/MmRpc_create 是否有任何特殊的访问控制。

    2.我们正在尝试最终解决使用媒体服务器进行解码的问题,编解码器需要哪个用户组(授予媒体服务器)?

    谢谢

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

    我添加了一些日志进行调试
    首先进入 ADB shell 模式
    2.输入"新闻"
    3.运行 cmdline 测试,其 uid 和 gid 现在为'new'。

    在 Engine_open 方法中的 DCI_IPC_init 上测试失败、错误信息为"MmRpc_create:error:open failed、name=/dev/rpmsg-dce。"
    然后我将/dev/rpmsg-dce 模式更改为777、再次运行测试、我获得了不同的结果、即 memplugin_alloc 方法现在失败。
    内核信息如下:
    ===========================
    <7>[ 1045.695002][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_version
    <7>[ 1045.695016][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_version
    <7>[ 1045.696063][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_Set_version
    <7>[ 1045.696715][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_Set_version
    <7>[ 1045.696737][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_GET_UNIQUE
    <7>[ 1045.696770][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_GET_UNIQUE
    ========================================================================
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 RAM、

    有5个回复让您感到有点混乱、让我总结一下以下内容:

    请求是在非根进程中运行 libdce 解码器,问题是我们可以使用根权限,但使用非根权限失败。

    首先、我们在 libdce 中添加日志、发现错误为"mmRpc_create:error:open failed、name=/dev/rpmsg-dce。"。 这是因为 rpmsg-DCE 的拥有者是 root:root,但正在运行的进程是非 root。
    2. chmod 777 /dev/rpmsg-dce,然后运行 test。 DRM 验证失败、请参阅下面的内容。 对于 DRM 验证、我们是否需要将经过 DRM 验证的 FD 传递给 DCE? 你还有其他建议吗?
    <7>[ 1045.695002][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_version
    <7>[ 1045.695016][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_version
    <7>[ 1045.696063][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_Set_version
    <7>[ 1045.696715][DRM:DRM_ioctl]、pid=4974、dev=0xe200、auth=0、DRM_IOCTL_Set_version

    总之、我们能够处理 DRM 验证。 现在问题是/dev/rpmsg-dce,为什么它的拥有者是 root:root,是否可以使它成为 root:graphics 或 root:video?

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

    您好、Li、

    我不知道这一点。 我在这里向专家咨询。 我会再来的。

    仅访问 libdce/libdrm 库函数时是否出现问题? 还是其他库也存在相同的访问控制问题?

    RAM

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

    您好 RAM、

    它是 libdce 和 libdrm、到目前为止、我们还没有看到其他存在访问控制问题的库。

    此致、

        锂离子电池