![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenSBI
文章平均质量分 79
risc-v OpenSBI源码解析
byd yes
这个作者很懒,什么都没留下…
展开
-
OpenSBI atomic_xchg函数分析
atomic_xchg函数原型long atomic_xchg(atomic_t *atom, long newval){ /* Atomically set new value and return old value. */#ifdef __riscv_atomic return axchg(&atom->counter, newval);#else return xchg(&atom->counter, newval);#endif}原创 2022-03-24 08:59:13 · 1415 阅读 · 0 评论 -
OpenSBI 汇编启动流程
OpenSBI启动时,第一条执行的指令是_start函数,在fw_start.S文件中,下图为此文件的执行流程:在调用sbi_init前,会设置好scratch寄存器和scratchspace中的数据,scratchspace填充的部分数据是由结构体struct sbi_scratch描述的。每个hart都由一个sbi_scratch结构体来描述。结构体如下:/** Representation of per-HART scratch space */struct sbi_scra...原创 2022-03-22 14:43:54 · 2648 阅读 · 0 评论 -
OpenSBI ELF rela.dyn和.dynsym动态链接过程
在OpenSBI中重定位分成了两种,根据是否配置了FW_PIC宏来区分,配置了FW_PIC,即本文描述的rela.dyn和.dynsym的动态链接。未配置FW_PIC是加载地址和链接地址不相等情况下的代码拷贝重定位。rela.dyn.rela.dyn节是什么节呢?该节保存的是重定位信息,数据内容是包含带有显式加数的重定位条目,每个条目固定大小(24个字节)。话又说回来,什么是重定位?这里引用oracle网站的解答:重定位是连接符号引用与符号定义的过程。例如,程序调用函数时,关联的调用原创 2022-03-21 11:12:10 · 2719 阅读 · 0 评论 -
OpenSBI payload
uboot U-Boot作为OpenSBI的有效负载 U-Boot是一个开源的主引导加载程序。在嵌入式环境中,它可以用作第一和/或第二阶段引导加载程序。在OpenSBI环境中,U-Boot可以被指定为OpenSBI固件的负载,成为OpenSBI固件执行之后的启动阶段。 构建和生成U-Boot映像 关于如何从U-Boot提示符构建U-Boot映像和引导高级操作系统的详细说明,请参阅U-Boot构建文档。Linux Linux作为OpenSBI的直接有效负载 OpenSBI原创 2022-03-16 21:54:16 · 1935 阅读 · 0 评论 -
OpenSBI qemu risc-v virt machine平台
QEMU RISC-V Virt Machine PlatformQEMU RISC-V Virt Machine 是为 RISC-V 软件开发和测试而创建的虚拟平台。它也被称为 QEMU RISC-V VirtIO 机器,因为它使用 VirtIO 设备进行网络、存储和其他类型的 IO。要构建特定于平台的库和固件映像,在顶层的make命令使用PLATFORM=generic参数.Platform OptionsQEMU RISC-V Virt Machine平台没有任何平台特定的选项。编原创 2022-03-16 21:46:42 · 3185 阅读 · 0 评论 -
OpenSBI平台固件的区别
OpenSBI平台固件 OpenSBI提供了针对特定平台的固件构建。支持不同类型的固件来处理不同平台早期启动阶段的差异。所有的固件都会根据平台特定的代码以及OpenSBI通用库代码执行平台硬件的相同的初始化过程。所支持的固件类型将因平台早期引导阶段传递的参数的处理方式以及固件之后的引导阶段的处理和执行方式而有所不同。早期的启动阶段将通过RISC-V CPU的以下寄存器传递信息: hardid通过a0寄存器传递。 通过a1寄存器在内存中的设备树blob地址。地址必须对齐到8个字节。..原创 2022-03-16 13:35:25 · 1417 阅读 · 1 评论