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 文件,所以才会失败。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】