02 设置工作环境与环境(一)

在本地主机windows下,使用Oracle VM virtual box,首先创建一个HelloOS虚拟机;先不添加硬盘;

 接着在另一个虚拟机上Ubuntu上进行操作;

1、让GRUB只加载一个文件;

需要将多个文件封装成一个文件,成为内核映像文件;包含二级引导器的模块、内核模块、图片、字库文件;

为了让GRUB加载这个文件,并解析;需要定义好具体的格式; 4KB大小GRUB头、映像文件头描述符、文件头描述符、文件1...

两个c语言结构体,映像文件头描述符 s_mlosrddsc 和 文件描述符 s_fhdsc

准备打包映像文件的工具;

2、手工生成硬盘;

虚拟机只是用特定格式的文件来模拟硬盘,生产虚拟硬盘就变成了生成对应格式的文件;dd命令(用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换);

虚拟硬盘也需要格式化才能使用,所谓格式化就是在硬盘上建立文件系统。只有建立了文件系统,现有的成熟操作系统才能在其中存放数据;

在一个文件上创建文件系统:首先让文件变成Linux下的回环设备;losetup命令设置回环设备;回环设备可以将文件虚拟成Linux下的块设备,用来模拟整个文件系统,mount命令挂载;权限需超级用户;

接着mkfs.ext4命令格式化设备,建立EXT4文件系统;mount命令挂载设备;

 这儿有一个问题:如下表示,mount命令会寻找一个空闲的loop设备进行挂载文件,但是之前已经挂载到loop2了,再执行 mount -o 会将下一空闲的loop3进行挂载;

所以在进行grub安装时会出现下面这种错误,因为此时挂载的是loop3了,不再是loop2;所以要么直接mount -o;要么分开写,上面的两条命令,指明是同一个loop设备;

 挂载错误的可以执行 losetup -d /dev/loop2 卸载完重新挂载;

3、正常安装的时候,Linux会把GRUB安装在物理硬盘上,现在要把它安装在我们的虚拟硬盘上;

上一步把挂载虚拟硬盘文件为loop0回环设备;

接着安装GRUB;

并在目录/hdisk/boot/grub/下创建一个文件 touch grub.cfg

 

 

4、 将硬盘原来的二进制格式,转化为虚拟机本身能识别的 VDI 格式;

这步操作需要到主机操作;首先因为我们是在Ubuntu上创建的虚拟硬盘,需要将img文件传输到主机山,使用xftp软件传输,;

 

 

5、使用虚拟机命令挂载这个 硬盘到我们的系统;

 

在主机下,执行命令:

因为 VirtualBox 虚拟机用 UUID 管理硬盘,所以每次挂载硬盘时,都需要删除虚拟硬盘的 UUID 并重新分配。

 挂载结果如下:

 

最后执行启动命令如下:

 

运行我们的helloOS,效果如下:

下面的错误显示,GRUB 没有找到 HelloOS.eki 文件,这是因为我们从来没有向虚拟硬盘中放入 HelloOS.eki 文件,所以才会失败。

 

posted @   QianFa01  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示