启用 FPGA 管理器会导致针对 Versal arch 的 Petalinux 2023.2 中与设备树相关的编译错误

问题描述 投票:0回答:1

尝试为 Versal 目标启用 FPGA 管理器时,使用 2023.2 版本工具编译 PetaLinux 映像时,编译设备树时崩溃。

我目前正在将我的设计之一从 ZynqMP 架构(载板 KR260 上的 SOM K26)更新为 Versal 架构(VPK120 评估板)。初始设计的软件堆栈是 Canonical Ubuntu 和 Petalinux,并使用 xmutil 包装器来加载比特流和设备树覆盖。

与 PS 的交互主要通过 dma_proxy 驱动程序在 AXI Lite 和 AXI DMA 中进行。据我从参考指南(UG1144)Versal分段配置流程中了解到的最好信息,我想将 dfx_dtg_versal_full 配置用于具有 PDI 和加载设备树覆盖的程序。

因此,我使用以下命令添加了应用程序(其中 pl-custom.dtsi 是 dma_proxy 驱动程序节点)以及从 bsp 创建的项目:

petalinux-create -t apps --template dfx_dtg_versal_full -n myplapp --enable --srcuri "../myplapp.xsa ../pl-custom.dtsi"

构建项目时会出现以下注释和警告:

INFO: Creating dfx_dtg_versal_full template apps required FPGA Manager to be enabled in petalinux-config

WARNING: myplapp-1.0-r0 do_configure: Using fpgamanager_base.bbclass requires fpga-overlay MACHINE_FEATURE to be enabled

因此,这两条消息都意味着在

petalinux-config
中启用 FPGA 管理器,但此配置会导致在使用以下日志编译设备树时构建崩溃。

NOTE: Executing Tasks
ERROR: device-tree-xilinx-v2023.2+gitAUTOINC+1a5881d004-r0 do_compile: Error executing a python function in exec_func_python() autogenerated:

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
     0001:
 *** 0002:devicetree_do_compile(d)
     0003:
File: '/home/ubuntu/sandbox/vpk120-plinux/components/yocto/layers/poky/meta/classes-recipe/devicetree.bbclass', lineno: 137, function: devicetree_do_compile
     0133:            if not(os.path.isfile(dtspath)) or not(dts.endswith(".dts") or devicetree_source_is_overlay(dtspath)):
     0134:                continue # skip non-.dts files and non-overlay files
     0135:        except:
     0136:            continue # skip if can't determine if overlay
 *** 0137:        devicetree_compile(dtspath, includes, d)
     0138:}
     0139:
     0140:devicetree_do_install() {
     0141:    for DTB_FILE in `ls *.dtb *.dtbo`; do
File: '/home/ubuntu/sandbox/vpk120-plinux/components/yocto/layers/poky/meta/classes-recipe/devicetree.bbclass', lineno: 125, function: devicetree_compile
     0121:        dtcargs += ["-i", i]
     0122:    dtcargs += ["-o", "{0}.{1}".format(dtname, "dtbo" if isoverlay else "dtb")]
     0123:    dtcargs += ["-I", "dts", "-O", "dtb", "{0}.pp".format(dts)]
     0124:    bb.note("Running {0}".format(" ".join(dtcargs)))
 *** 0125:    subprocess.run(dtcargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
     0126:
     0127:python devicetree_do_compile() {
     0128:    includes = expand_includes("DT_INCLUDE", d)
     0129:    listpath = d.getVar("DT_FILES_PATH")
File: '/tools/Xilinx/PetaLinux/2023.2/components/yocto/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/python3.10/subprocess.py', lineno: 524, function: run
     0520:            # We don't call process.wait() as .__exit__ does that for us.
     0521:            raise
     0522:        retcode = process.poll()
     0523:        if check and retcode:
 *** 0524:            raise CalledProcessError(retcode, process.args,
     0525:                                     output=stdout, stderr=stderr)
     0526:    return CompletedProcess(process.args, retcode, stdout, stderr)
     0527:
     0528:
Exception: subprocess.CalledProcessError: Command '['dtc', '-@', '-@', '-p', '0', '-@', '-H', 'epapr', '-i', '/home/ubuntu/sandbox/vpk120-plinux/build/tmp/work/xilinx_vpk120-xilinx-linux/device-tree/xilinx-v2023.2+gitAUTOINC+1a5881d004-r0/git/device_tree/data/kernel_dtsi/2023.2/BOARD/', '-i', '/home/ubuntu/sandbox/vpk120-plinux/components/plnx_workspace/device-tree/device-tree', '-i', '/home/ubuntu/sandbox/vpk120-plinux/build/tmp/work/xilinx_vpk120-xilinx-linux/device-tree/xilinx-v2023.2+gitAUTOINC+1a5881d004-r0/git/device_tree/data/kernel_dtsi/2023.2/include/', '-i', '/home/ubuntu/sandbox/vpk120-plinux/build/tmp/work/xilinx_vpk120-xilinx-linux/device-tree/xilinx-v2023.2+gitAUTOINC+1a5881d004-r0', '-o', 'pl.dtbo', '-I', 'dts', '-O', 'dtb', 'pl.dtsi.pp']' returned non-zero exit status 1.

Subprocess output:
Error: /home/ubuntu/sandbox/vpk120-plinux/components/plnx_workspace/device-tree/device-tree/pl.dtsi:9.10-10.1 syntax error
FATAL ERROR: Unable to parse input tree

ERROR: Logfile of failure stored in: /home/ubuntu/sandbox/vpk120-plinux/build/tmp/work/xilinx_vpk120-xilinx-linux/device-tree/xilinx-v2023.2+gitAUTOINC+1a5881d004-r0/temp/log.do_compile.656445
ERROR: Task (/home/ubuntu/sandbox/vpk120-plinux/components/yocto/layers/meta-xilinx/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb:do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 10501 tasks of which 10463 didn't need to be rerun and 1 failed.

我尝试在 DTG 设置中启用设备树覆盖,并检查内核中是否启用了设备树覆盖支持,但同样的错误不断发生。我很快尝试了2022.2版本的工具,编译设备树时也崩溃了。

无法解析的设备树文件是仅包含的组件中自动生成的pl.dtsi

/dts-v1/;
/plugin/;

如果我尝试手动在 pl.dtsi 中添加 fpga 覆盖的节点,我可以使编译工作,但如果我在 '''project-spec/meta-user/recipes-bsp/device 中添加节点,它就不起作用-tree/files/system-user.dtsi''' 也不是 '''project-spec/decoupling-dtsi/system-user.dtsi'''

    fragment@0 {
        target = <&fpga>;
        __overlay__ {
            #address-cells = <2>;
            #size-cells = <2>;
            firmware-name = "system.pdi";
        };
    };

我对设备树和最近的通用架构的了解相当初级,所以我认为我遗漏了一些东西,但我无法从错误日志中找出什么。 我将尝试不同的参数来创建应用程序,因为出现错误(警告:myplapp-1.0-r0 do_install:A xsa 不包含 PL IP,因此不需要 /lib/firmware/xilinx/myplapp/myplapp.dtbo)但我怀疑它能否解决问题。

有人知道如何解决这个问题吗?

embedded-linux fpga device-tree petalinux
1个回答
0
投票

如果你有一个不经常改变的固定字符串,那么使用 string 是合适的。如果您需要执行许多涉及修改字符串的操作,尤其是在循环或复杂算法中,那么使用 StringBuilder 会更高效。

© www.soinside.com 2019 - 2024. All rights reserved.