《30天自制操作系统》Day01

穿精又带淫゛_ 提交于 2020-04-05 17:54:05

我宣布,从今天开始,本懒狗正式踏入自制操作系统的大坑之中,内容将使用较现代的新工具和新思路来编写,会不定期更新(谁让我懒呢...)

当然,这个系列不会涉及太多理论,主要以我自己的实践过程为主,看理论请看书。

可以在GitHub跟进我的学习实践进度...

1. 工具准备

作者使用的工具,并不是我熟悉的,也不一定是最好的解决方案。

对于16进制编辑器,你可以选用WinHex,我将采用开源免费的wxMEdit

wxMEdit

文本编辑器我首选Visual Studio Code,你可以选择自己喜欢的文本编辑器。

虚拟机的话,你可以使用Virtual Box或者VMware。我将使用VMware Workstation 14,因为它更加强大。

汇编的话,还是老老实实采用作者的nask.exe吧,我们并不需要自己写一个汇编器。

我们还需要一个Bash环境,你可以选择Git的Bash,我这里使用Cmder

2. 以16进制方式编辑image映像文件

2.1. Bash环境,dd命令,生成全0的image文件

软盘规定大小必须为1440KB,也就是1474560字节(1440 * 1024Bytes , 1KB = 1024Bytes)。

我们要制作的img文件中,由于只显示hello,world,所以很多空间中的值都是0

如果不用命令生成,你就慢慢敲吧,复制粘贴都能累死你。

我们使用Bash环境的dd命令来快速生成全0的文件:

dd if=/dev/zero of=helloos.img count=1474560 bs=1

说明一下,dd命令用于读取、转换并输出数据。

dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

if=文件名,指定源文件,这里指定/dev/zero,它是一个可以输出无穷无尽的0的设备,具体提供多少,你自己定。

of=文件名,指定输出文件,这里输出文件helloos.img

count=blocks,代表拷贝blocks个块,这里拷贝1474560个块。

bs=bytes,代表同时设置读入、输出的块大小为bytes个字节,这里为1字节。

所以,整个操作的含义就是生成一个1474560bytes大小的,内容全为0的名为helloos.img的文件

我在Day01->codes文件夹中,右键以Cmder打开,并执行这个指令:

dd

可以看到,生成了一个名为helloos.img、大小为1440KB的映像文件,成功。

2.2. 使用16进制编辑器,编辑helloos.img

用16进制编辑器打开刚刚生成的helloos.img,然后进入漫长的对着敲环节,体会一下当年打孔编程的快感(打孔那就更累了,那是2进制,这里好歹是16进制)。

hex01

注意000001F0的行末和00000200的行首:

hex02

还有00001400的行首:

hex03

到这里,img文件编辑完成。

3. 使用虚拟机,以软盘方式启动

打开VMware:

vm01

点击“创建新的虚拟机”,选择自定义,然后下一步:

vm02

到这一步时,选择“稍后安装操作系统”

vm04

然后这一步全选“其他”:

然后其他的配置按你自己需求来,一直下一步就行。

最后完成后,点击“编辑虚拟机设置”,我们要给虚拟机添加软盘驱动器

点击“添加”:

选择“软盘驱动器”:

最后勾选“使用软盘映像文件”,点击“浏览”,选择我们刚刚编辑好的helloos.img,确认。

然后可以运行,如果提示无法连接ide1:0,直接点是就行了,暂时不考虑硬盘的问题。

最后会显示hello, world:

4. 使用Visual Studio Code进行汇编代码的编写

手撸16进制,我反正是累死了,你们呢?

好在有汇编。汇编引入了助记符,我们不用写纯机器代码了,汇编器可以把我们的汇编源文件编译成机器代码。


待续...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!