0%

之前没有意识到insn_start这个中间码尽然是每个guest指令之间都要插入一个,本文分析下 qemu insn_start这个中间码的逻辑,分析依赖qemu v7.1.50版本。

阅读全文 »

qemu的编译系统是个大杂烩,它没有用Linux传统的autoconfig,确有一个configure文件, 而且每次还是通过这个configure文件做配置,它核心是使用meson描述依赖关系,但是转而 使用make做构建,它使用类似Linux内核的Kconfig文件,但是没有图形化的配置接口,除此 之外,它还有很多CONFIG项,你想hack一下都不知道它在哪里配置。本文分析qemu编译系统, 梳理其中的基础逻辑,分析基于qemu v7.1.50代码。

阅读全文 »

本文是使用meson构建程序的一个笔记,现在很多程序都是使用meson构建的,比如qemu、 glib库等,了解下meson的基本逻辑在使用用meson构建的程序时逻辑会更加清晰。 本文中的测试程序运行环境是ARM版本的ubuntu 20.04,示例使用的glib的版本是2.76.1。

阅读全文 »

本文介绍qemu tcg下中间码翻译和后端翻译的基本逻辑,代码分析基于qemu v7.1.50, 文中涉及的测试场景,我们选择riscv作为guest、arm64作为host。

阅读全文 »

本文分析riscv AIA的基本逻辑。目前,相关的代码还在社区review,分析使用的代码为, qemu使用v7.1.50主线代码,内核使用https://github.com/avpatel/linux riscv_aia_v2分支。

阅读全文 »

本文整理riscv的内存模型,基于riscv unprivileged ISA 20191213这个版本。其实 对于使用弱内存序的构架,它们的内存模型都是比较相似的,无非是细节上有可能有 一点不一样,本文也可以做为弱内存序相关的一个基础介绍。

阅读全文 »

本文分析riscv上page table walk的逻辑,这部分逻辑一般是硬件完成了,我们这里 分析qemu tcg对page table walk的模拟实现,从模拟中我们也可以看到其中的基本逻辑, 本文会分析整个page table walk的细节,并且分析整个两级地址翻译的流程,只有这样 才能彻底看清整个地址翻译流程。分析基于的qemu版本是v7.1.50。

阅读全文 »

本文分析qemu模拟ARM平台的方式,我们并不会深入分析相关的技术细节,只是大概 看下整体构架,点出各个模拟的关键点,保证我们在随后的深入分析中可以迅速找见 相关代码。

阅读全文 »