Zynq UltraScale+ MPSoC:将 XSDB 连接到 Linux CPU 空闲

描述
在 Zynq UltraScale+ MPSoC/RFSoC 器件中,Linux CPU Idle 默认启用。

启用后,Linux 会在 CPU 内核空闲时关闭它们(与 WFI 相对)。

当连接xsdb时,这可能会导致问题。

解决方案

症状:

启用 CPU 空闲时,DAP 会发出错误。

理论上,当xsdb连接时,应该在 A53_* 相关寄存器上发生一些读/写访问。

由于启用了 CPU_IDLE,A53_* 内核可能会根据 CPU 使用情况统计信息关闭,因此xsdb对 A53 寄存器的访问可能会导致 DAP 错误。

这里发生了两个独立的事件:

CPU 断电,xsdb试图访问寄存器。

因此,当xsdb触发读取时,如果 A53_* 内核掉电,可能会导致 DAP 错误。

通常,调试器会检查模块是否通电。

但是,当读取已在进行时,可能会发生此事件,并会导致此问题。

解决方法(这适用于 Zynq UltraScale+ 器件的所有 Xilinx 软件版本):

通过使用以下任何方法禁用 Linux 内核引导参数中的 CPU 空闲,可以避免该问题。

1) 从目标上的 U-boot 提示禁用:

将“cpuidle.off=1”附加到您现有的引导参数中,如下所示:(从
/components/plnx_workspace/device-tree/device-tree/system-conf.dtsi文件中识别引导参数)

ZynqMP> setenv bootargs 'console=ttyPS0,115200n8 earlycon clk_ignore_unused cpuidle.off=1'
ZynqMP> 运行 bootcmd

2) 使用 PetaLinux 或 Yocto 从内核配置 (CONFIG_CPU_IDLE) 中禁用:

PetaLinux:

$ petalinux-config -c 内核

CPU 电源管理 --->
-> CPU Idle --->
[ ] CPU idle PM 支持

使用 petalinux 命令清理和重建内核。

$ petalinux-build -c 内核 -x cleansstate
$ petalinux-build -c 内核
约克托:

$ bitbake -c menuconfig 虚拟/内核

CPU 电源管理 --->
-> CPU Idle --->
[ ] CPU idle PM 支持

使用 bitbake 命令清理和重建内核。

$ bitbake -c cleansstate 虚拟/内核
$ bitbake 虚拟/内核
3) 使用 PetaLinux 设备树生成器:

如下所示将“cpuidle.off=1”附加到您现有的引导参数,然后从“
/components/plnx_workspace/device-tree/device-tree/system-conf.dtsi ”文件中复制选定的节点属性到“
/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi ”

/ {
选择 {
bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused cpuidle.off=1";
标准输出路径 = "serial0:115200n8";
};
};

清理并重建设备树:

$ petalinux-build -c 设备树 -x cleansstate
$ petalinux-build -c 设备树

最新文章

最新文章