QEMU 仿真RISC-V freeRTOS 程序

news2024/9/24 19:21:45

1. 安裝RISC-V 仿真環境 --QEMU

安裝包下載地址: https://www.qemu.org/

安裝命令及安裝成功效果如下所示,

target-list 設定爲riscv32-softmmu, 

$ cat ~/project/qemu-8.0.4/install.sh 
sudo apt-get install libglib2.0-dev
sudo apt-get install libpixman-1-dev
./configure --target-list=riscv32-softmmu
make -j24
sudo make install -j24
$ qemu-system-riscv32 -h
QEMU emulator version 8.0.4
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
usage: qemu-system-riscv32 [options] [disk_image]

2. 安裝RISC-V 編譯器, (過程略)

如下cmd 可檢查是否安裝成功並顯示版本號 12.2.0

$ /opt/riscv/bin/riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (g2ee5e430018) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

3. 準備RISC-V 可執行程序

  • 測試使用freeRTOS 官網提供例程, https://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCChttps://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS/Demo/RISC-V_RV32_QEMU_VIRT_GCC

修改例程編譯器路徑徑, 並且由於編譯器版本不匹配, 需要修更換指令集

$ git diff FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/
diff --git a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile
index bd24333a2..736fe8fcb 100644
--- a/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile
+++ b/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Makefile
@@ -1,6 +1,7 @@
-CROSS   = riscv64-unknown-elf-
+CROSS   = /opt/riscv/bin/riscv64-unknown-elf-
 CC      = $(CROSS)gcc
 OBJCOPY = $(CROSS)objcopy
+OBJDUMP = $(CROSS)objdump
 ARCH    = $(CROSS)ar
 
 BUILD_DIR       = build
@@ -14,7 +15,7 @@ CPPFLAGS = \
        -I $(RTOS_SOURCE_DIR)/include \
        -I $(RTOS_SOURCE_DIR)/portable/GCC/RISC-V \
        -I $(RTOS_SOURCE_DIR)/portable/GCC/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions
-CFLAGS  = -march=rv32imac -mabi=ilp32 -mcmodel=medany \
+CFLAGS  = -march=rv32imac_zicsr -mabi=ilp32 -mcmodel=medany \
        -Wall \
        -fmessage-length=0 \
        -ffunction-sections \
@@ -56,6 +57,9 @@ DEPS = $(SRCS:%.c=$(BUILD_DIR)/%.d) $(ASMS:%.S=$(BUILD_DIR)/%.d)
 
 $(BUILD_DIR)/RTOSDemo.axf: $(OBJS) fake_rom.lds Makefile
        $(CC) $(LDFLAGS) $(OBJS) -o $@
+       $(OBJCOPY) -O ihex $(BUILD_DIR)/RTOSDemo.axf $(BUILD_DIR)/RTOSDemo.hex
+       $(OBJCOPY) -O binary $(BUILD_DIR)/RTOSDemo.axf $(BUILD_DIR)/RTOSDemo.bin
+       $(OBJDUMP) -S -d $(BUILD_DIR)/RTOSDemo.axf > $(BUILD_DIR)/RTOSDemo.asm
 
 $(BUILD_DIR)/%.o: %.c Makefile
        @mkdir -p $(@D)
  • 編譯完成後, BUILD_DIR 下生成RTOSDemo.axf 可執行文件

4.運行RISC-V程序

  執行如下命令, 運行上一步準備好的RTOSDemo.axf, 觀察到周期性打性LOG,

證明程序有正常運行起來, 檢查與上一步例程功能一致,  完結收工~

$ qemu-system-riscv32 -nographic -machine virt -net none -chardev stdio,id=con,mux=on -serial chardev:con -mon chardev=con,mode=readline -bios none -smp 4 -kernel ~/project/freeRTOS/FreeRTOS_main/FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/build/RTOSDemo.axf 
Hello FreeRTOS!
0: Tx: Transfer1
0: Rx: Blink1
0: Tx: Transfer2
0: Rx: Blink2
0: Tx: Transfer1
0: Rx: Blink1
0: Tx: Transfer2

5. 參考資料

QEMU RISC-V 官方文檔: qemu-8.0.4/docs/system/riscv/virt.rst

freeRTOS RISC-V QEMU 官方使用文檔: FreeRTOS/Demo/RISC-V-Qemu-virt_GCC/Readme.md 

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

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

相关文章

STM32移植ST77891.69寸屏幕并移植lvgl8.0.2(按键输入设备)一些心得

学习目标: 将ST7789(1.69寸圆角屏SPI)驱动移植+lvgl移植+按键当作输入设备 学习内容: 驱动移植lvgl移植按键移植软件使用正片开始: 先说说这块屏幕的介绍呗 ST7789屏幕是一种高性能的液晶显示屏,它具有高清晰度、高亮度、低功耗等优点。它采用了SPI接口通信,可以实现快速…

Hive原理剖析

一、简介 Hive是建立在Hadoop上的数据仓库框架,提供大数据平台批处理计算能力,能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务…

k3s初体验

