首页 > 其他分享 >在RISC-V上移植系统

在RISC-V上移植系统

时间:2023-09-22 20:23:51浏览次数:31  
标签:系统 RISC 文档 内核 opensbi qemu 移植 加载

预备知识

GNU Binutils参考文档

GNU Binutils是一系列用来生成可执行文件的软件的集合体,它包括我们常常使用的ld,as等软件。即使你没有亲自使用过这些软件,只要你使用了gcc就相当于间接使用了它们,因为gcc会在生成可执行程序时使用这些软件。

我们需要准备好as和ld的参考文档,因为我们不可避免地要了解汇编和链接脚本。我不在博客中详细介绍他们的内容,因为没有比官方文档更好的教材了。

文档可以在GNU Binutils主页获取。

RISC-V参考文档

准备好如下文档,在不理解的时候可以参考

  1. 《The RISC-V Instruction Set Manual Volume I: Unprivileged ISA》
  2. 《The RISC-V Instruction Set Manual Volume II: Privileged Architecture》
  3. OpenSBI主页
  4. Qemu文档以及源代码

这里我们建议自己编译qemu,因为有的地方想要真正理解需要阅读qemu源代码。

我始终坚持一个观点,官方文档是最好的教材,所以我会尽可能指出每个知识点究竟在官方文档的那一部分。如果查阅官方文档无法给你答案,那么最好的办法就是咨询那些对这方面有了解的人。

RISC-V异常处理

根据RISC-V标准文档《The RISC-V Instruction Set Manual Volume I: Unprivileged ISA》,RISV异常处理的具体过程是由EEI(RISC-V execution environment interface)决定的。

首先我们必须明确一个观点,RISCV的特权等级分为三个层次,分别是M模式,S模式,U模式。SBI运行在M模式,操作系统内核运行在S模式,应用程序运行在U模式,这部分的资料可以在RISC-V特权文档中的第一章看到。

系统调用

这里我们主要说说系统调用。在U模式下运行的用户程序,一旦调用ecall指令,就会陷入到S模式中,操控权也就转交到内核手里。RISC-V的特权寄存器中有一个寄存器叫做stvec,这个寄存器储存了陷阱处理程序的基地址,具体内容可以参照RISC-V特权文档的4.1.2节。总之,在调用了ecall后,芯片将会跳转到stvec所指向的程序代码,因此我们需要在操作系统启动时设置好该寄存器的值。

RISC-V的启动过程

我们使用qemu模拟RISC-V来运行操作系统。我们从qemu命令行开始讲解一个内核被加载的过程:

qemu-system-riscv32 -kernel target -machine virt -m 64M -nographic -no-reboot \
  -global virtio-mmio.force-legacy=false \
  -drive file=target/fs.img,if=none,format=raw,id=hd \
  -device virtio-blk-device,drive=hd,bus=virtio-mmio-bus.0

一些参数的说明

  • -kernel kernel加载内核

  • -machine virt指明机器类型

  • -m 64M设置内存

  • -nographic关闭图形化显示

在机器启动时,首先会运行SBI加载内核,这里SBI起到了类似于Bootloader的作用,具体SBI的运行过程,我查找了很多资料都没有找到描述,最终还得依靠阅读qemu的源代码。

由于上面的命令行没有指定sbi文件,所以会使用默认的sbi文件,对于riscv32来说,这个文件名被定义在include/hw/riscv/boot.h中,为

#define RISCV32_BIOS_BIN    "opensbi-riscv32-generic-fw_dynamic.bin"

加载opensbi的函数为riscv_find_and_load_firmware,阅读代码会发现这个函数将opensbi加载到0x80000000这个位置上。

接下来opensbi会加载内核,阅读opensbi有关firmware的文档,我们发现opensbi有三种内核加载方式,分别是fw_dynamicfw_payloadfw_jump,而我们默认的固件使用的是fw_dynamic加载方式。这种方式会将内核加载到qemu给出的地址上。

qemu负责加载内核的函数是riscv_load_kernel,在这个函数中我们发现,如果内核是elf文件(这也是我们这次试验选择的方式),那么内核加载地址将根据elf的程序入口决定。但是注意不要与固件加载的地方发生冲突,也不要和virt的内存布局不协调。这里我建议在riscv32上将内存布局加载到0x80400000上,因为这是qemu在没有elf文件配置的情况下自行计算出的程序入口,最符合qemu的习惯。

