virtualbox源码分析 2:代码目录解析

2. 源码目录

我以官网上下载的VirtualBox源码6.0.2为例子:
在这里插入图片描述
根目录里有一些文件夹和config/makefile文件,其中主要关注include/src文件
src/VBox 目录里, 是实现的核心代码,本系列文章主要也是围绕个目录:
在这里插入图片描述

2.1 Additions:

这个目录里是安装在虚拟机里的所有驱动/dll/exe的源代码
其中可以重点关注的文件夹有:
Additions\commom\VBoxGuest: 这个目录里的代码主要用于虚拟机内外通信,guest发请求到host,host发消息到guest,都是在这个文件夹里实现的
Additions\commom\VBoxService: 在虚拟机里运行的service程序源码
Additions\WINNT\Graphics: 虚拟机内vboxwddm.sys 虚拟显卡的实现代码,只有安装了虚拟显卡,才可以实现各种分辨率的切换
Additions\WINNT\SharedFolders: 实现虚拟机共享目录的代码

2.2 Devices:

这个目录是所有设备模拟的代码,是VBox源码里比较重要的一个部分
虚拟机所有的虚拟设备的模拟,都是在这个目录里完成的:
Audio: 声音设备模拟,其中windows支持HDA/AC97/SB16 3种不同的设备
PC: 模拟CPU提供的设备, 时间相关的(HPET/RTC)硬件中断相关的(APIC/PIC),DMA等
Storage:文件系统的模拟,把一个文件识别成虚拟机里能认识的文件系统,都是在这里完成
后续会分多个专题具体研究各各不同设备的实现

2.3 Frontends:

这里是所有exe文件的源码
在这里插入图片描述
对应安装目录里每个同名exe的实现

2.4 GuestHost:

这个目录里的文件编译成lib, link到addtions里虚拟机内addon里,实现部分文件拖拽,剪贴板的功能。
不清楚为什么不放到addtions目录里,其实也没几个文件

2.5 HostDrivers:

这里实现了安装到host目录的驱动代码和对于的lib代码

2.6 HostServices:

这个目录里的源码是配置additions目录,在host里的对应host代码
在这里插入图片描述
编译出来就是安装目录下的
在这里插入图片描述
比如共享目录,guest里会拦截到对共享目录的操作请求,最终是通过这个目录里的文件访问真机上的文件。

2.7 Main:

host上的服务代码,提供虚拟机配置管理, COM服务等

2.8 NetworkServices:

虚拟机访问网络的相关代码 NAT/DHCP

2.9 Runtime:

类似于我们经常写程序里的util目录,一些公共函数的实现
比如内存分配/文件API/网络API/Log等,编译出来的binary对应的是VBoxRT.dll

2.10 Storage:

这个是配合Devices\Storage,最终会编译到VBoxDD.dll里,每一种虚拟磁盘模式都有其对应的实现
在这里插入图片描述
比如Windows下支持VDI/VHD/VMDK 这3种模式的磁盘格式,具体的实现都在这个目录里
VHD对应VHD.cpp,VDI对应VHI.cpp, VMDK对应VMDK.cpp
当然也可以自创一个文件格式,在这里加上对应的支持代码。

扫描二维码关注公众号,回复: 9395154 查看本文章

2.11 VMM:

这个目录是虚拟化实现的核心:
虚拟机里的OS能和真机OS共存,就是靠的虚拟化
32位的guest os可以通过二进制翻译/VT两种方式虚拟化
64位的guest os则只能通过VT方式虚拟化

其中主要实现以下功能:
VT虚拟化框架/设备虚拟化/CPU虚拟化/内存虚拟化代码
编译出来的binary是VMMR0.r0 和VBoxVMM.dll

2.12 Artwork:

一些图标之类的资源文件放到这个目录里,如果想修改VBox显示的图标,替换Artwork\win\OSE文件夹里的ico即可

发布了26 篇原创文章 · 获赞 10 · 访问量 1268

猜你喜欢

转载自blog.csdn.net/qq_29684547/article/details/103906577