首页 > 其他分享 >riscv学习笔记

riscv学习笔记

时间:2022-12-31 22:22:05浏览次数:53  
标签:git roms riscv 笔记 学习 Submodule https qemu

Riscv是现在比较火的一套开源指令集(ISA),这就有很多搞头了,可定制化,不用收费,不像arm虽然很成熟,但是需要几百到几千万不等的授权费,对于小公司来说成本过于高昂。

Sifive是Riscv指令设计者的下场搞的公司(Andrew Waterman 是SiFive 的总工程师和联合创始人),算做的比较好的,卖IP core设计方案,可以再官网www.sifive.com找到不少产品方案,对于初创公司可以买买开发板做做预研,SiFive U54 Core是比较老的一款IP设计方案了,应该是19年推出的。

1. 编译工具的构建

1.1. 下载源码

强烈建议在ubuntu载源码,在windos下使用命令行下载会出现很多问题,下载下来的文件是dos格式而不是unix格式,同时文件的可执行权限会消失,导致最后编译会失败。这也就是为什么之前按照网上教程操作一直不成成功的根本原因。

riscv-gnu-toolchain官方地址:https://github.com/riscv/riscv-gnu-toolchain,不推荐,速度太慢,推荐码云的镜像下载,

$ mkdir project

$ cd project

 

不推荐一次性下载,可能由于网络原因导致中断,每次下载一个模块

$ git clone https://gitee.com/mirrors/riscv-gnu-toolchain

$ cd riscv-gnu-toolchain

//qemu下载速度极慢,链接到git.qemu.org,最后编译没有用到,最后下载

$ git clone --recursive https://gitee.com/mirrors/qemu.git

$ git clone --recursive https://gitee.com/mirrors/riscv-newlib.git

$ git clone --recursive https://gitee.com/mirrors/riscv-binutils-gdb.git

$ git clone --recursive https://gitee.com/mirrors/riscv-dejagnu.git

$ git clone --recursive https://gitee.com/mirrors/riscv-glibc.git

$ git clone --recursive https://gitee.com/mirrors/riscv-gcc.git

 

 

可以看到网络ok,这时候下载qemu模块应该没问题

 

 

 

 

 

$ git clone --recursive https://gitee.com/mirrors/qemu.git

Cloning into 'qemu'...

remote: Enumerating objects: 14297, done.

remote: Counting objects: 100% (14297/14297), done.

remote: Compressing objects: 100% (5356/5356), done.

remote: Total 505779 (delta 10735), reused 11144 (delta 8898), pack-reused 491482

Receiving objects: 100% (505779/505779), 185.08 MiB | 11.71 MiB/s, done.

Resolving deltas: 100% (414927/414927), done.

Checking connectivity... done.

