树莓派CM4 U-Boot加载bootaa64.efi时提示内存覆盖错误求助
解决U-Boot加载bootaa64.efi时的"overwrite reserved memory"错误
排查与解决步骤
验证文件加载范围是否触达保留内存
你指定的kernel_address_r(0x00080000)虽不在bdinfo显示的保留段内,但U-Boot会校验文件加载后的整个内存范围。先执行ls nvme 0:1查看bootaa64.efi的大小,计算结束地址(kernel_address_r + 文件大小),确认是否和第二个保留段0x3cb4f000-0x3dffffff重叠。调整U-Boot编译时的内存预留配置
重新编译U-Boot时,检查configs/rpi_4_defconfig里的内存相关参数。树莓派4的U-Boot可能默认给GPU或硬件预留了bdinfo没显示的内存,尝试添加CONFIG_RPI_RESERVE_MEMORY=n,或者调整CONFIG_SYS_MEM_RESERVE_SECURE参数,减少不必要的内存锁定。直接指定远离保留区的加载地址
别依赖kernel_address_r,手动选一个安全地址比如0x40000000,执行命令加载试试:load nvme 0:1 0x40000000 /EFI/BOOT/bootaa64.efi如果成功,再修改U-Boot环境变量
bootcmd里的加载地址。检查NVMe分区与EFI文件完整性
用part list nvme 0确认EFI分区是GPT格式且标记为ESP(EFI系统分区),同时重新拷贝bootaa64.efi,排除文件损坏导致的内存误判。
额外验证
如果以上都没用,切换回SD卡执行mmc dev 0,加载原SD卡的bootaa64.efi试试,确认是不是EFI文件本身的问题。
内容的提问来源于stack exchange,提问作者Doc Bobo
相关产品推荐
相关产品推荐

