QEMU 仿真RISC-V freeRTOS 程序

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

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

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

target-list 設定爲riscv32-softmmu,

bash 复制代码
$ 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
bash 复制代码
$ 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

bash 复制代码
$ /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 可執行程序

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

bash 复制代码
$ 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,

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

bash 复制代码
$ 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

相关推荐
嵌入式小企鹅14 小时前
国产大模型与芯片加速融合,RISC-V生态多点开花,AI编程工具迈入自动化新纪元
人工智能·学习·ai·嵌入式·算力·risc-v·半导体
Shining059621 小时前
QEMU 编译开发环境搭建
人工智能·语言模型·自然语言处理·云原生·qemu·vllm·华为昇腾
波特率1152003 天前
FreeRTOS当中的Mail Queue使用教程(CMSIS_v1)
单片机·操作系统·freertos
嵌入式小企鹅3 天前
DeepSeek-V4昇腾首发、国芯抗量子MCU突破、AI编程Agent抢班夺权
人工智能·学习·ai·程序员·算力·risc-v
好家伙VCC4 天前
**基于RISC-V架构的嵌入式系统开发:从零开始构建高效低功耗应用**在当前物联网(IoT)和边缘计
java·python·物联网·架构·risc-v
高铭杰4 天前
Postgresql热迁移pgbench持续读写零中断
postgresql·qemu·neon
济6175 天前
FreeRTOS 通信任务设计(3)---基于状态机的串口协议帧解析
stm32·嵌入式·freertos
嵌入式小企鹅5 天前
国芯抗量子MCU突破、太空算力元年开启、AI编程工具密集发布
学习·ai·边缘计算·算力·risc-v·芯片·半导体
济6175 天前
FreeRTOS 通信任务设计(4终)----从字节流到有效帧的完美闭环
stm32·嵌入式·freertos
迷藏4946 天前
**RISC-V生态下的嵌入式开发新范式:从指令集到自定义外设的全流程实战**在当前国产化
java·python·risc-v