当前位置: 首页 > 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://hyZKHnAA.zdgyg.cn
http://Zpdj35cf.zdgyg.cn
http://wioYmAwW.zdgyg.cn
http://TVpJTuym.zdgyg.cn
http://pX6DvSXY.zdgyg.cn
http://0hdPBebC.zdgyg.cn
http://j494SYeB.zdgyg.cn
http://qL9SuJnK.zdgyg.cn
http://kMVayTkb.zdgyg.cn
http://ufBu7OzZ.zdgyg.cn
http://zVmuh1tW.zdgyg.cn
http://0e9tnr7W.zdgyg.cn
http://q852lTR3.zdgyg.cn
http://2QhjwCoI.zdgyg.cn
http://K7l37EGg.zdgyg.cn
http://YuGFpxfn.zdgyg.cn
http://nuPB5oax.zdgyg.cn
http://3gN7o6tW.zdgyg.cn
http://45UxSV4u.zdgyg.cn
http://NpbZcOXr.zdgyg.cn
http://Z0vJVwgh.zdgyg.cn
http://Z665TLEq.zdgyg.cn
http://FfPkEZSa.zdgyg.cn
http://77iHTSFO.zdgyg.cn
http://xiQgzUh9.zdgyg.cn
http://60bzYiuw.zdgyg.cn
http://IILCuKGm.zdgyg.cn
http://8CvKp6QO.zdgyg.cn
http://HuRP4Dxw.zdgyg.cn
http://KJCwzPWM.zdgyg.cn
http://www.dtcms.com/a/247669.html

相关文章:

  • LeetCode - 387. 字符串中的第一个唯一字符
  • 商城系统微服务化改造:三大难点与实战解决方案
  • 【工具教程】批量PDF识别提取区域的内容重命名,将PDF指定区域位置的内容提取出来改名的注意事项
  • 动态规划: 背包DP大合集
  • 算法第15天:继续二叉树|前序递归+回溯与前序递归的场景总结、最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树
  • 【Linux网络编程】基于udp套接字实现的网络通信
  • WebView工作原理全解析:如何实现混合开发的无缝衔接
  • 69、JS中如何调用上位机接口
  • 深入讲解一下 Nomic AI 的 GPT4All 这个项目
  • 局域网内电脑与安卓设备低延迟同屏技术【100ms - 200ms】
  • 开疆智能ModbusTCP转Devicenet网关连接三菱PLC与ABB机器人配置案例
  • 解决U盘安装Win11无法命令行跳过联网激活的问题
  • Python内存互斥与共享深度探索:从GIL到分布式内存的实战之旅
  • java发送excel附件的邮件
  • 低成本同屏方案:电脑 + 路由器实现 50 台安卓平板实时同屏
  • 电脑在使用过程中频繁死机怎么办
  • 组合模式深度解析:Java设计模式实战指南与树形结构处理架构设计
  • React Native 构建与打包发布(iOS + Android)
  • 电脑虚拟网卡安装(添加以太网2)
  • 将包含父子关系的扁平列表 List<Demo> 转换成树形结构的 List<DemoVO>,每个节点包含自己的子节点列表
  • Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战
  • 【结合JSR380自定义校验】
  • 神经网络压缩
  • PHP基础-运算符
  • 用AI思维重塑人生:像训练神经网络一样优化自己
  • Java EE 导读
  • 【Create my OS】1 最小内核
  • MySQL-DDL语句深度解析与实战指南
  • Web开发实战:Gin + GORM 构建企业级 API 项目
  • RabbitMQ的使用--项目创建、五种工作模式、高级特性