描述
在 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”附加到您现有的引导参数中,如下所示:(从
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”附加到您现有的引导参数,然后从“
/ {
选择 {
bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused cpuidle.off=1";
标准输出路径 = "serial0:115200n8";
};
};
清理并重建设备树:
$ petalinux-build -c 设备树 -x cleansstate
$ petalinux-build -c 设备树