等待编译完成,就可以开始运行了,buildroot编译过程中会下载kernel代码,很慢,这个时候可以修改buildroot目录下的.config文件中kernel的下载链接为中科大镜像源,然后再编译,下载就会很快 06—qemu运行opensbi+kernel+rootfs 新建一个run.sh文件,写入如下内容: qemu-9.1.1/build/qemu-system-riscv64 -M virt -smp 4 -m...
Firmware with Jump Address (FW_JUMP): 这种固件类型假设下一个启动阶段(例如 bootloader 或操作系统内核)的入口地址是固定的,但不直接包含下一阶段的二进制代码,只是告诉OpenSBI执行完之后调到哪里执行,目前我们使用qemu采用的就是这种方式 Firmware with Payload (FW_PAYLOAD): 这种固件类型直接包含了下一阶段的二进...
Cloud Studio代码运行 https://github.com/bigmagic123/riscv64_opensbi_baremetal/tree/master/03_interrupt 已经实现了timer中断的产生过程。 3.1 设置中断向量表 本程序需要设置中断向量表,前面提到过,中断向量的跳转有两种模式:Direct与Vectored。Direct可以直接转到固定的pc地址,然后由统一的入口进行处理,这种比较容...
再打开一个终端,进入到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...
简单的说,opensbi就是一个开源的RISC-V虚拟化二进制接口的通用的规范。 使用的是BSD-2的开源协议,也就是任何人都可以随意修改和使用,也提供了通用的规范化的接口实现。 这里就需要理解一下为什么需要规范化了。 以往芯片厂家都会按照自己的启动规则定义一些启动的流程,比如有些需要SPL+UBOOT,有些可以是直接从SPI或...
正常流程init/main.c中start_kernel入口,要到console_init之后才能真正打印,前面的打印都是缓存在printk的ringbuffer中的。如果在console_init前就异常了,此时就看不到打印信息,为了调试console_init前的状态,需要能更早的打印。内核提供了一种early打印的方式,尤其是riscv平台我们可以直接ecall调用opensbi的打印,这样...
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。
1 SPL到OpenSBI spl启动流程如下: 从外设加载镜像到DDR中。 解析镜像格式,比如FIT。 解析FIT中OpenSBI镜像地址和入口地址;uboot镜像地址,并附着到fdt中;解析获取fdt地址。 准备好HART ID、fdt地址、struct fw_dynamic_info结构体三个参数后,跳转到OpenSBI镜像开始执行。
配置和编译 OpenSBI的配置选项位于不同平台下的 config.mk 文件,例如 platform/generic/config.mk : # Blobs to build FW_TEXT_START=0x80000000FW_DYNAMIC=yFW_JUMP=yFW_PAYLOAD=y ifeq ( $(PLATFORM_RISCV_XLEN) , 32) # This needs to be 4MB aligned for 32-bit syste
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.测试及校验