关闭龙芯2E 之 cache

本文介绍在龙芯平台上使用PMON加载内核到kseg0空间时遇到的问题及解决方案。由于缓存影响导致内核启动过程中的不稳定现象,文章详细说明了如何通过配置CP0寄存器来关闭缓存,确保调试过程顺利进行。

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

作者: comcat 发表日期: 2006-11-01 19:50       http://comcat.blog.openrays.org/blog.php?do=showone&tid=148

 

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、付费专栏及课程。

余额充值