当前位置: 首页 > news >正文

QEMU学习之路(9)— 在RISCV64 virt中添加DMA设备

QEMU学习之路(9)— 在RISCV64 virt中添加DMA设备

一、前言

QEMU版本:7.0.0
操作系统:Ubuntu 20.04.6 LTS
gcc版本:9.4.0
安装依赖

sudo apt install ninja-build wget 

参考:Qemu Virt平台集成ARM PL080 DMA

二、QEMU安装

通过如下命令安装QEMU
1、获取安装包

wget https://download.qemu.org/qemu-7.0.0.tar.xz

2、解压

tar xvf qemu-7.0.0.tar.xz

3、配置

cd qemu-7.0.0
mkdir build && cd build
../configure --target-list="riscv64-softmmu" --prefix=`pwd`/opt

4、编译

make -j $(nproc)

5、安装

make install

6、查看版本

./opt/bin/qemu-system-riscv64 --version

在这里插入图片描述

三、修改文件

打开include/hw/riscv/virt.h文件,添加DMA的枚举变量
在这里插入图片描述
打开hw/riscv/virt.c文件,添加pl080头文件

在这里插入图片描述

添加DMA的配置地址
在这里插入图片描述
hw/riscv/virt.c文件中编写创建DMA设备的函数

static void create_dma(RISCVVirtState *s, DeviceState *irqchip)
{int i;DeviceState *dev;SysBusDevice *sysbus;const MemMapEntry *memmap = virt_memmap;MemoryRegion *sysmem = get_system_memory();dev = qdev_new(TYPE_PL080);sysbus = SYS_BUS_DEVICE(dev);object_property_set_link(OBJECT(dev), "downstream", OBJECT(sysmem), &error_fatal);sysbus_realize_and_unref(sysbus, &error_fatal);sysbus_mmio_map(sysbus, 0, memmap[VIRT_DMA].base);for (i = 0; i < 3; ++i) {sysbus_connect_irq(sysbus, i, qdev_get_gpio_in(irqchip, DMA_IRQ));}
}

然后在virt_machine_init函数中调用
在这里插入图片描述
修改hw/riscv/Kconfig文件,将PL080添加到RISCV_VIRT设备中
在这里插入图片描述
然后重新配置、编译和安装

../configure --target-list="riscv64-softmmu" --prefix=`pwd`/opt
make -j $(nproc)
make install
http://www.xdnf.cn/news/1024939.html

相关文章:

  • LeetCode - 904. 水果成篮
  • MATLAB | 如何使用MATLAB获取《Nature》全部绘图 (附23-25年图像)
  • 功能测试—软件的生命周期
  • 内存泄漏排查
  • 新手前端开发常见问题之层级问题
  • 洛谷:B4163 [BCSP-X 2024 12 月初中组] 序列选择
  • 《棒垒球百科》棒球、垒球奥运会运动员规定·棒球1号位
  • 前端项目Excel数据导出同时出现中英文表头错乱情况解决方案。
  • 【Python办公】使用pandas批量读取csv保存为Excel
  • 上传视频报错 413 Request Entity Too Large
  • 《Transformer 的奇妙图书馆:一场关于注意力的冒险》
  • Zemax光学设计自学
  • 泰国跨境电商系统开发:多语言多币种 + 国际物流对接,中泰贸易桥梁
  • 用电子垃圾DIY一个可调小电源(5-12V)
  • 69、JS中如何调用上位机接口
  • 苹果WWDC 2025 技术趋势分析
  • SAP生产订单技术性完成(TECO)操作指南与实战应用
  • 写作中的贪念
  • [MSPM0开发]之七 MSPM0G3507 UART串口收发、printf重定向,循环缓冲解析自定义协议等
  • 前端八股文-react篇
  • Ubuntu 与 Windows 实现文件夹共享
  • 前缀和:leetcode974--和可被K整除的子数组
  • 序列化问题和网络字节序
  • 商城系统微服务化改造:三大难点与实战解决方案
  • P5 QT项目----会学网络调试助手服务端(5.1)
  • 一文读懂:晶振不同等级的差异及对应最佳应用场景
  • 关于 WASM: WASM + JS 混合逆向流程
  • ffmpeg rtmp推流源码分析
  • Java的学习心得
  • 大型螺旋桨三维扫描尺寸检测逆向建模-中科米堆