【OS-虚拟机环境搭建&&搭建一个新的HelloOS系统】

虚拟机是一款由软件模拟的计算机系统,其硬件系统功能完善,运行环境独立,相当于一台虚拟的计算机。
在一些开发测试工作中常常需要用到虚拟机,常见的虚拟机软件有两款: VMware 和 VirtualBox。

本文实验环境:window11+virtualBox+ubuntu

1. VirtualBox虚拟机 + ubuntu系统安装

主要步骤参考文档:超级详细的 VirtualBox 虚拟机安装 及入门教程

主机和虚拟机之间的粘贴拷贝需要安装增强功能,下述补充增强功能的详细安装:
设备->分配光驱->选择虚拟盘->VBoxGuestAdditions.iso,效果如下:
设备->分配光驱->选择虚拟盘->VBoxGuestAdditions.iso
此时左边会出现光盘,点击进入,看到有autorun.sh脚本。在这里插入图片描述
右键open in Terminal,修改autorun.sh权限并运行,生成VBoxLinuxAdditions.run脚本。此时执行./VBoxLinuxAdditions.run会提示please install the gcc make perl packages from your distribution,需要安装gcc make perl安装包:sudo apt-get install gcc make perl。

sudo su
chmod u+rwx autorun.sh
./autorun.sh
apt-get install gcc make perl
./VBoxLinuxAdditions.run

接下来重启即可生效。

2. HelloOS系统搭建

参考:设置工作模式与环境(上):建立计算机

2.1 新建HelloOS系统

选择好cpu类型,内存大小,暂时不添加虚拟硬盘。
在这里插入图片描述

下述将在ubuntu系统中操作生成hd.vdi文件

2.2 生产虚拟硬盘

虚拟机使用特定格式的文件来模拟硬盘,所以生产虚拟硬盘也就是生成对应格式的文件。
使用linux的dd命令,生产100MB纯二进制文件。

dd bs=512 if=/dev/zero of=hd.img count=204800

;bs:表示块大小,这里是512字节
;if:表示输入文件,/dev/zero就是Linux下专门返回0数据的设备文件,读取它就返回0
;of:表示输出文件,即我们的硬盘文件。
;count:表示输出多少块

2.3 格式化虚拟硬盘

losetup命令用于设置回环设备。回环设备可以把文件虚拟成Linux块设备,用来模拟整个文件系统,用户可以将其看作硬盘、光驱或软驱等设备,并且可以用mount命令挂载当作目录使用。

sudo losetup /dev/loop13 hd.img
sudo losetup -l 查看当前所有loop设备的状态
sudo losetup -f 找出当前空闲的loop文件
sudo losetup -a 找出当前已使用的loop文件

linux使用ext4文件系统,使用mkfs.ext4命令格式化回环设备。

sudo mkfs.ext4 -q /dev/loop0  

将上述生产的hd.img挂载到事先建立的hdisk目录下,并在其中建立boot,后续grub将会使用到。

sudo mkdir ./hdisk
sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
sudo mkdir ./hdisk/boot/ ;建立boot目录

mount 命令只能识别在纯二进制文件上建立的文件系统,如果使用虚拟机自己生成的硬盘文件,mount 就无法识别我们的文件系统了。

2.4 安装GRUB

GRUB是Linux中最常用的引导加载程序,是计算机启动时运行的第一个软件,负责加载操作系统内核并初始化操作系统的其他部分。

#安装GRUB
sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop13
;--boot-directory 指向先前我们在虚拟硬盘中建立的boot目录。
;--force --allow-floppy :指向我们的虚拟硬盘设备文件/dev/loop13

/hdisk/boot/ 目录下多了一个 grub 目录,表示我们的 GRUB 安装成功。
然后到grub目录下,vim建立如下grub.cfg文件。

menuentry 'HelloOS' {
insmod part_msdos
insmod ext2
set root='hd0,msdos1' #我们的硬盘只有一个分区所以是'hd0,msdos1',实际使用的hd0,暂未理解为啥
multiboot2 /boot/HelloOS.eki #加载boot目录下的HelloOS.eki文件
boot #引导启动
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=10 #等待10秒钟自动启动
fi

2.5 转换虚拟硬盘格式

前面生成了mount命令可以识别的虚拟硬盘hd.img,但是该纯二进制文件只能被linux系统识别,最终我们是要用虚拟机加载这个硬盘的,所以就需要转换为虚拟机可以使用的格式。

VBoxManage convertfromraw ./hd.img --format VDI ./hd.vdi
;convertfromraw 指向原始格式文件
;--format VDI  表示转换成虚拟需要的VDI格式

上述在Linux系统中生成了我们要的虚拟硬盘文件,接下来就是要HelloOS系统加载这个虚拟硬盘

2.6 安装虚拟硬盘

在这里插入图片描述

UUID不一致失败的问题,可以先到工具->虚拟硬盘中选择对应硬盘,先释放再删除,然后重新加载即可。
在这里插入图片描述

2.7 启动HelloOS

在这里插入图片描述
出现GRUB引导界面:
在这里插入图片描述
选择HelloOS。

2.8 最终结果—成功的失败

在这里插入图片描述
此处失败是因为没有HelloOS.eki文件,但是基本的运行测试环境已经ok。
下节继续。。。

参考资料:
  1. 超级详细的 VirtualBox 虚拟机安装 及入门教程
  2. 极客时间-操作系统实战45讲-彭东老师
  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值