深入解析Linux虚拟化KVM-Qemu分析之KVM源码

说明:

  1. KVM版本:5.9.1
  2. QEMU版本:5.0.0
  3. 工具:Source Insight 3.5, Visio

1. 概述

  • 从本文开始将开始source code的系列分析了;
  • KVM作为内核模块,可以认为是一个中间层,向上对接用户的控制,向下对接不同架构的硬件虚拟化支持;
  • 本文主要介绍体系架构初始化部分,以及向上的框架;

2. KVM初始化

  • 贝多芬曾经说过,一旦你找到了代码的入口,你就扼住了软件的咽喉;
  • 我们的故事,从module_init(arm_init)开始,代码路径:arch/arm64/kvm/arm.c;

老规矩,先来一张图(图片中涉及到的红色框函数,都是会展开描述的):

  • 内核的功能模块,基本上的套路就是:1)完成模块初始化,向系统注册;2)响应各类请求,这种请求可能来自用户态,也可能来自异常响应等;
  • kvm的初始化,在kvm_init中完成,既包含了体系结构相关的初始化设置,也包含了各类回调函数的设置,资源分配,以及设备注册等,只有当初始化完成后,才能响应各类请求,比如创建虚拟机等;
  • 回调函数设置:cpuhp_setup_state_nocall与CPU的热插拔相关,register_reboot_notifer与系统的重启相关,register_syscore_ops与系统的休眠唤醒相关,而这几个模块的回调函数,最终都会去调用体系结构相关的函数去打开或关闭Hypervisor;
  • 资源分配:kmem_cache_create_usercopy与kvm_async_pf_init都是创建slab缓存,用于内核对象的分配;
  • kvm_vfio_ops_init:VFIO是一个可以安全将设备I/O、中断、DMA导出到用户空间的框架,后续在将IO虚拟化时再深入分析;
  • 图片中红色的两个函数,是本文分析的内容,其中kvm_arch_init与前文ARMv8硬件虚拟化支持紧密相关,而misc_register与上层操作紧密相关;

   资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值