如何创建具有自定义外设和内存映射的 QEMU ARM 机器?

2024-03-26

我正在为 Cortex-M3 cpu 编写代码,并且正在使用以下命令执行单元测试qemu-arm二进制。现在一切都很好。但我想知道我是否能够使用测试整个系统qemu-system-arm?我的意思是,我想为 qemu 编写自定义“机器”,我将在其中定义所需的内存映射,并最终定义所需外围设备的一些软件模仿,是否有此类模块的一些示例?我发现这方面的信息很少。我读过一些源代码hwqemu 源代码树中的目录,但它几乎全部未注释,我仍然不确定我是否理解如何将新机器添加到 qemu 以及如何将外设附加到地址空间?


为了添加您自己的机器,您至少需要创建一个源文件,其中包含您机器的参数和外围设备。之后,在 qemu/hw/arm/ 下的 Makefile.objs 中添加一个条目。STM32 P103机器入门 https://github.com/pebble/qemu/blob/master/hw/arm/Makefile.objs#L19.

我们以 Olimex STM32 P103 开发板为例:Olimex STM32 P103 开发板代码 https://github.com/pebble/qemu/blob/master/hw/arm/stm32_p103.c。在第 105 行和第 106 行中,我们有 flash_size 和 ram_size。在第 114 行和第 115 行中,代码添加了一个连接到 GPIO A 引脚 0 的 LED。在第 130 行中,我们有机器描述“Olimex STM32 p103 Dev Board”。第131行,机器初始化函数:stm32_p103_init。另一个更完整的机器示例:卵石机代码 https://github.com/pebble/qemu/blob/master/hw/arm/pebble.c.

关于外设,考虑stm32的情况,在每个系列代码中实例化它们。 stm32f1系列:stm32f1xx.c https://github.com/pebble/qemu/blob/master/hw/arm/stm32f1xx.c,stm32f2系列:stm32f2xx.c,stm32f4系列:stm32f4xx.c。外设本身在驱动程序中实现,该驱动程序通常具有暗示性名称:stm32f2xx_adc.c、stm32f2xx_crc.c 等。添加新外设的补丁示例:STM32添加ADC https://github.com/beckus/qemu_stm32/commit/e8fb69b8d72d7cb8c533e93954c5270dcb57e0e4.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建具有自定义外设和内存映射的 QEMU ARM 机器? 的相关文章

  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • ARM 调用约定是否允许函数不将 LR 存储到堆栈中?

    正如标题所示 我在理解 ARM 架构的调用约定时遇到问题 特别是 我仍然很难知道当你调用子程序时 LR 寄存器会发生什么 我认为 当您进入子程序时 处理 LR 寄存器的最明显 最安全的方法是将其存储到堆栈中 但该行为没有出现在文档中 因此我
  • 产生并处理软件中断

    有人可以告诉我如何在Linux下生成软件中断然后用request irq处理它吗 或者也许这是不可能的 您可以使用软中断来代替 您可以通过编辑 include linux interrupt h 来定义您的 sofirq 然后使用函数 ra
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • qemu kvm:如何获取性能监控中断?

    我在操作系统内核中编写了一些函数 以便在指令计数器溢出时发出性能监控中断 PMI 它在我的机器 Intel core i5 上运行良好 但是当我使用 qemu 在 qemu 上运行它时 qemu system x86 64 enable k
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 交叉编译armv5,但它创建v7二进制文件

    我设法为arm926ej s创建了一个目标文件我在 qemu 上使用 Debian Arm arm linux gnueabi gcc 4 4 static O c mcpu arm926ej s hello c o hello root
  • 如何与 QEMU 映像共享主机的本地主机?

    想知道这样的事情是否可能 我有一个服务器在监听localhost 1889我的本地 PC 和 QEMU 映像能够使用相同的端口和 IP 访问服务器 localhost 1889 确实正在寻找以下解决方案之一 用于启用此功能的 QEMU 标志
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 为什么Android模拟器这么慢?我们怎样才能加快Android模拟器的速度呢?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 我有一个2 67GHz 赛扬处理器 以及1 21GB RAM 上x86视窗XP专业机器 我的理解是安卓模拟器在这样的机器上应该
  • 如何使用 ioread64() 和 iowrite64() 访问 IO 内存?

    背景 我目前正在编写一个设备驱动程序教育设备 https github com qemu qemu blob master hw misc edu c在 qemu RISC V 中 由此question https stackoverflo
  • 2022年Android CPU架构分布(armeabi-v7a vs arm64-v8a)

    有没有关于 2022 年 Android 设备上的架构使用情况的官方信息 我有一个支持armeabi v7a 和arm64 v8a 的应用程序 我想要放弃对armeabi v7a的支持并且仅支持 64 位设备 arm64 v8a 但我找不到
  • 一个单元在哪一级测试无锁代码?

    Can LLVM https packages debian org stretch llvm QEMU https packages debian org stretch qemu kvm GDB https packages debia
  • 更新 MMU 转换表的正确方法是什么

    我在我的 s3c2440 板上启用了 MMU 3G 4G 内存 故障属性 当我没有读 写 3G 4G 内存时一切都很好 所以为了测试页面错误向量 我写入了 0xFF 3G地址 正如我所料 我从FSR中得到了正确的值 所以我在 do page

