如何创建具有自定义外设和内存映射的 QEMU ARM 机器?
How to create a QEMU ARM machine with custom peripherals and memory maps?
我正在为 Cortex-M3 cpu 编写代码,并且我正在使用 qemu-arm
二进制文件执行单元测试。现在一切正常。但我想知道我是否能够使用 qemu-system-arm
测试整个系统?我的意思是,我想为 qemu 编写自定义 "machine",我将在其中定义所需的内存映射,并最终定义所需外围设备的一些软件模仿,是否有此类模块的一些示例?我发现有关此的信息很少。我已经阅读了 qemu 源代码树中 hw
目录中的一些源代码,但几乎都没有注释,我仍然不确定我是否理解如何将新机器添加到 qemu 以及如何将外围设备附加到地址 space?
为了添加您自己的机器,您至少需要创建一个源文件,包含您机器的参数和外围设备。之后,在 qemu/hw/arm/ 下的 Makefile.objs 中添加一个条目。 STM32 P103 machine entry.
我们以Olimex STM32 P103开发板为例:Olimex STM32 P103 Development Board code. In lines 105 and 106, we have flash_size and ram_size. In lines 114 and 115 the code add a LED connect to GPIO A pin 0. In line 130 we have machine description, "Olimex STM32 p103 Dev Board". In line 131, the machine init function: stm32_p103_init. Another example of a machine more complete: Pebble machine code。
考虑到stm32的情况,关于外围设备,它们在每个系列代码中都被实例化了。 stm32f1 系列:stm32f1xx.c, stm32f2 family: stm32f2xx.c, stm32f4 family: stm32f4xx.c. The peripheral itself is implemented in a driver which typically has a suggestive name: stm32f2xx_adc.c, stm32f2xx_crc.c and so on. Example of a patch that add new peripheral: Addition of ADC to STM32.
您可以使用 Jumper Virtual Lab 进行模拟,从 ARM mBed 查看 this blog post。
对于 posterity,早在 2014 年,v3wwg 通过对现有机器 Stellaris 进行更改来创建新的 arm 机器。
其他发现此 post 的人可以通过阅读他在 [PRJC forum][1]
上的帖子并查看对他的 qemu 分支所做的提交来跟踪他的工作:https://github.com/ve3wwg/teensy3_qemu/commits/master
我正在为 Cortex-M3 cpu 编写代码,并且我正在使用 qemu-arm
二进制文件执行单元测试。现在一切正常。但我想知道我是否能够使用 qemu-system-arm
测试整个系统?我的意思是,我想为 qemu 编写自定义 "machine",我将在其中定义所需的内存映射,并最终定义所需外围设备的一些软件模仿,是否有此类模块的一些示例?我发现有关此的信息很少。我已经阅读了 qemu 源代码树中 hw
目录中的一些源代码,但几乎都没有注释,我仍然不确定我是否理解如何将新机器添加到 qemu 以及如何将外围设备附加到地址 space?
为了添加您自己的机器,您至少需要创建一个源文件,包含您机器的参数和外围设备。之后,在 qemu/hw/arm/ 下的 Makefile.objs 中添加一个条目。 STM32 P103 machine entry.
我们以Olimex STM32 P103开发板为例:Olimex STM32 P103 Development Board code. In lines 105 and 106, we have flash_size and ram_size. In lines 114 and 115 the code add a LED connect to GPIO A pin 0. In line 130 we have machine description, "Olimex STM32 p103 Dev Board". In line 131, the machine init function: stm32_p103_init. Another example of a machine more complete: Pebble machine code。
考虑到stm32的情况,关于外围设备,它们在每个系列代码中都被实例化了。 stm32f1 系列:stm32f1xx.c, stm32f2 family: stm32f2xx.c, stm32f4 family: stm32f4xx.c. The peripheral itself is implemented in a driver which typically has a suggestive name: stm32f2xx_adc.c, stm32f2xx_crc.c and so on. Example of a patch that add new peripheral: Addition of ADC to STM32.
您可以使用 Jumper Virtual Lab 进行模拟,从 ARM mBed 查看 this blog post。
对于 posterity,早在 2014 年,v3wwg 通过对现有机器 Stellaris 进行更改来创建新的 arm 机器。
其他发现此 post 的人可以通过阅读他在 [PRJC forum][1]
上的帖子并查看对他的 qemu 分支所做的提交来跟踪他的工作:https://github.com/ve3wwg/teensy3_qemu/commits/master