关闭龙芯2E 之 cache

本文介绍在龙芯PMON环境下加载kernel时遇到的问题及解决方案,详细说明了如何通过配置CP0_config寄存器来关闭缓存,避免调试过程中受到缓存影响导致的随机死机现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



PMON 加载kernel 时,是加载到 kseg0 的(通过在 arch/mips/Makefile 中: load-$(CONFIG_GODSONEV2E) += 0x80100000 指定),该地址空间是 unmaped cached 的,当 PMON 将控制权交给内核后,内核启动过程中cache 是打开的,但在跟踪内核的启动过程中,极易受 cache 的影响,每把断点设在有 cache 操作的指令附近,都会随机的死机。


关闭龙芯的 cache ,依赖于访问的地址空间

1. 访问 cKseg0, 设置 config 寄存器的 K0域(config之低3位)为2,则关闭 cache

2. 访问经 TLB 映射的地址空间, 设置相应的 TLB 表项之 C 域为2,则关闭cache

3. 访问 xkphys, 指定 VA[61:59] 为2,则关闭 cache


考虑到内核位于 ckseg0,故而跟踪调试内核的启动过程时,只要作如下操作即可关闭cache,免受其扰:

  mfc0   t0, CP0_CONFIG     # 读取CP0之 conifg 寄存器的值于通用寄存器t0中
  and   t0, 0xfffffff8                   # 低 3 位置 0
  or       t0, 0x2                       # 低 3 位置 2,关闭 cache
  mtc0   t0, CP0_CONFIG     # 写回CP0之 conifg 寄存器


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值