为了方便学习 QEMU 的 tcg 模块,尝试从零裁剪 QEMU 源代码,仅保留和 TCG 相关的模块。通过裁剪源代码,可以深入了解 QEMU 的代码组织结构,为学习 QEMU 打造一个坚实的基础。
base QEMU version: 8.2.0
QEMU 构建系统
QEMU 使用 meson + ninja 构建(make 也支持),脚本语言风格类似 python ,可读性高,编译构建速度快。 除了 meson ,还需要关注 QEMU 源代码中的 ./configure 脚本和 Kconfig 脚本,前者是顶层配置文件,后者包含了具体编译的源代码路径(与 meson.build 配合使用)。
因此裁剪工作的第一步,实现了解 ./configrue 的各个编译选项。 这里的主要思路是,仅保留 TCG 相关的 user 模式, GDB 远程调试、用户交互、插件等核心组件,涉及 system 模式相关的代码全部移除。 所以可以通过修改 ./configrue 实现:
system="no"linux_user="yes"
下一步就是根据 meson.build ,逐步移除不需要的代码,下面对一些被移除的模块进行说明。