Linux-KVM源代码结构介绍

本文详细介绍了Linux-KVM的源代码结构,包括`include/kvm/`中的核心头文件,如Arm_arch_timer.h和Arm_vgic.h,以及`virt/kvm/`中的体系结构无关代码,如assigned-dev.c、async_pf.c等。此外,还概述了`arch/x86/kvm/`中的体系结构相关代码,如cpuid.h、emulate.c等,这些代码涉及CPU ID、指令解码和仿真、中断控制器等关键组件。
摘要由CSDN通过智能技术生成

概述

kvm模块,kvm在加载之初,只存在/dev/kvm文件。
针对虚拟处理器最重要的IOCTL调用。
内存虚拟化也是KVM模块实现,并且是一个虚拟机中代码量最大,实现最复杂的部分。
处理器中的MMU通过页表形式将程序运行的虚拟地址转换成物理地址,在虚拟机模式下,内存管理单元的页表必须在一次查询完成两次转换,KVM     模块使用了影子页表技术解决该问题。

官网代码:

kvm核心代码:

下载:git clone  git://git.kernel.org/pub/scm/virt/kvm/kvm.git
分为三部分:KVM框架的核心源代码,与硬件架构相关的代码,kvm头文件。

kvm代码的核心代码:
virt/kvm/中的代码,是与架构无关的代码,有7309行,kvm_main.c是代码中最核心的文件之一,其中的kvm_init()函数是与硬件无关的kvm初始化入口。

与硬件结构相关的代码:
位于  arch/*/kvm目录下。[root@localhost kvm]# ls -d arch/*/kvm
arch/arm64/kvm  arch/mips/kvm     arch/s390/kvm  arch/x86/kvm
arch/arm/kvm    arch/powerpc/kvm  arch/tile/kvm
在kvm支持的架构中, x86架构相关代码位于:arch/x86/kvm/目录下,有37067行代码,
assigned-dev.c  hyperv.h  iommu.c           lapic.c      mmutrace.h     pmu.h        x86.c
assigned-dev.h  i8254.c   irq.c             lapic.h      mtrr.c         pmu_intel.c  x86.h
cpuid.c         i8254.h   irq_comm.c        Makefile     page_track.c   svm.c
cpuid.h         i8259.c   irq.h             mmu_audit.c  paging_tmpl.h  trace.h
emulate.c       ioapic.c  Kconfig           mmu.c        pmu_amd.c      tss.h
hyperv.c        ioapic.h  kvm_cache_regs.h  mmu.h        pmu.c          vmx.c
vmx.c和svm.c分别是intel和AMD CPU架构相关模块kvm-intel和kvm-amd主要代码,vmx_init()是初始化函数。

kvm相关头文件:
目录为:ls -d arch/*/include/asm/kvm*
arch/arm64/include/asm/kvm_arm.h      arch/powerpc/include/asm/kvm_asm.h
arch/arm64/include/asm/kvm_asm.h      arch/powerpc/include/asm/kvm_book3s_32.h
arch/arm64/include/asm/kvm_coproc.h   arch/powerpc/include/asm/kvm_book3s_64.h
arch/arm64/include/asm/kvm_emulate.h  arch/powerpc/include/asm/kvm_book3s_asm.h
arch/arm64/include/asm/kvm_host.h     arch/powerpc/include/asm/kvm_book3s.h
arch/arm64/include/asm/kvm_hyp.h      arch/powerpc/include/asm/kvm_booke.h
arch/arm64/include/asm/kvm_mmio.h     arch/powerpc/include/asm/kvm_booke_hv_asm.h
arch/arm64/include/asm/kvm_mmu.h      arch/powerpc/include/asm/kvm_fpu.h
arch/arm64/include/asm/kvm_psci.h     arch/powerpc/include/asm/kvm_host.h
arch/arm/include/asm/kvm_arm.h        arch/powerpc/include/asm/kvm_para.h
arch/arm/include/asm/kvm_asm.h        arch/powerpc/include/asm/kvm_ppc.h
arch/arm/include/asm/kvm_coproc.h     arch/s390/include/asm/kvm_host.h
arch/arm/include/asm/kvm_emulate.h    arch/s390/include/asm/kvm_para.h
arch/arm/include/asm/kvm_host.h       arch/um/include/asm/kvm_para.h
arch/arm/include/asm/kvm_hyp.h        arch/x86/include/asm/kvm_emulate.h
arch/arm/include/asm/kvm_mmio.h       arch/x86/include/asm/kvm_guest.h
arch/arm/include/asm/kvm_mmu.h        arch/x86/include/asm/kvm_host.h
arch/arm/include/asm/kvm_psci.h       arch/x86/include/asm/kvm_page_track.h
arch/mips/include/asm/kvm_host.h      arch/x86/include/asm/kvm_para.h
arch/mips/include/asm/kvm_para.h

Linux内核代码仓库中还有一些关 于kvm的文档,主要位于
Documentation/virtual/kvm/
Documentation/*/kvm*

详细介绍:

(1.)include\kvm\中有2个文件:代码总共行数:4957

Arm_arch_timer.h:KVM定时器相关的函数      代码行数:103

Arm_vgic.h:虚拟通用中断控制器相关的数据结构和函数     代码行数:314


(2) include\trace\events\kvm.h: 代码行数:322

一些跟踪事件函数的声明

其中一段代码:

#define kvm_trace_exit_reason                                        \

       ERSN(UNKNOWN), ERSN(EXCEPTION), ERSN(IO), ERSN(HYPERCALL),  \

       ERSN(DEBUG), ERSN(HLT), ERSN(MMIO), ERSN(IRQ_WINDOW_OPEN),       \

       ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR),       \

       ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值