2023.04.17 运行开源代码tinyriscv步骤及遇到问题

news2024/9/28 19:14:47

tinyriscv:https://gitee.com/liangkangnan/tinyriscv/tree/verilator

如有错误之处还请不吝赐教!

1、安装gcc工具链

下载gcc工具链(百度云链接,提取码:yaib),使用下面的命令解压到/opt/riscv32目录下:

sudo tar zxf tinyriscv-gcc-toolchain.tar.gz -C /

2、下载代码

下载本项目verilator分支的代码:

git clone -b verilator https://gitee.com/liangkangnan/tinyriscv.git

3、运行仿真

打开终端,进入到sim目录下,执行以下的命令编译:

make recompile
这个命令会重新编译整个rtl源码和sdk/examples/simple这个C语言例程。如果需要使用其他例程,可以用PROG参数指定,比如:

make PROG=/path/sdk/examples/hello_world/hello_world.mem recompile
执行以下命令运行仿真:

在make recompile会遇到:
①问题:make[2]: cc: No such file or directory

**解决:**发现时gcc没有装,这里直接安装GCC:
sudo apt install gcc

②问题:安装完gcc后make recompile发现还是会报错,这里有参数重定义
ld: sim_jtag.o:/home/lik/tinyriscv/sim/remote_bitbang/remote_bitbang.h:11: multiple definition of `rbs_err’; remote_bitbang.o:/home/lik/tinyriscv/sim/remote_bitbang/remote_bitbang.h:11: first defined here
解决:https://gitee.com/liangkangnan/tinyriscv/issues/I605MY
在这里插入图片描述
③问题:/bin/sh: 1: verilator: not found
解决:sudo apt install verilator

④问题:make[2]: g++: No such file or directory
解决:sudo apt install g++

make run
在这里插入图片描述

打开另一个终端,进入到tools/openocd目录下,运行openocd:

./openocd_linux -f …/…/sim/remote_bitbang.cfg
在这里插入图片描述
可以看到openocd已经连上了,可以使用telnet或者gdb进行调试了。

①问题:./openocd_linux: error while loading shared libraries: libftdi.so.1: cannot open shared object file: No such file or directory
解决:sudo apt-get install libftdi1

②问题:./openocd_linux: error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
解决:sudo apt-get install libhidapi-hidraw0

随后连接成功

4、使用telnet进行调试

再打开另一个终端,输入以下命令连接telnet:

telnet localhost 4444

在这里插入图片描述
然后就可以使用各种命令进行调试了。下面介绍一些常用的命令:

halt:停住MCU,进入调试模式;

resume:MCU从停住的地方继续执行,退出调试模式;

reset:复位MCU,复位之后就开始执行。通常在下载完程序后使用该命令来运行程序;

reset halt:复位MCU,然后停住MCU,即MCU停在复位地址处;

bp 0x00000010 4 hw:打断点,其中0x00000010是断点的地址,4表示地址长度为4个字节,hw表示硬件断点。tinyriscv只支持硬件断点。

rbp 0x00000010:删除0x00000010地址处的断点;

bp:查看所有断点信息;

step:单步执行,每次执行一条指令;

mww 0x00000010 0x1234:即memory write word,往0x00000010地址处写入0x1234,长度为4个字节;

mdw 0x00000010 2:即memory display word,从0x00000010地址处读取2个word;

reg sp:读取sp寄存器的值;

reg sp 0x10:往sp寄存器写入0x10;

load_image:加载image文件,比如:load_image filename address bin min_address max_length,其中filename表示要加载的文件,address表示要加载到哪个地址,bin表示文件的类型,min_address表示最小地址,该值与address相同即可,max_length表示文件的最大长度。目前使用这个命令来下载C语言程序。

verify_image:比如:verify_image filename offset,其中filename表示已经下载了的文件,offset表示从哪个地址开始校验。使用这个命令来校验下载进去的程序是否正确。

load_bin:如果觉得load_image命令的参数比较多,可以使用load_bin命令,比如:load_bin bin_file 0x0 1,表示将bin_file二进制文件下载到0x0地址处,并且校验。

5、使用gdb进行调试
除了使用telnet进行调试之外,还可以使用gdb进行调试,这也是大部分IDE(eclipse等)所使用的调试方式。

openocd连上之后,打开另一个终端,执行以下命令运行gdb:

/opt/riscv32/bin/riscv32-unknown-elf-gdb ~/tinyriscv/sdk/examples/simple/simple
接着,设置一下超时时间:

set remotetimeout 2000
连接openocd服务:

target remote localhost:3333
加载程序:

load
之后就可以用gdb命令来调试了,比如打印mul变量的值:

print mul

在这里插入图片描述
注意,如果要用gdb进行调试,则编译C程序时必须加上-g参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring定时任务常用Cron表达式

目录 一、SpringBoot定时任务 定时任务概述 创建定时任务 代码开启定时任务 执行结果 (单线程) 多线程处理定时任务 执行结果(并发) 二、Cron详解 Cron表达式是什么 Cron表达式的结构 每个域可出现的字符类型和各字符的…

花生采摘

[NOIP2004 普及组] 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”。 鲁宾逊先生和多多都…

linux 安装神州通用数据库 V7.0

linux 安装神州通用数据库 V7.0 操作系统、数据库1、官方下载链接2、windows客户端下载链接3、官方安装手册4、安装前准备3.1、创建安装用户3.2、以root 用户修改神通数据库安装包的所有者为shentong 用户3.3、以root 用户创建神通数据库主目录并修改所有者为shentong 用户3.4、…

学成在线笔记+踩坑(2)——【内容模块】课程基础查询,swagger+数据库字典+Httpclient+跨域

目录 1.【内容模块】需求分析 2.【内容模块】模块工程的结构 3.【课程查询功能1】通用 3.1 分析数据模型 3.2 mybatis-plus代码生成器 3.3 内容模块聚合api,model,service模块 3.4 接口设计分析 3.5 【基础模块】分页查询模型类 3.6【基础模块】日期配置类 3.7【内容…

Ae 入门系列之九:表达式

与使用关键帧相比,Ae 的表达式 Expression也用于控制属性值。 只不过使用表达式能简化操作,大大提高工作效率,使复杂动画的制作变得更加轻松。 ◆ ◆ ◆ 表达式语法基础 表达式基于标准的 JavaScript 语言。 如果熟悉脚本语言编程&#xff…

AutoGPT初次探索:免费体验、使用指南与心得总结

AutoGPT初次探索:免费体验、使用指南与心得总结 写在前面的废话一、部署 Auto-GPT二、试运行 Auto-GPT三、我踩过的坑四、后续探索 AutoGPT是一种基于GPT的自动化系统,为GPT提供了一个身体和内存,使其能够自主执行任务,例如市场分…

自己的完整c++ cuda包

pytorch关于c的所有文档集合 Welcome to PyTorch Tutorials — PyTorch Tutorials 2.0.0cu117 documentation 1.前置条件 使用编辑器clion,安装好cudatoolkit,cudnn,pytorch环境,编译工具gcc等等。 记得要设置好cudatoolkit的…

【C++】哈希的应用——布隆过滤器

哈希的应用——布隆过滤器 文章目录 哈希的应用——布隆过滤器一、布隆过滤器的概念与性质1.布隆过滤器的引出2.布隆过滤器的概念3.布隆过滤器的误判4.布隆过滤器的应用场景5.布隆过滤器优缺点6.如何选择哈希函数个数和布隆过滤器长度 二、布隆过滤器的实现1.布隆过滤器基本框架…

机器学习——SVM原理

问:支持向量机是基于经验风险最小化(ERM) 原则构建的,因此有更好的泛化性能。 答:错误。支持向量机是一种基于结构风险最小化原则构建的机器学习算法,它可以通过寻找合适的分割超平面来实现分类任务,并且具有较好的泛…

设计模式:软件设计原则

文章目录 1.开闭原则2.里氏代换原则3.依赖倒转原则4.接口隔离原则5.迪米特法则6.合成复用原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开…

QGIS绘制一张地图学习笔记01——配准栅格数据并解决配准导出的栅格文件不能显示的问题

1、进入配准工具主页面 首先,打开我们的绘制底图或者叫配准目标底图,我这里用的是高德的在线地图,具体qgis加载在线地图的方法见我前面的章节。加载的在线地图如下所示。 接着我们点击上方菜单栏的 栅格 菜单,点击菜单中的 配准工…

软件测试-测试用例案例及思维导图展示

目录 自动售货机的测试用例 一个杯子的测试用例 一支笔的测试用例 朋友圈点赞的测试用例 登录模块 购物车的测试用例 Windows对文件的复制粘帖功能的测试用例 自动售货机的测试用例 一个杯子的测试用例 一支笔的测试用例 朋友圈点赞的测试用例 功能测试 1点赞后是否显示…

docker安装rabbitMq集群

一 机器准备 准备三台虚拟机: 192.168.56.102 102.168.56.103 102.168.56.104 二 拉取镜像 在三台虚拟机上分别执行: docker pull rabbitmq:3.9.5-management 三 启动容器 103: docker run -d --hostname node2 --ad…

React--》React组件变化每次都会导致重新渲染,如何解决?

目录 React.memo useCallback useMemo React.memo React组件会在两种情况下下发生渲染 第一种:当组件自身的state发生变化时 第二种:当组件的父组件重新渲染时 第一种情况下重新渲染无可厚非,state都变化了组件自然应该重新进行渲染&…

7.1 基本运放电路(1)

集成运放的应用首先表现在它能构成各种运算电路上,并因此而得名。在运算电路中,以输入电压作为自变量,以输出电压作为函数;当输入电压变化时,输出电压将按一定的数学规律变化,即输出电压反映输入电压某种运…

【Web】WebHook详解

文章目录 webhook简介什么是 webhook?webhook 有什么用?webhook请求过程使用 webhookWebhook POST 或 GETWebhook 与轮询何时使用 webhookAsp .Net接受与处理接口处理 发送 WebHook和消息队列区别与联系来源 webhook简介 在当今高度连接的网络世界中,没有什么可以孤立地发挥…

Vue3二维码(QRCode)

可自定义设置以下属性: 扫描后的文本或地址(value),类型:string,默认 二维码大小(size),类型:number,单位px,默认 160 二维码颜色&…

nginx 部署vue项目,路由模式为history时,页面刷新404问题

目录 情况说明本案例解决方法配置解释为什么会出现404的情况root 和 alias 的区别try_files 配置的作用 友情提示 情况说明 nginx部署vue项目,文件放在html下的dist文件夹中 nginx.conf 文件中,server 里配置文件的位置、请求跨域等信息 本案例解决方…

Ubuntu Linux操作

引言 晚上上课发现桌子上遗留了这本书,水课就看了看学习下,以下内容直接总结知识点 磁盘内存解析 (1)硬盘有数个盘片,每个盘片两个面,每个面一个磁头。 (2)盘片被划分为多个扇形区域即扇区。 (3)同一盘片不同半径的同心圆为磁道。 (4)不同盘片相同半径…

制作真人手办有哪些不便?怎么解决?

相信很多朋友都喜欢拍摄写真,比如孩子生日的时候,结婚纪念的时候,写真照片能留存住很多美好的记忆。 不过随着科技的发展,大家已经不能满足只靠照片来记录生活了,越来越多的人开始盯上了手办这件物品。将真人的照片和…