概述 K3s 是轻量级的 Kubernetes。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。 K3s 是 rancher 公司开发维护的一套 K8s 发行版。 目的是轻量化 K8s,并将其应用于 IoT 设备(比如树…

信息系统项目管理师(第四版)教材精读思维导图-第五章信息系统工程

请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 5.1 软件工程 5.2 数据工程 5.3 系统集成 5.4 …

JVM第二篇 类加载子系统

JVM主要包含两个模块,类加载子系统和执行引擎,本篇博客将类加载子系统做一下梳理总结。 1.类加载子系统功能 2.类加载子系统执行过程 2.1 加载 解析class文件的常用工具

SpringCloud学习笔记(十二)_Zipkin全链路监控

Zipkin是SpringCloud官方推荐的一款分布式链路监控的组件,使用它我们可以得知每一个请求所经过的节点以及耗时等信息,并且它对代码无任何侵入,我们先来看一下Zipkin给我们提供的UI界面都是提供了哪些信息。 zipkin首页为我们提供了对于调用链…

JavaScript最牛逼代码语句

下面这段代码是JavaScript中最牛逼的表达式 ([][[]] [])[!![]] ([] {})[!![] !![]]为什么说这个表达式是最牛逼的表达式呢?我们把它放浏览器内执行一下 输出如下,怎么样,牛不牛逼 那它为什么会输出这么一个玩意儿呢,我们先把它拆解一下 ([][[]] [])[!![]] ([] {})[!!…

【python使用 Pillow 库】缩小|放大图片

当我们处理图像时,有时候需要调整图像的大小以适应特定的需求。本文将介绍如何使用 Python 的 PIL 库(Pillow)来调整图像的大小,并保存调整后的图像。 环境准备 在开始之前,我们需要安装 Pillow 库。可以使用以下命令…

文心一言 VS 讯飞星火 VS chatgpt (82)-- 算法导论8.1 1题

一、如果用go语言,在一棵比较排序算法的决策树中,一个叶结点可能的最小深度是多少? 文心一言: 在一个排序决策树(如二叉搜索树)中,每个叶节点的最小深度等于输入数据中最大元素与最小元素之间的位距离。…

(动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】

❓剑指 Offer 48. 最长不含重复字符的子字符串 难度:中等 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为…

Java“牵手”天猫淘口令转换API接口数据,天猫API接口申请指南

天猫平台商品淘口令接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取天猫商品的标题、价格、库存、商品快递费用,宝贝ID,发货地,区域ID,快递费用,月销量、总销量、库存、详情描…

ArrayList集合安全

并发修改异常 java.util.ConcurrentModificationException异常 CopyOnWriteArrayList add() 方法 public boolean add(E e) {final ReentrantLock lock this.lock;lock.lock();try {Object[] elements getArray();int len elements.length;Object[] newElements Arrays.c…

【Acwing285】没有上司的舞会(树形dp)题目笔记

题目描述 题目分析 首先来看状态表示: f[u][1]:所有从以u为根的子树中选择,并且不选u这个点的情况之下的最大指数 f[u][0]:所有从以u为根的子树中选择,并且选择u这个点的情况之下的最大指数 然后看状态计算&#x…

3 自制一个集群分发脚本

1. 随便取了一个名字:xsync 2. 在一个配置环境变量的目录下,我是放在了/opt/software下,这个路径我是配置了环境变量的。 3. 编辑脚本:vim xsync #!/bin/bash#1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!…

【淘宝/天猫】获得淘宝商品详情sku(PC端APP端),关键词搜索商品列表,商品分类等

采集商品详情的主要用途包括: 1. 电商平台运营:电商平台需要收集商品的详细信息,包括商品名称、描述、价格、规格、图片等,以便展示给用户进行购买决策。通过采集商品详情,电商平台可以提供丰富的商品信息给用户&…

openGauss学习笔记-52 openGauss 高级特性-LLVM

文章目录 openGauss学习笔记-52 openGauss 高级特性-LLVM52.1 适用场景52.2 非适用场景52.3 其他因素对LLVM性能的影响52.4 LLVM使用建议 openGauss学习笔记-52 openGauss 高级特性-LLVM openGauss借助LLVM(Low Level Virtual Machine)提供的库函数&…

语言基础篇1——Python概述,Python是什么?Python能干什么?

概述 简介 Python,计算机高级语言,读作/ˈpaɪθən/(英音)、/ˈpaɪθɑːn/(美音),意为蟒蛇,Python的logo为两条缠绕的蟒蛇 特点 Python以开发效率高而运行效率低著称 应用领域…

Android学习之路(10) Bundle

Bundle的概念理解 Bundle经常出现在以下场合: Activity状态数据的保存与恢复涉及到的两个回调:void onSaveInstanceState (Bundle outState)、void onCreate (Bundle savedInstanceState)Fragment的setArguments方法:void setArguments (Bu…

无可用的防病毒提供方你的设备

今天安装软件时关闭了一下windows的Defender,然后安装后出现下面问题 莫名奇妙我的病毒防护就不能用了 后来请教了老师才知道是安装的软件把我系统设置改了,以后使用一键安装软件要谨慎 解决措施: CMD命令,输入“regedit”&#…

kubernetes/k8s驱逐机制总结篇

概述 k8s的驱逐机制是指在某些场景下,如node节点notReady、node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点。这里也将kube-scheduler的抢占调度纳入到了驱逐的讨论范围内&#…