您的位置:首页 > 运维架构 > Linux

Linux 移植日记 day2

2020-05-11 04:13 1191 查看

今日任务预测:完成cache以及TLB设计与异常处理

继续在尝试运行u-boot
Error:

bfc007a0: bc500000 cache 0x10,0(v0)

==============nemu registers================
$pc:    0xbfc007a0   $hi:    0x00000000   $lo:    0x00000000
$ninstr: 00000000                  $instr: bc500000
$0 :0x00000000 $at:0x00000000 $v0:0x87fc0000 $v1:0x00000010
$a0:0x00000000 $a1:0x87ff8713 $a2:0x87ff8710 $a3:0x00000010
$t0:0xffffc83c $t1:0xf20f0000 $t2:0x00000004 $t3:0xfc000000
$t4:0x00000005 $t5:0x00000012 $t6:0xffffffff $t7:0x00000002
$s0:0xc83c0000 $s1:0x00038714 $s2:0x87f60000 $s3:0x87f60ef4
$s4:0x87fc0000 $s5:0x00000000 $s6:0x00000000 $s7:0x00000000
$t8:0x00000000 $t9:0x00000002 $k0:0x803fff50 $k1:0x00000000
$gp:0x00000000 $sp:0x803fbef0 $fp:0x803fbf50 $ra:0xbfc00c98
==============nemu status end===============
cycle 8727277: pc: nemu:bfc007a0 <> pc:bfc00380

此处是当前写回的PC错误,发生这样的错误一般是上条指令正常执行后,下一条指令的取址出错。
故寻找上一条PC

bfc0079c: bc550000 cache 0x15,0(v0)
,也是同样的指令cache,但目前代码内cache和TLB并没有实现,所以应该去完善cache和TLB。

中断异常测试
Error:

bfc3ca60:	2694ca64 	addiu	s4,s4,-13724
bfc3ca64 <break_pc1>:
bfc3ca64:	0000000d 	break

首先看上一条指令的addiu,我发现了我很久以来都没有明确mips的

addi
addiu
u
的意义,于是我搜索了一下。
“MIPS32的ADDI和ADDIU的实现要点(加法指令)”感谢原博主!

上面的博文最后总结ADDI和ADDIU的实现有以下2个要点:

1)仅支持有符号运算(补码运算),16位立即数需要进行符号扩展;

2)ADDI带有溢出检测(或者说带“自陷”功能,虽然不常用)。

所以

u
并不是有无符号,而是是否进行溢出检测
(下图出自上述博文,里面的c和c++对于整数的溢出情况处理原理以前也注意过)
-----------------------------------------------------------------------------------------------------------------------
框架更新分割线,上面的error是框架bug导致
-----------------------------------------------------------------------------------------------------------------------

框架更新:

  • 合并了Linux和u-boot的编译与运行
  • 把CP0的congfig1寄存器的TLB entries 砍掉了一半,从64变为32
  • 更新了insttest测试集,为了模拟linux,加入了许多AdEL 和AdeD异常。
  • 更新以前WBU的反馈逻辑,现在是根据CP0的中断异常反馈情况来决定是否写入,逻辑比之前更清晰

看来得先完成异常中断才能开始TLB了。

淡定路过的我 原创文章 19获赞 1访问量 698 关注 私信
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: