我最近在尝试在B站上录制使用loongarch架构写操作系统的视频,遇到一个问题。
我的主机环境是:
主机架构:x86_64
操作系统:windows10,
编程语言:rust, 工具链nightly-x86_64-pc-windows-gnu, 版本1.82.0-nightly
编译目标:loongarch64-unknown-none
qemu版本:qemu-system-loongarch64 8.2.0
qemu运行参数:qemu-system-loongarch64 -m 8G -smp 1 --cpu la464 --machine virt -nographic -kernel xxx
视频地址:rust手写龙芯操作系统10保存上下文哔哩哔哩bilibili
gitee地址:laos: b站视频rust手写龙芯架构操作系统的配套代码 (gitee.com)
我根据龙芯官网下载的《龙芯架构参考手册卷一》、《龙芯3A5000_3B5000处理器寄存器使用手册》里面提供的资料,在配置外部中断遇到了一个问题。根据《龙芯3A5000_3B5000处理器寄存器使用手册》73页描述,我在访问0x1fe01428(中断使能寄存器) 这个地址的时候,直接进入了例外处理程序,例外编号8(访存指令地址错例外),然后我又分别测试了以下地址:
0x1c000000(bios入口地址) 例外,编号8
0x1fe00000(版本寄存器) 例外,编号8
0x1fe001e0(uart0基地址) 不会触发例外
0x1e020000(qemu8.2源码/include/hw/loongarch/virt.h) 不会触发例外,(uint8)读取到0x51
0x1e020010 不会触发例外,读取到0x51
0x1e020020 触发例外,编号8
然我还使用了:iocsrwr 和iocsrrd指令测试(rj填写的是相对0x1fe00000的偏移地址),以上会触发例外的地址,不会再触发,但是iocsrrd读取到的数据是0;
请问我遇到是这个问题应该怎么解决,是不是我qemu少传了一个参数?麻烦大家了,万分感谢!!!