opensbi下的riscv64裸机编程2(中断与异常) 1.本文说明 2.riscv特权模式下的异常 2.1 CSPs 2.2 异常开关的寄存器 2.3 与中断相关的指令 3.中断测试 3.1 设置中断向量表 3.2 开启中断设置 3.3 初始化timer 3.4 开启中断 3.5 中断处理 4.测试及校验 5.总结 1.本文说明 任何时候,中断和异常的产生都是十分值得...
再打开一个终端,进入到fw_jump.elf的目录下: cd risc-v/opensbi/build/platform/generic/firmware/ 运行gdb: gdb-multiarch 注意,此时不要带fw_jump.elf,因为OpenSBI不在0地址运行,如果带fw_jump.elf参数,gdb会默认加载symbol到0地址,后面还需要删除这些symbol,否则会对调试有影响,比如设置断点会命中多个地址等 q...
这种固件类型假设下一个启动阶段(例如 bootloader 或操作系统内核)的入口地址是固定的,但不直接包含下一阶段的二进制代码,只是告诉OpenSBI执行完之后调到哪里执行,目前我们使用qemu采用的就是这种方式 Firmware with Payload (FW_PAYLOAD): 这种固件类型直接包含了下一阶段的二进制代码,并且,当上一个启动阶段不传递设备树...
而risc-v虽然目前芯片种类少,但是也需要制定一些启动规则,于是有了下面的规则: 当有了opensbi后,再回头看启动流程,与aarch64之间进行一个对比: aarch64借助atf框架,从EL3跳转到EL1,并启动u-boot。 对于riscv,上图是一个标准的加载启动流程,其中Opensbi提供了M模式的运行时库。 5.openSBI call接口的实现 opensbi...
04 qemu+gdb调试OpenSBI 终端运行如下命令启动qemu: ./run.sh -S -s 此时qemu停下来了,等待gdb的连接 再打开一个终端,进入到fw_jump.elf的目录下: cd risc-v/opensbi/build/platform/generic/firmware/ 运行gdb: gdb-multiarch 注意,此时不要带fw_jump.elf,因为OpenSBI不在0地址运行,如果带fw_jump.elf参数...
RISC-V下SPL->OpenSBI-OPTEE-Linux启动流程如下: M-Mode:u-boot-spl加载u-boot.itb文件,启动OpenSBI。 M-Mode->S-Mode:OpenSBI通过mret跳转到OPTEE执行,启动TOS。 S-Mode->M-Mode:OPTEE启动完后,通过ecall返回到执行OpenSBI。 M-Mode->S-Mode:OpenSBI通过mre启动u-boot。
OpenSBI给出的fw_dynamic镜像启动建议流程: 实际详细流程如下: 1 SPL到OpenSBI spl启动流程如下: 从外设加载镜像到DDR中。 解析镜像格式,比如FIT。 解析FIT中OpenSBI镜像地址和入口地址;uboot镜像地址,并附着到fdt中;解析获取fdt地址。 准备好H
正常流程init/main.c中start_kernel入口,要到console_init之后才能真正打印,前面的打印都是缓存在printk的ringbuffer中的。如果在console_init前就异常了,此时就看不到打印信息,为了调试console_init前的状态,需要能更早的打印。内核提供了一种early打印的方式,尤其是riscv平台我们可以直接ecall调用opensbi的打印,这样...
默认三种固件类型都编译。 FW_TEXT_START OpenSBI的运行地址,需要把OpenSBI下载到FW_TEXT_START指定的地址才能运行 FW_JUMP_ADDR FW_JUMP固件的跳转地址,对于RV32需要4M对齐,对于RV64需要2M对齐 FW_PAYLOAD_OFFSET FW_PAYLOAD固件的偏移地址,对于RV32需要4对齐,对于RV64需要2M对齐 ...
RISC-V Linux运行时OpenSBI配置和编译 描述 配置和编译 OpenSBI的配置选项位于不同平台下的登录后复制config.mk文件,例如登录后复制platform/generic/config.mk: 登录后复制# Blobs to buildFW_TEXT_START=0x80000000 FW_DYNAMIC=y FW_JUMP=y FW_PAYLOAD=yifeq($(PLATFORM_RISCV_XLEN), 32)# This needs to ...