随机推荐

  • 如何打乱数组以使所有元素改变其位置

    我需要对数组进行洗牌 以便所有数组元素都应该更改其位置 给定一个数组 0 1 2 3 就可以得到 1 0 3 2 or 3 2 0 1 但不是 3 1 2 0 因为2保持不变 我想算法不会是特定于语言的 但以防万一 我在 C 程序中需要它
  • nltk 无法找到 mace4

    在执行下面的代码时 我收到了如上所述的错误 我从以下位置下载了所需的包http www cs unm edu mccune prover9 download http www cs unm edu mccune prover9 downlo
  • 翻译字符串作为 Laravel 中的键

    我阅读了有关翻译字符串的文档检索翻译字符串 https laravel com docs 5 4 localization retrieving translation strings但不知何故我不明白如何应用它 假设我想在视图中渲染pos
  • 使UIImage符合NSCopying协议

    问题很简单 我需要一个符合 NSCopying 协议的 UIImage 但我完全不知道从哪里开始实现这一点 你有什么指示可以帮助我吗 提前致谢 id copyWithZone NSZone zone return UIImage alloc
  • SQL方法用单个空格替换重复空格

    有没有更优雅的方法来做到这一点 我想用单个空格替换重复的空格 declare i int set i 0 while i lt 20 begin update myTable set myTextColumn replace myTextC
  • 使用路径样式 amazon aws sdk go

    我在我的应用程序中使用一些 aws sdk go 功能 它会创建要请求的 DNS 样式主机 例如somebucket mys3 com 但我有一些 DNS 问题 希望以路径方式接收请求 例如mys3 com somebucket 如何配置
  • 尝试在 Javascript (ES5) 中实现 OPP 继承的简单方法

    只是出于好奇 我在 Javascript 中玩弄原型继承和 OOP 继承 大多数结果涉及用函数模拟 类 和 扩展 概念 而其他结果则使用原型和构造函数 我写了这段代码 function Warrior weaponName var weap
  • Android:“BadTokenException:无法添加窗口;您的活动正在运行吗?”在 PreferenceActivity 中显示对话框

    我想寻求一些帮助 在我的应用程序中 我只有一个活动 一个PreferenceActivity 不需要其他 它只是一个简单的后台同步应用程序 所以PrefsActivity是主 启动器 用户设置首选项后 检查checkBoxPreferenc
  • Java 和 PostgreSQL 之间的“坏记录 MAC”SSL 错误

    我们遇到了 Java 应用程序和 PostgreSQL 8 3 服务器之间随机断开连接的问题 并出现 坏记录 MAC SSL 错误 我们两边都运行 Debian Lenny 在客户端 我们看到 main WRITE TLSv1 Applic
  • 如何获取整个月的天数

    我正在创建全年日历 如何在 Flutter 中获取该月的天数 例如 一月 gt 31 二月 gt 28 29 按年 三月 gt 31 依此类推 Using date1 difference date2 inDays 是不正确的 对于某些日期
  • 从类和 javadoc 生成代码存根

    有人熟悉生成代码存根的工具吗具有有意义的名称来自类和javadoc 真正的问题应该是 我的类没有调试信息和匹配的 javadoc 但我的 IntelliJ IDEA 8 0 1 拜托 没有 IDE 战争 没有考虑 javadoc 并向我显示
  • 可以在单个进程中在 JNI 中创建多个 JVM 吗? [复制]

    这个问题在这里已经有答案了 我有一个在单个进程中运行并允许使用模块的 C 框架 我想添加的一种类型的模块是加载 JAR 然后调用其中特定的预定义函数的模块 根据用户的需要 可以有任意数量的模块同时运行 这就提出了一个问题 每个模块是否可以使
  • GCC NRVO/RVO 警告

    有没有warning 这让我们知道是否NRVO RVO执行与否 在GCC 我找到 fno elide constructors关掉NRVO RVO but NRVO RVO有其发生的条件 有时不发生 有必要知道是否NRVO RVO当额外的复
  • 与多个属性共享枚举声明值

    我想要一个具有多个属性的类 可以用数值保存工作日 summary weekday integer collection weekday integer 我想我可以将整数映射到值使用枚举 http edgeapi rubyonrails or
  • ActiveModel 序列化器:运行时有条件吗?

    我使用rails 5 0 1 和active model serializers 0 10 2 我想以某种方式有条件地序列化has many协会 class Question lt ApplicationRecord has many re
  • 如何创建或生成 .mlpd 文件以在 xamarin profiler 中检查应用程序性能

    你好 Xamarin 团队 我正在 Visual Studio 2017 社区中处理 Xamarin 表单 我想检查 Xamarin Profiler 中的应用程序性能 为此 我需要创建一个 mlpd 来检查 Xamarin Profile
  • 单击链接时使用 jQuery/Javascript 更改下拉选项

    假设我有以下链接和下拉菜单 a href contact Send a mail to mother a a href contact Send a mail to father a a href contact Send a mail t
  • 在 Windows 上非侵入式解锁文件

    有没有办法使用 Python 脚本在 Windows 上解锁文件 该文件被另一个进程独占锁定 我需要一个不终止或中断锁定过程的解决方案 我已经看过了门户锁 http code activestate com recipes 65203 一种
  • 在 Eclipse 中重新启动应用程序

    我正在使用 Eclipse Juno 开发一个独立服务器 不是战争 我将它作为 Java 应用程序从 Eclipse 运行 在进行一些代码更改后 我想停止当前正在运行的服务器并再次启动它 我每天这样做几十次 我目前的做法如下 转到 调试 选
  • 如何创建具有自定义外设和内存映射的 QEMU ARM 机器?

    我正在为 Cortex M3 cpu 编写代码 并且正在使用以下命令执行单元测试qemu arm二进制 现在一切都很好 但我想知道我是否能够使用测试整个系统qemu system arm 我的意思是 我想为 qemu 编写自定义 机器 我将