0、前言
对于操作系统原理的学习,xv6是一个非常好的项目。它还原的是有名的unix v6操作系统,而且还增加了对多处理器的支持。
官方给我运行环境是qemu,当时好奇在想,能不能用vmware来运行呢,因为vmware不也是给操作系统模拟了一个二进制代码的执行环境吗?但是搜遍全网也没有找到方法,后面自己找到了方法,验证了自己的想法。
当时的思维路径是,操作系统是放在磁盘上的起始位置的,那么我把xv6的代码写到磁盘的起始位置不就可以了。另一个问题是操作系统镜像和根文件系统是分开的,要分别写到两块磁盘中。我的环境是vmware15.5.2+centos7.8.2003,下面是操作步骤:
1、编译xv6
下载代码,解压后进入目录,编译操作系统镜像及根文件系统,命令如下:
make xv6.img&&make fs.img
2、写入磁盘
在vmware创建两块磁盘,操作路径为:虚拟机设置->增加->磁盘->SCSI->创建新虚拟磁盘->大小0.005(立即分配、单个文件)->将磁盘命名为os,表示这个磁盘放的是操作系统。
相同方法创建另一块磁盘fs,用来放根文件系统。
这时/dev/目录下应该多了sdb和sdc(sda是当前操作系统本身),如果没有看到设置则重启操作系统。用以下命令将操作系统和根文件系统写入到磁盘中:
dd if=./xv6.img of=/dev/sdb bs=4k count=1000
dd if=./fs.img of=/dev/sdc bs=4k count=1000
poweroff停掉当前虚拟机,确保文件已经落地到磁盘。这时两个镜像就已经写入到磁盘中了,vmware把磁盘保存成了一个文件,位置在当前虚拟机的目录下,名为os.vmdk、fs.vmdk,下一步会将这两个文件加载到新的虚拟机中,作为其它启动盘。
3、创建xv6的虚拟机
创建一个空的虚拟机,操作步骤为,自定义(高级)->下一步->稍后安装操作系统->操作系统类型选择其它(版本也选择其它)->虚拟机名称取为xv6(随意)->随后使用默认配置一路“下一步”到完成即可。
在创建好的虚拟机右键设置,将刚默认创建的磁盘删掉。将上一步创建的磁盘文件添加到当前虚拟机中。方法为添加->“磁盘”->ide(注意这里是IDE而不是SCSI磁盘,因为xv6读取的是IDE格式的磁盘)->使用现有虚拟盘->选择第二步中生成的os.vmdk->完成
相同方法再添加fs.vmdk,注意要先添加os.vmdk,因为os.vmdk是操作系统,它需要是第一块硬盘,先加载操作系统镜像嘛,操作系统再去加载文件系统。
启动虚拟机,熟悉的xv6就成功启动起来了。
4、为什么可以成功运行起来,主要是如下几个知识点:
a、操作系统是放在磁盘起始位置的
b、使用dd命令可以将文件直接拷贝到磁盘中
c、磁盘设置在vmware中是保存为一个文件的,这个文件可以被别的虚拟机用