You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM64汇编中str x6, [x7]指令执行后内存值未更新问题问询

ARM64平台STR指令执行后内存未更新的常见原因

结合你提到的EL3运行环境、IRAM写入失败SDRAM写入成功的现象,常见的触发场景如下:

  • MMU内存属性配置错误:如果MMU已开启,目标内存区域对应的页表项若被配置为只读、不可写设备属性,或者安全属性与当前核心权限不匹配,写入操作会被静默丢弃。即使运行在EL3权限,也受页表内存属性约束。
  • 缓存一致性问题:若目标内存被配置为带Cache的普通内存属性,str指令写入的内容会先存在L1/L2 Cache中,未刷回物理内存前,通过JTAG读取物理内存只能得到旧值。此时执行缓存清理指令(如dc civac 目标地址)后再读取即可看到更新。
  • 内存区域硬件访问限制:部分SOC的IRAM、外设寄存器区域会通过安全防火墙做访问管控,boot早期未完成防火墙配置时,核心对这类区域的写入会被总线拦截丢弃,不会触发异常。而SDRAM区域通常默认开放写入权限,因此可以写入成功。
  • 链接地址与运行地址不匹配:ldr x7, =myval2 取到的是链接脚本中定义的链接地址,如果此时程序还未完成重定位,运行地址和链接地址不一致,该地址指向的并非实际物理内存中myval2的位置,写入会落到错误地址,自然无法修改目标变量。
  • 存储器未完成初始化:写入操作执行时,目标存储器还未完成初始化流程,比如IRAM时钟未使能、未上电,SDRAM还未完成时序配置,此时写入操作会直接无效。
  • 调试器观测偏差:JTAG调试器自身存在读取缓存,或者调试器配置的内存访问空间和核心实际访问的安全/非安全空间不匹配,导致读到的是旧的缓存值,而非内存真实值,手动刷新调试器的内存读取缓存即可验证。

内容的提问来源于stack exchange,提问作者Chan Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:01