Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

Latest commit

 

History

History
54 lines (42 loc) · 2.52 KB

File metadata and controls

54 lines (42 loc) · 2.52 KB

spike+bbl运行linux框架, 简介

没有什么比写个模拟器更费神的事情了

作为risc-v官方的模拟器,spike自然具备运行linux的强大功能 (即使很慢很慢),虽然发行版还没有相关的消息,能够运行内核拿到shell也是十分让人觉得激动了。

本文,我们将简单的对整个框架进行描述

图解框架

从关系的角度看,可以将几个组件之间的关系表述如下

  Emulation Environment
+-----------------------------------+
| Software     +------------------+ |
|              |                  | |
| +---------+  |      Linux       | |
| |   BBL   |  |                  | |
| +---------+  +------------------+ |
+-----------------------------------+
| Hardware                          |
|              Spike                |
|                                   |
+-----------------------------------+

注意,在编译的时候,vmlinux以及作为payload作为 BBL 的一部分了,其中BBL, Linux vmlinux 是以risc-v64作为架构的,bbl除了可以运行在spike上,同时也可以直接交由qemu进行运行(这可以说是相当酷了)

如下

riscv-pk ➤ file bbl                                                        
bbl: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, not stripped
...
linux ➤ file vmlinux                                                      
vmlinux: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, BuildID[sha1]=53b49230f9ffd2c716f34f0f388112d973b3216d, not stripped

但 spike 是在运行在本机架构的程序。对于模拟而言,它是硬件底层,而实际上,它是运行在被模拟程序和本地机器之间的一个接口

riscv-isa-sim ➤ file spike
spike: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=59b05d12e8a5ad067ac7c4dabacf02e5b88824fc, with debug_info, not stripped

总结

我们简单开了个头,描述了一下几个组件之间的关系,这里进行概括

  • 通过risc-v toolchain编译得到的vmlinux,这个是我们要模拟的操作系统内核
  • 通过risc-v toolchain编译得到的bbl,其编译过程中会将vmlinux作为payload进行绑定,自身boot完成设置后即跳入linux内核
  • 通过本地toolchain编译得到的spike,其是硬件的模拟实现,由这个host程序来完成对以上目标的模拟

后续