选择开发操作系统用的虚拟机
1. 选择虚拟机的要求
学习操作系统,或者想开发操作系统的朋友,总会遇到选择虚拟机的问题,为选择哪种虚拟机在那折腾,甚至会有用哪种虚拟机才显得逼格更高的想法。就像用linux鄙视用windows的,用unix鄙视用linux那种感觉。
好吧,我就打算在windows下开发操作系统,还希望操作方便一点,性能过得去也就行了。
1.1 最无聊的要求:功能要求
最基本的功能就是要能模拟PC嘛,包括CPU、内存、中断控制器、硬盘什么的。其实现在能找到的虚拟机都可以用的,没那么多乱七八糟规矩。那些虚拟机都能跑windows和linux了,还对付不了刚起步的幼儿系统吗?功能上都没问题的,纠结功能问题就有点扯谈了。
1.2 最大的要求:方便复制文件
自己开发系统,最大的问题是:在宿主系统和虚拟硬盘文件之间复制文件。
大多数人是在宿主系统里开发程序的,然后才把编译好的程序,从宿主系统中复制到虚拟机的虚拟硬盘文件里。这个操作是非常多的,但是,如果找不到合适的方法,这个操作就会非常繁琐。
以VBox为例吧,如果你要把编译好的文件复制到VBox的虚拟硬盘文件里,你就要在VBox里先运行一个操作系统,通过网络、共享文件夹等等的方式复制过去吧。看起来很简单是吧,你启动一次系统要多长时间?当然,如果VBox有动态装载硬盘文件的方法的话,那就简单了,要不然,复制一次就要启动一次操作系统。不知道各位嫌不嫌麻烦,反正我是觉得很麻烦的。
我自己的情况嘛,原来是在WIN7中用VPC,然后在虚拟机里安装DOS,在装个共享文件夹的驱动,就可以在win7和VPC的DOS下直接复制文件,根本不用折腾。虽然通过DOS也算启动了另一个操作系统,但是DOS启动快啊,一般也就5秒不到的时间就启动了,然后就可以复制文件了。
后来打算使用WIN10了,发现win10装不了VPC,就尝试过VBox和Bochs,都是复制文件太啰嗦,所以放弃了。所以也想在WIN10下有一个方法不用启动虚拟机里的windows或者linux操作系统,就能在宿主系统和虚拟硬盘文件之间复制文件的方法。也因为找不到WIN10下快速复制文件到虚拟硬盘文件中的方法,从2017年中就暂停开发了,晃悠了一年多,在一次偶然的情况下,发现了win10可以直接挂接VPC的硬盘文件,然后VHD文件就直接当作一个磁盘来操作了,一下子就解决了困扰我一年多的问题,复制文件就可以通过批处理来解决了,不用启动虚拟机的操作系统,直接就能复制文件了。但老实说,还是比在VPC中直接复制的操作繁琐一点,但是比启动windows好太多了,算是基本不影响效率了。
找到这个方法后,用什么虚拟机就好说了,那就是:选择可以使用VHD文件的虚拟机。
其实很多虚拟机也可以用VHD文件的,就更加不用纠结使用哪个虚拟机了。不过我还是选择了Hyper-V和Bochs
2. Hyper-V
选择Hyper-V除了因为找到了便捷复制文件的方法,还有一个原因就是WIN10自带。关于Hyper-V的内容就留到写书的时候在扯谈了
3. Bochs
同时也选了Bochs,是因为需要一个虚拟机来互相印证,甚至有一些问题,在另一个虚拟机里存在,在另一个虚拟机就不存在了。比如,在VPC、Hyper-V和物理机中,我在保护模式下,用IRETD来刷新CS,没有报错,但是在VBox中,就TMD的报错,就必须用INT来刷新,简直日了狗了。
其实,对比过后,Bochs的速度比起Hyper-V,那是慢得一逼,Hyper-V中跑得很快的程序,到了Bochs中,居然可以去喝茶。虽然是因为我的算法烂,但Bochs性能差也直接体验了
关于Bochs的内容,也留到写书的时候在扯谈了
4. WIN10中挂载VHD文件的方法
4.1 右键挂载
就是在WIN10中用右键点击VHD文件,弹出的菜单就有装载的选项,点击就行了。

虽然操作简单,但是在开发操作系统时,需要频繁的复制文件到虚拟硬盘里,这么用鼠标点也是很郁闷的,所以就要依靠命令行了
4.2 命令行挂载
就是利用diskpart程序,把VHD文件挂载到系统中,然后指定一个盘符,就可以用批处理的方式把挂载VHD、复制文件、卸载VHD文件一次处理了,方便了N多。
我是把虚拟硬盘文件装载的盘符设为L,一个是Lenix的意思,但更主要是因为,指定一个不常用的盘符,可以避免被U盘等移动磁盘占用盘符,
我自己用的批处理是这样的
@ECHO off
echo select vdisk file=d:\vdisk\vhd\lenix.vhd>d:\bin\mnt.txt
echo attach vdisk>> d:\bin\mnt.txt
echo exit>>d:\bin\mnt.txt
diskpart /s d:\bin\mnt.txt
del d:\bin\mnt.txt
rem =============================================
copy D:\OrderSourceStudio\Lenix\Lenix\bin\lenix.sys L:\lenix\LENIX.SYS /Y
rem =============================================
echo select vdisk file=d:\vdisk\vhd\lenix.vhd >d:\bin\mnt.txt
echo detach vdisk>> d:\bin\mnt.txt
echo exit>>d:\bin\mnt.txt
diskpart /s d:\bin\mnt.txt
del d:\bin\mnt.txt
批处理具体的说明,也留到写书的时候在说了
本文探讨了在Windows环境下开发操作系统时虚拟机的选择,重点介绍了Hyper-V和Bochs的特点,以及如何在Win10中高效地进行宿主系统与虚拟硬盘文件之间的文件复制,提出了使用批处理和命令行挂载VHD文件的方法。
910

被折叠的 条评论
为什么被折叠?