Submodule 'capstone' (https://git.qemu.org/git/capstone.git) registered for path 'capstone'

Submodule 'dtc' (https://git.qemu.org/git/dtc.git) registered for path 'dtc'

Submodule 'roms/QemuMacDrivers' (https://git.qemu.org/git/QemuMacDrivers.git) registered for path 'roms/QemuMacDrivers'

Submodule 'roms/SLOF' (https://git.qemu.org/git/SLOF.git) registered for path 'roms/SLOF'

Submodule 'roms/edk2' (https://git.qemu.org/git/edk2.git) registered for path 'roms/edk2'

Submodule 'roms/ipxe' (https://git.qemu.org/git/ipxe.git) registered for path 'roms/ipxe'

Submodule 'roms/openbios' (https://git.qemu.org/git/openbios.git) registered for path 'roms/openbios'

Submodule 'roms/opensbi' (https://git.qemu.org/git/opensbi.git) registered for path 'roms/opensbi'

Submodule 'roms/qboot' (https://github.com/bonzini/qboot) registered for path 'roms/qboot'

Submodule 'roms/qemu-palcode' (https://git.qemu.org/git/qemu-palcode.git) registered for path 'roms/qemu-palcode'

Submodule 'roms/seabios' (https://git.qemu.org/git/seabios.git/) registered for path 'roms/seabios'

Submodule 'roms/seabios-hppa' (https://git.qemu.org/git/seabios-hppa.git) registered for path 'roms/seabios-hppa'

Submodule 'roms/sgabios' (https://git.qemu.org/git/sgabios.git) registered for path 'roms/sgabios'

Submodule 'roms/skiboot' (https://git.qemu.org/git/skiboot.git) registered for path 'roms/skiboot'

Submodule 'roms/u-boot' (https://git.qemu.org/git/u-boot.git) registered for path 'roms/u-boot'

Submodule 'roms/u-boot-sam460ex' (https://git.qemu.org/git/u-boot-sam460ex.git) registered for path 'roms/u-boot-sam460ex'

Submodule 'slirp' (https://git.qemu.org/git/libslirp.git) registered for path 'slirp'

Submodule 'tests/fp/berkeley-softfloat-3' (https://git.qemu.org/git/berkeley-softfloat-3.git) registered for path 'tests/fp/berkeley-softfloat-3'

Submodule 'tests/fp/berkeley-testfloat-3' (https://git.qemu.org/git/berkeley-testfloat-3.git) registered for path 'tests/fp/berkeley-testfloat-3'

Submodule 'ui/keycodemapdb' (https://git.qemu.org/git/keycodemapdb.git) registered for path 'ui/keycodemapdb'

Cloning into 'capstone'...

remote: Counting objects: 29791, done.

remote: Compressing objects: 100% (11220/11220), done.

 

1.2. 编译

$ mkdir bin

$ cd bin

 

$ ../configure --prefix=/home/zzz/riscv-gcc/riscv-gnu-toolchain/bin

$ make -j16

编译持续约一个小时

 

 

 

 

 

 

 有了编译bin,就可以写C语言并汇编实际了解riscv了。

 

linux x86的解释器无法执行由riscv编译工具链的编译的可执行文件,我们需要再把程序移动到riscv版本的内核上才能运行,这个暂且略过。

使用下面命令编译生成hello.s

riscv64-unknown-elf-gcc -S hello.c

可以看到生成的汇编代码确认都是riscv指令

 

 

2. riscv指令集介绍

参考RISC-V 手册,文件名RISC-V-Reader-Chinese-v2p1_2.pdf,可以网上随便搜下都有,题一嘴,国外的手册确实写的水平高,图文并茂。

附录A RISC-V 指令列表

 

 

3. riscv调试介绍

调试器可以用开源的sifive的freedom studio,具体可以再sifive官网下载到,界面使用eclipse制作,和arm的调试工具很像。或者用其他家的调试工具,

加断点调试

wfi(Wait For Interrupt) 

在M 模式运行期间可能发生的同步例外有五种:

⚫ 访问错误异常当物理内存的地址不支持访问类型时发生(例如尝试写入ROM)。

⚫ 断点异常在执行ebreak 指令,或者地址或数据与调试触发器匹配时发生。

⚫ 环境调用异常在执行ecall 指令时发生。

⚫ 非法指令异常在译码阶段发现无效操作码时发生。

⚫ 非对齐地址异常在有效地址不能被访问大小整除时发生。

 

 

在C代码加入下面语句,有第三种写法,如下

__asm__(“wfi”);

 

__asm__(“ebreak”);

 

__asm__(“ecall”);


详细调试说明看riscv手册

 

 

 

 

 由于笔者很久不在芯片行业工作了,笔力稀疏,敬请谅解,本篇文章算是简单回顾过去的一段岁月,把坑给填上。

 

标签:git,roms,riscv,笔记,学习,Submodule,https,qemu
From: https://www.cnblogs.com/waterzhm/p/17017460.html

相关文章

  • .NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构二)--学习笔记
    目录为什么我们用OrleansDaprVSOrleansActor模型Orleans的核心概念结合OPStorming的实践结合OPStorming的实践业务模型设计模型代码实现业务模型我们可以把关键......
  • 学习笔记282—SD与SEM有区别吗
    SD是标准偏差,反映的是样本变量值的离散程度。SEM是标准误差,反映的是样本均数之间的变异。SD为样本标准差,根据标准差SD能反映变量值的离散程度。正负值就是在计算好的SD上......
  • 修复U盘【笔记】
    修复U盘【笔记】​​前言​​​​参考​​​​修复U盘​​​​问题​​​​0.芯片精灵查看​​​​1.用APTool软件擦除量产信息​​​​2.用CBMTool量产U盘​​​​结果​​......
  • 在pycharm里debug以学习huggingface/transformers
    把https://github.com/huggingface/transformers整个zip下载下来把src/transformers文件夹复制出来,放pycharm里,成这样:根据https://github.com/huggingface/transform......
  • SAP MM 模块的入门者,想学习 ABAP 编程语言应该如何入手?
    本人自2007年计算机专业研究生毕业加入SAP成都研究院,在这之前也从未听说过ABAP这门编程语言,我算是ABAP零基础开始学习。根据我的过往经验,可以先简单了解一下ABAP......
  • 交流学习SAP ERP的各种问题和方法,如何快速入行?
    笔者从2007年大学计算机专业硕士毕业后加入SAP成都研究院从事SAP各种标准产品的设计和研发工作已经十五余年,期间也曾经在SAPERP上工作过一段时间,当然也包含SAP......
  • Stata学习笔记三
    usedentistsfdasavemydent,replace//replace选项如果新形成文件有同名存在直接覆盖保存为SASXPORT文件,扩展名为.xpttypemydent.xptlistduplicateslistrecom//有一......
  • Stata学习笔记四
    usedentlab,clear//将dentlab.dta读入内存,如果原内存已经打开其他文件直接清除list//+----------------------------------------------------------+//|......
  • Python爬虫学习经历
    requests模块1.处理一个UA反爬importrequestscontent=input("请输入你要搜索的内容:")url=f"https://www.sogou.com/web?query={content}"headers={#添加......
  • 雅思写作笔记——杜仕明
    写作考试基本情况一共两道题,时长60min,20min小作文(150words),40min大作文(250words)。1、Task1:小作文柱状图折线图表格饼图混合图流程图地图......