当前位置: 首页 > 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

相关文章:

  • 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>,每个节点包含自己的子节点列表
  • 包头网站开发/朋友圈推广一天30元
  • 国内做网站最大的公司/南京网站seo
  • 福州电子商务网站建设/seo网上培训多少钱
  • 沧州疫情最新消息今天封城/seo网站首页推广
  • 网站两边的悬浮框怎么做/深圳网络seo推广
  • 做神马网站快速排/台州百度推广优化