标签:系统,RISC,文档,内核,opensbi,qemu,移植,加载
From: https://www.cnblogs.com/riyuejiuzhao/p/17695170.html

相关文章

  • Linux系统文件管理读书笔记
        在我初学Linux系统的过程中,我学到了一些基础知识,包括了解Linux系统的目录结构、掌握处理文件的基本命令,以及掌握vim编辑器的使用。这些知识对于理解和使用Linux系统非常重要,下面是我学到的一些关键点:Linux系统目录结构:Linux系统的目录结构是层级化的,它包括了许多不同......
  • EasyGBS视频存储为什么是视频监控系统平台的重要组成部分
    ​EasyGBS是一个高度灵活、功能丰富的视频监控系统,其强大的拓展性和便捷的部署方式使其在众多场景中都能发挥出色的性能。EasyCVR平台支持多种主流标准协议,包括但不限于国标GB28181、RTSP/Onvif、RTMP等,这些协议为设备之间的互联互通提供了基础。数据安全性与稳定性:视频存储......
  • ubuntu系统安装到U盘便捷启动
    1、前言实现u盘系统即插即用,便捷带走。这里需要使用到VM虚拟机进行安装,这里选择64位的ubuntu系统。2、运行VM虚拟机以管理员运行VM虚拟机,创建一个ubuntu系统,然后选中相关的镜像,大多数配置默认即可,记得usb控制器改到3.1,不然无法识别插到USB3.0上的u盘。选中添加,选中硬盘,点下一......
  • php js+laravel+mysql手术麻醉临床信息系统
    医院手麻系统源码 技术架构:phpjs+laravel+mysql vue2elementB/S网页版手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字......
  • 记一次 .NET 某仪器测量系统 CPU爆高分析
    一:背景1.讲故事最近也挺奇怪,看到了两起CPU爆高的案例,且诱因也是一致的,觉得有一些代表性,合并分享出来帮助大家来避坑吧,闲话不多说,直接上windbg分析。二:WinDbg分析1.CPU真的爆高吗这里要提醒一下,别人说爆高不一定真的就是爆高,我们一定要拿数据说话,可以用!tp观察下。......
  • GPS北斗卫星同步时钟(NTP时间同步)助力化工厂各系统协同方案
    GPS北斗卫星同步时钟(NTP时间同步)助力化工厂各系统协同方案GPS北斗卫星同步时钟(NTP时间同步)助力化工厂各系统协同方案京准电子科技官微——ahjzsz本项目需配备多台HR-901GB网络时间服务器,各作业部部署一台或多台一级NTP网络时间服务器(炼铁事业部包括高炉、烧结和球团,需配置3台网......
  • 深圳轨道交通系统不仅是城市的交通工具
    深圳,作为中国改革开放的典范城市之一,一直以来都在不断完善城市交通系统,以满足日益增长的人口和经济需求。根据广郡通数据平台的数据,截止到2021年,深圳的轨道交通线路长度已达431公里,共有264个轨道交通车站,其中包括44个换乘车站,轨道交通客运量高达218,633.2万人次。本文将探讨深圳轨......
  • 基于Java web的动力租车管理系统的设计与实现-计算机毕业设计源码+LW文档
    DESIGNANDIMPLEMENTATIONOFPOWERCARRENTALMANAGEMENTSYSTEMBASEDONJAVAWEB ABSTRACTWiththerapiddevelopmentofInternettechnology,thecurrentlifestyleofpeoplehasundergonetremendouschanges.Especiallyundertheinfluenceofthesharing......
  • Jenkins问题记录:Windows Server Jenkins修改配置后重启系统,Jenkins被初始化,启动后需要
    现象:WindowsServerJenkins修改配置后重启系统,Jenkins被初始化,启动后需要重新安装插件,配置管理员密码,项目列表丢失原因:修改"C:\ProgramFiles\Jenkins\jenkins.xml"配置,可能是配置异常,系统重启后,Jenkins自动重置了解决:重新安装Jenkins,配置文件就重新初始化,再启动不需要再安......
  • 用EXCEL VBA 做的学生成绩分析系统
    标题:基于EXCELVBA的学生成绩分析系统——详细介绍与说明导言:学生成绩分析对于教育机构和学生个体来说具有重要意义。本文将详细介绍基于EXCELVBA的学生成绩分析系统的设计与实现。通过该系统,用户可以方便地导入学生成绩数据、进行数据分析和可视化,并得出相应的分析报告。该系统......