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.

[参考译文] SK-AM62A-LP:内核重新编译后运行 app_edgeai.py 时出现问题

Guru**** 1831910 points
Other Parts Discussed in Thread: SK-AM62A-LP
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1430838/sk-am62a-lp-issues-running-app_edgeai-py-after-kernel-recompilation

器件型号:SK-AM62A-LP

工具与软件:

大家好、团队成员:
在使用 SDK 重新编译内核以将 g_hid 模块添加到 SK-am62a-LP 板后、在运行 app_edgeai.py 示例时会遇到问题。
它过去运行时没有缺陷、但在上述更改之后、现在的示例给出以下错误:

(ENV) root@am62axx-evm:/opt/edgeai-gst-apps/apps_python python app_edgeai.py ../configs/face_detection.yaml
libtidl_onnxrt_EP 已加载0x342b9470
最终创建的子图数为:1、-卸载节点- 257、总节点- 257
应用程序:初始化...!!!
内存:初始化...!!!
MEM:已初始化的 DMA 堆(FD=5)!!!
内存:初始化...完成!!!
IPC:初始化...!!!
_rpmsg_char_find_ctrldev:rpmsg 目录在 virtio2.rpmsg_chrdev.-1.13下不存在
_rpmsg_char_find_ctrldev:rpmsg 目录在 virtio1.rpmsg_chrdev.-1.13下不存在
IPC:错误:无法为 CPU [mcu1_0]创建 TX 通道!!
IPC:错误:无法为 CPU [c7x_1]创建 TX 通道!!
IPC:初始化...完成!!!
应用程序:错误:IPC 初始化失败!!!
remote_servic: init…!!
_rpmsg_char_find_ctrldev:rpmsg 目录在 virtio2.rpmsg_chrdev.-1.21下不存在
_rpmsg_char_find_ctrldev:rpmsg 目录在 virtio1.rpmsg_chrdev.-1.21下不存在
Remote_servic:初始化...完成!!!
551.862635 s:GTC 频率= 200 MHz
应用程序:初始化...完成!!!
551.862763:vx_zone_init:Enabled
551.862779 s:vx_zone_error:Enabled
551.862792 s:vx_zone_warning:Enabled
551.863557 s:vx_zone_init:[tivxPlatformCreateTargetId:116]添加了目标 MPU-0
551.863792 s:vx_zone_init:[tivxPlatformCreateTargetId:116]添加了目标 MPU-1
551.864389 s:vx_zone_init:[tivxPlatformCreateTargetId:116]添加了目标 MPU-2
551.864630 s:vx_zone_init:[tivxPlatformCreateTargetId:116]添加了目标 MPU-3
551.864657 s:vx_zone_init:[tivxInitLocal:136]初始化已完成!!!
551.865205 s:vx_zone_init:[tivxHostInitLocal:101]主机初始化已完成!!
551.882092 s:vx_zone_error:[ownIpcSendMsg:140] OpenVX 发送通知失败
551.882141 s:vx_zone_error:[ownObjDescSend:307] ownIpcSendMsg 失败
551.882154 s:vx_zone_error:[ownNodeKernelInit:590]目标内核 TIDLNode 的 TIVX_CMD_NODE_CREATE 失败
551.882168 s:vx_zone_error:[ownNodeKernelInit:591]请确保已为此内核注册目标回调
551.882182 s:vx_zone_error:[ownNodeKernelInit:592]如果目标回调已注册、请确保此内核的 create 回调中没有出现错误
551.882200 s:vx_zone_error:[ownGraphNodeKernelInit:608] kernel init for node 0、kernel com.ti.tidl:1:2…failed!!
551.882218 s:vx_zone_error:[vxVerifyGraph:2159] Node kernel init failed (551.882218 s:vx_zone_error:[vxVerifyGraph:2159]内核初始化失败
551.882231 s:vx_zone_error:[vxVerifyGraph:2213]图形验证失败
TIDL_RT_OVX:错误:正在验证 TIDL 图形...失败!!!
TIDL_RT_OVX:错误:验证 OpenVX 图形失败
==== [输入流水线(S)]====

[PIPE-0]

v4l2src device=/dev/video-imx219-cam0 IO-mode=5 pixel-Aspect-ratio=无! 队列泄漏=2! capsfilter caps="video/x-bayer、width=(int)1920、height=(int)1080、format=(string)rggb;"! tiovxisp dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin sensor-name=sensor_Sony_IMX219_RPI! capsfilter caps="video/x-raw、format=(string) NV12;"! tiovxmultiscaler name=split_01
SPLIT_01。 ! 队列! capsfilter caps="video/x-raw、width=(int) 1280、height=(int) 720;"! tiovxdlcolorconvert out-pool-size=4! capsfilter caps="video/x-raw、format=(string) rgb;"! appsink max-buffers=2 dropp=True name=sen_0
SPLIT_01。 ! 队列! capsfilter caps="video/x-raw、width=(int)640, height=(int)640;"! tiovxdlpreproc out-pool-size=4 data-type=3 tensor-format=1! capsfilter caps="application/x-tensor-tiovx;"! appsink max-buffers=2 dropp=True name=pre_0


==== [输出流水线]====

appsrc DO-timestamp=True format=3 block=True name=post_0! tiovxdlcolorconvert ! capsfilter caps="video/x-raw、format=(string) NV12、width=(int) 1280、height=(int) 720;"! 队列! mosaic_0.sink_0

tiovxmosaic target=1 background=/tmp/background_0 name=mosaic_0 src::pool-size=2
Sink_0::startx="<320>" sink_0:starty="<150>" sink_0::width="<1280>" sink_0::heights="<720>"
! capsfilter caps="video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080;"! v4l2jpegenc! multifilesink sync=False location=/opt/edgeai-test-data/output/output_image_ 04d.jpg


[1]+ Stopped (SIGTSTP) python app_edgeai.py ../configs/face_detection.yaml

我假设这是因为我在 menuconfig 中未启用某些选项、或者设备树中未激活某些选项。

了解哪些模块未正确加载或哪些模块未正确启用会有所帮助。

谢谢!
Joaquin Perez

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

    您好!

    _rpmsg_char_find_ctrldev:rpmsg 目录在 virtio2.rpmsg_chrdev.-1.13下不存在
    _rpmsg_char_find_ctrldev:rpmsg 目录在 virtio1.rpmsg_chrdev.-1.13
    下不存在

    RPMsg 的这些日志似乎表明没有正确设置 IPC 的驱动程序/模块。 您`d捕获启动日志(` mesg output)并提供此信息吗?

    您能否更详细地介绍您所做的更改?

    • 你是尝试触摸 u-boot 或固件(从/lib/firmware 加载)、还是只是尝试触摸 Linux 内核?
    • 您是否修改了设备树?
    • 您从哪里检索您构建的内核? 我们的某些分析/Edge AI 堆栈可能不在上游 Linux 中
      • 我们在 SDK 安装程序中的/board_support 下提供了我们使用的 Linux 内核

    我的估计是 vision_apps 的驱动程序(库. 因此、/usr/lib/libtivision_apps.so 下的文件)或下面的 IPC 下的文件在启动时不会启动。 我认为、它通常内置在内核映像中、而不是一个可加载模块

    话虽如此、您能否提供加载了哪些模块的打印输出? 例如 lsmod 命令

    BR、
    Reese

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

    感谢您包含此内容。 dmesg 看起来正常、直至出现下一行。

    [8.788627] rpmsg_ctrl:未知符号 rpmsg_chrdev_ptdev_create (err -2)

    RPMesg (用于 SoC 内核之间通信的机制)似乎出现了故障

    是否可以运行 rpmsg 测试?

    ```modprobe rpmsg-client-sample count=10```μ s

    Linux 版本6.1.80-dirty

    您所处的 SDK 版本是什么? 它应该介于9.0和9.2之间、但我无法具体说明哪一个。

    我刚刚尝试修改 SDK 提供的内核 (使用 menuconfig)以启用 g_hid。 还修改了设备树以启用 PWM 引脚。

    当您执行此操作时、您是否从其中一个 defconfigs 开始?

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

    SDK 版本是9.2。
    当我修改了我刚做的内核时(设置导出后):
    make ARCH=ARM64 CROSS_COMPILE="$CROSS_COMPILE_64" distclean
    make ARCH=ARM64 CROSS_COMPILE="$CROSS_COMPILE_64" menuconfig
    make ARCH=ARM64 CROSS_COMPILE="$CROSS_COMPILE_64"映像

    然后、我编译了器件树和模块。

    我不知道,我是怎么知道的。" 几天前、当我尝试该功能时、在进行 menuconfig 操作时、加载 g_hid 模块时出现错误、因此这次没有执行此操作。 当时我使用的命令是:

    make ARCH=ARM64 CROSS_COMPILE="$CROSS_COMPILE_64" defconfig ti_ARM64_prune.config 

    modprobe rpmsg-client-sample count=10的输出为:
    root@am62axx-evm:/opt/edgeai-gst-apps lsmod | grep rpmsg
    Virtio_rpmsg_BUS 20480 0
    rpmsg_ns 16384 1 virtio_rpmsg_BUS
    _client_sample.ko/opt/edgeai-gst-apps# find /lib/modules $(uname -r)-name rpmsg_
    /lib/modules/6.1.80-dirty/kernel/samples/rpmsg/rpmsg_client_sample.ko
    root@am62axx-evm:/opt/edgeai-gst-apps modprobe rpmsg-client-sample count=10
    modprobe:错误:无法插入"rpmsg_client_sample":参数无效

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仅为了澄清、我没有从其中一个 defconfigs
    开始

    好的、我倾向于认为这是问题的根源。 我知道 g_hid 部分在该 defconfig 中有问题。

    我想简单地退一步、要求您从 defconfig 开始重新编译内核、看看这是否解决了 RPMsg 错误(我们看不到我在上面在内核中打印出来的错误/dmesg)。

    如果我们可以验证这一点、则可以继续处理 g_hid 模块。 我对失败的时间点很好奇(在构建期间、在目标上加载时等)

    BR、
    Reese

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

    你好、Joaquin、  

    嗯、因此该问题仍然存在。 我不清楚问题出在哪里、但 RPMesg 的某些器件配置不正确。 我要求一位具有更多 RPMSG 专业知识的同事在这里进行权衡、请给他们留出一天左右的时间进行回答

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

    您好!

    我返回并编辑先前的响应、将终端输出放入代码块(Insert > code)。 这样应该可以更轻松地导航线程。

    我将从通用 RPMSG 而不是 edgeAI 代码的角度进行评论。

    正如我所期望的那样、RPMsg 基础设施似乎正在初始化(远程内核也正在初始化):

    // C7
    [ 6.819259] remoteproc remoteproc0: 7e000000.dsp is available
    [ 6.825674] k3-dsp-rproc 7e000000.dsp: register pm nitifiers in remoteproc mode
    [ 6.905336] remoteproc remoteproc0: powering up 7e000000.dsp
    [ 6.911230] remoteproc remoteproc0: Booting fw image am62a-c71_0-fw, size 11534416
    [ 7.007081] rproc-virtio rproc-virtio.6.auto: assigned reserved memory node c7x-dma-memory@99800000
    [ 7.038644] virtio_rpmsg_bus virtio0: rpmsg host is online
    [ 7.039808] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0xd
    [ 7.044350] rproc-virtio rproc-virtio.6.auto: registered virtio0 (type 7)
    [ 7.061316] remoteproc remoteproc0: remote processor 7e000000.dsp is now up
    [ 7.942729] virtio_rpmsg_bus virtio0: creating channel rpmsg_chrdev addr 0x15
    [ 7.968453] virtio_rpmsg_bus virtio0: creating channel ti.ipc4.ping-pong addr 0xe
    
    // MCU R5F
    [ 6.983307] platform 79000000.r5f: configured R5F for remoteproc mode
    [ 6.986246] k3-dsp-rproc 7e000000.dsp: booting DSP core using boot addr = 0x99a00000
    [ 6.992910] platform 79000000.r5f: assigned reserved memory node r5f-dma-memory@9b800000
    [ 7.261837] remoteproc remoteproc1: 79000000.r5f is available
    [ 7.271874] remoteproc remoteproc1: powering up 79000000.r5f
    [ 7.283664] remoteproc remoteproc1: Booting fw image am62a-mcu-r5f0_0-fw, size 53172
    [ 7.370640] rproc-virtio rproc-virtio.7.auto: assigned reserved memory node r5f-dma-memory@9b800000
    [ 7.386164] virtio_rpmsg_bus virtio1: rpmsg host is online
    [ 7.392218] virtio_rpmsg_bus virtio1: creating channel ti.ipc4.ping-pong addr 0xd
    [ 7.410823] rproc-virtio rproc-virtio.7.auto: registered virtio1 (type 7)
    [ 7.417758] remoteproc remoteproc1: remote processor 79000000.r5f is now up
    [ 7.428797] virtio_rpmsg_bus virtio1: creating channel rpmsg_chrdev addr 0xe
    
    // DM R5F
    [ 7.452201] platform 78000000.r5f: R5F core may have been powered on by a different host, programmed state (0) != actual state (1)
    [ 7.467197] platform 78000000.r5f: configured R5F for IPC-only mode
    [ 7.475281] platform 78000000.r5f: assigned reserved memory node r5f-dma-memory@9c800000
    [ 7.716665] remoteproc remoteproc2: 78000000.r5f is available
    [ 7.722711] remoteproc remoteproc2: attaching to 78000000.r5f
    [ 7.834245] platform 78000000.r5f: R5F core initialized in IPC-only mode
    [ 7.881918] rproc-virtio rproc-virtio.8.auto: assigned reserved memory node r5f-dma-memory@9c800000
    [ 7.893169] virtio_rpmsg_bus virtio2: rpmsg host is online
    [ 7.893505] virtio_rpmsg_bus virtio2: creating channel rpmsg_chrdev addr 0xd
    [ 7.898874] rproc-virtio rproc-virtio.8.auto: registered virtio2 (type 7)
    [ 7.906804] virtio_rpmsg_bus virtio2: creating channel rpmsg_chrdev addr 0x15
    [ 7.912934] remoteproc remoteproc2: remote processor 78000000.r5f is now attached
    [ 7.920851] virtio_rpmsg_bus virtio2: creating channel ti.ipc4.ping-pong addr 0xe
    
    [ 7.935706] virtio_rpmsg_bus virtio2: msg received with no recipient
    
    [ 7.976317] virtio_rpmsg_bus virtio0: msg received with no recipient

    我们可以看到为 C7和 DM R5F 固件定义了3个不同的 RPMsg 端点、以及在 MCU R5F 中定义的2个 RPMsg 端点。

    Linux 正在通过 RPMsg 接收一些似乎未定义的端点的消息。 我不确定是否需要运行 Edge AI 应用来接收这些消息?

    rpmsg_ctrl 错误很奇怪。  

    [ 8.630359] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_create (err -2)
    [ 8.637504] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_destroy (err -2)
    [ 8.664212] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_create (err -2)
    [ 8.672059] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_destroy (err -2)
    [ 8.713735] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_create (err -2)
    [ 8.726920] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_destroy (err -2)

    drivers/rpmsg/rpmsg_ctrl.c 中的这些函数在  drivers/rpmsg/rpmsg_char.c 中定义、该文件包含在 drivers/rpmsg_char.c 中。 因此、我不明白如果所有内容都编译正确、为什么会抛出"未知符号"错误。

    请向我确认您如何将新的内核和内核模块复制到文件系统中。

    此致、

    Nick

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

    应用

    make ARCH=ARM64 CROSS_COMPILE="$CROSS_COMPILE_64"映像

    使 dtc_flags=-@ arch=arm64 cross_compiles="$cross_compile_64" ti/k3-am62a7-sk.dtb

    make ARCH=ARM64 CROSS_COMPILE="$CROSS_COMPILE_64"模块

    我会将文件复制到 SD:
    sudo cp arch/arm64/boot/image /media/joaco/rootfs/boot
    sudo cp arch/arm64/boot/dts/ti/k3-am62a7-sk.dtb /media/joaco/rootfs/boot
    sudo make ARCH=ARM64 INSTALL_MOD_PATH=/media/joaco/rootfs modules_install

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

    你好、Joaquin、

    回到这里、我运行了一个快速测试、以确保内核构建过程在全新安装中按预期运行。 我能够根据 SDK 的顶级 makefile 说明来验证这一点:

    这有效地归结为运行 Linux 和 Linux_INSTALL make 目标(在 SDK-INSTALL/Rules.make 中重新定义 ROOTFS_part 作为 SD 卡的路径)。 这使用默认配置

    启动时、一切都运行正常、我可以运行 edgeai 应用程序。 对于 rpmesg 创建/销毁、内核打印不会显示此奇数的"未知符号"打印输出

    我注意到、在您的设置中

    root@am62axx-evm:/opt/edgeai-gst-apps lsmod | grep rpmsg
    Virtio_rpmsg_BUS 20480 0
    rpmsg_ns 16384 1 virtio_rpmsg_BUS

    而在我的 SDK 中、我看到:  

    root@am62axx-evm:~# lsmod | grep rpmsg
    rpmsg_ctrl             16384  0
    rpmsg_char             16384  1 rpmsg_ctrl
    virtio_rpmsg_bus       20480  0
    rpmsg_ns               16384  1 virtio_rpmsg_bus
    
    

    因此、您可能缺少 rpmsg_ctrl 和 rpmsg_char 的模块。 这对我来说似乎很奇怪。 您可以查看 /lib/modules`uname -r`/kernel/drivers/rpmsg?下的内容吗

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

    这是位于 /lib/modules`uname -r`下的/kernel/drivers/rpmsg

    root@am62axx-evm:/lib/modules/6.1.80-dirty/kernel/drivers/rpmsg# ls
    mtk_rpmsg.ko        rpmsg_char.ko  rpmsg_ns.ko   virtio_rpmsg_bus.ko
    qcom_glink_smem.ko  rpmsg_ctrl.ko  rpmsg_pru.ko

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

    你好、Joaquin、

    嗯、有趣的是 mtk_rpmsg 和 Qcom。 都还提供了。 我很确定这些都是不需要的(可能根本不应该在那里)。 否则,我安装模块后的安装看起来相同,所以你有正确的模块存在,但似乎他们没有加载

    从您之前的消息来看、rpmsg_char 和 rpmsg_ctrl 模块似乎在引导时未加载。 这可能是我们应该关注的问题。 您可以在引导后尝试加载它们吗? 理想情况下、他们在启动时出现--我不确定这是否是一项要求。 检查内核重新编译期间使用的配置是否标记了它们可能会提供信息。 这是我的:  

    #
    # Rpmsg drivers
    #
    CONFIG_RPMSG=y
    CONFIG_RPMSG_CHAR=m
    CONFIG_RPMSG_CTRL=m
    CONFIG_RPMSG_NS=m
    # CONFIG_RPMSG_QCOM_GLINK_RPM is not set
    CONFIG_RPMSG_VIRTIO=m
    CONFIG_RPMSG_PRU=m
    # end of Rpmsg drivers

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

    config 文件外观相同。

    然后尝试在引导后加载模块:

    root@am62axx-evm:/opt/edgeai-gst-apps# lsmod | grep rpmsg
    virtio_rpmsg_bus       20480  0
    rpmsg_ns               16384  1 virtio_rpmsg_bus
    root@am62axx-evm:/opt/edgeai-gst-apps# modprobe rpmsg_ctrl
    [   72.114644] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_create (err -2)
    [   72.121695] rpmsg_ctrl: Unknown symbol rpmsg_chrdev_eptdev_destroy (err -2)
    modprobe: ERROR: could not insert 'rpmsg_ctrl': Unknown symbol in module, or unknown parameter (see dmesg)
    root@am62axx-evm:/opt/edgeai-gst-apps# modprobe rpmsg_char
    [   88.680943] Invalid ELF header magic: != ELF
    modprobe: ERROR: could not insert 'rpmsg_char': Exec format error

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

    我正在询问是否有团队成员对您的观察结果有任何想法。 如果您在几天内未收到回复、请随意 ping 该主题。

    此致、

    Nick

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

    您好、Joaquin:

    我可以让您尝试使用 cross_compile 安装这些模块吗? 就像这样:

    sudo make ARCH=arm64 CROSS_COMPILE="$CROSS_COMPILE_64" INSTALL_MOD_PATH=/media/joaco/rootfs modules_install

    我被告知、这可能会产生影响。 如果这样修复了您的问题、我将在 SDK 内核文档中提交一个 ticket 来将 cross_compile 添加到该命令。

    此致、

    Nick

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

    我试过这个,但问题仍然是一样的