打卡第三天:在windows系统下搭建自制操作系统的环境

(2021年10月30日打卡第三天)



1、所需软件

虚拟机:VirtualBox
https://www.virtualbox.org/wiki/Downloads
汇编编译器:nasm
Bochs和磁盘写入程序dd

软件打包下载链接:

百度网盘:link
提取码:qipy
链接: https://pan.baidu.com/s/17fylk0tfNe9sYzUjH4F0dA 提取码: qipy 复制这段内容后打开百度网盘手机App,操作更方便哦

2、通过win7或win10自带的diskpart命令制作自己的虚拟磁盘

打开命令行窗口cmd,输入命令:diskpart,回车:
DISKPART>create vdisk file=e:\myos\zp.vhd maximum=10 type=fixed

maximum=10,表示10M;
type=fixed,表示固定的;

在这里插入图片描述

3、编写启动引导代码

org 07c00h	;告诉编译器你把这个程序加载到7c00处,当bios检查完毕后,它就能跳到这个位置开始执行

mov ax, cs	;表示把代码段寄存器放到ax里面去
mov ds, ax
mov es, ax
call Display	;Display是一个函数
jmp $		;表示无限循环,因为$表示当前位置,jmp $就表示一直跳到当前行,CPU不再往下执行了

Display:
	mov ax, BootMsg		;BootMsg代表字符串
	mov bp, ax			;
	mov cx, 16			;这个16是BootMsg字符串的长度
	mov ax, 01301h		;设置字符串颜色
	mov bx, 000ch
	mov dl, 0
	int 10h				;表示调第10号中断

BoosMsg: db "Hello, OS World!"
times 510 - ($ - $$)  db 0	;表示从当前位置起到末尾的510字节这一段全部用0填充
dw 0xaa55		;这512个字节最后两个字节的值是0xaa55,这是约定,必须这样写机器才能识别你是一个可引导的扇区

4、生成二进制文件

在这里插入图片描述
点击上图地址栏,输入cmd,回车,自动打开命令行窗口cmd,路径也是该目录:
在这里插入图片描述
由于我的nasm.exe程序在nasm2目录里,所以请注意各个文件(zp.VHD、hello.asm、nasm.exe、dd.exe)所在路径位置:
在这里插入图片描述

输入如下命令编译hello.asm,生成hello.bin二进制文件。

nasm e:\myos\hello.asm -o e:\myos\hello.bin

在这里插入图片描述
然后我们进入tools目录:
在这里插入图片描述

5、把生成二进制文件写进虚拟磁盘

dd是用于磁盘操作的命令。

dd if=..\hello.bin of=..\zp.vhd bs=512 count=1

if:input file的缩写,导入的文件、输入的文件;
bs:此项指定块的大小,由于dd是以块为单位来进行IO操作的,此项是统计配置了输入块大小ibs和输出块大小obs;
count:此项是指定拷贝的块数。
在这里插入图片描述
上面dd命令中的两个点…代表上层目录,写绝对路径太麻烦。
回车后,一定要注意命令提示中的:

1+0 records in				\\记录了1+0的读入
1+0 records out			\\记录了1+0的写出

表示写成功了。

6、启动我们自制的os

在这里插入图片描述
文件夹选一个位置,类型和版本一定要选Othrer,因为这是我们自己写的操作系统;
在这里插入图片描述

这个地方千万不要把内存写大,不是说内存越大越好,4M足够我们用了,你保持默认的64M也没问题;
在这里插入图片描述
使用已有的虚拟硬盘文件,这个时候里面肯定没有,你选择注册,然后选择我们生成的虚拟磁盘文件hello.vhd,然后点创建;
在这里插入图片描述

点击启动:
在这里插入图片描述

运行成功,环境搭建完成。

7、会遇到的问题

有时候我们可能会把写入过的盘片zp.vhd删除,重新通过diskpart命令制作虚拟磁盘zp1.vhd,重新dd写入我们自己编写的操作系统,例如:

dd if=..\mbr.bin of=..\zp1.vhd bs=512 count=1

之后,我们看一下设置:
在这里插入图片描述
可以看到此时上图zp.vhd正常。
点击启动,报错:
在这里插入图片描述

  • 出现问题:可以看到“不能为许你电脑myos打开一个新任务”,明细里说了是UUID不匹配,并且存储那块显示zp.vhd(普通,无法访问),我们把明细复制到记事本里。

在这里插入图片描述

在设置里也可以看到zp.vhd前面的图片是个叹号,提示UUID不匹配。
我们删除该盘片,点击控制器:IDE,下面添加存储附件的按钮就有颜色生效了:
在这里插入图片描述
在这里插入图片描述
添加硬盘:
在这里插入图片描述
也可以看到zp.vhd这个盘片有问题,我们点击注册,选择刚才新创建的虚拟磁盘zp1.vhd之后,点击启动,正常运行;
也就是说,我们重新创建一个别的名字的虚拟磁盘文件,重新注册一下就可以了。

  • 另一种解决方法:
    我们先从设置里把这个有问题的盘片zp.vhd删除,然后确定VirtualBox安装目录里的VBoxManage.exe程序的路径,然后通过如下命令重新分配UUID:
E:\myos>"E:\Program Files\Oracle\VirtualBox\VBoxManage.exe" closemedium disk

因为 VirtualBox 虚拟机用 UUID 管理硬盘,所以每次挂载硬盘时,都需要删除虚拟硬盘的 UUID 并重新分配。
在这里插入图片描述
从上图可以看到,此时就没有那些问题盘片了,点击注册,重新选择我们的虚拟磁盘文件即可。

virtualbox虚拟机命令行添加新硬盘
https://blog.csdn.net/weixin_34336292/article/details/91759952

VBoxManage命令用法详解
https://www.cnblogs.com/readleafblackrain/articles/3974882.html

《操作系统实战 45 讲》13课win+virtualbox实操视频
https://www.bilibili.com/video/BV1yb4y1N7ya/


生产虚拟硬盘
dd bs=512 if=/dev/zero of=hd.img count=204880

格式化虚拟硬盘
sudo losetup --find --show hd.img
	/dev/loop17
sudo mkdir hdisk
sudo mkfs.ext4 -q /dev/loop17
sudo mount -o loop ./hd.img ./hdisk/
sudo mkdir ./hdisk/boot/

安装GRUB
sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy  /dev/loop17
sudo vim ./hdisk/boot/grub/grub.cfg

转换虚拟硬盘格式

安装虚拟硬盘
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值