《30天自制操作系统》---第一天

it2024-11-29  2

《30天自制操作系统》---第一天

二进制编译与文本编译器大家用自己顺手的就可以,今天通过两种方法运行虚拟机,第一种通过作者提供的工具运行在QEMU中,第二种方法运行到VMWare中,直接上效果图。(将"hello,world"换成了"Welcom to FlashingOS!")

QEMU效果图

VMWare效果图

        第一步首先要创建一个磁盘映像文件.img文件,用于启动我们的操作系统,我将这个操作系统命名为FlashinOS。首先需要一个二进制编译器,这里用到图书中作者推荐的Binary Editor即可。安装好之后就可以编辑二进制文件了,如图所示。

一共开1474560个字节,然后出了图中地址的数据之外,在0001F0地址附近的二进制数据有一些变化

其他地方都为0,一直到168000地址结束。

在创建好了二进制文件之后另存为flashingos.img文件,然后使用作者提供的QEMU软件进行虚拟演示就行。

在运行之前需要在此目录下写两个批处理文件用来方便执行命令。

第一个为run.bat,内容如下

这是调用作者提供的工具文件夹中的qemu用来加载img映像文件的。

第二个文件是install.bat,内容如下,这个功能我们之后再来介绍,暂时还没有用到

这些准备工作完成之后打开命令行(作者也提供了批处理文件!cons_nt.bat),输入run命令就能看到自己的“操作系统”成功加载了。

显然这种直接打二进制的方法是很麻烦的,所以在此基础上我们使用汇编语言来使操作更加简单。

直接编译文本flashingos.nas文件,使用作者提供的nask对nas文件进行编译生成img映像文件,这里用到了asm.bat的批处理文件。

;flashingos.nas ;这段代码是标准的FAT12格式软盘专用的代码 DB 0xeb, 0x4e, 0x90 DB "HELLOIPL" ;启动区的名称8字节任意字符 DW 512 ;每个扇区的大小512个字(1024字节) ;字 = 2字节 DW指令为define word DB 1 ;簇的大小,1字节 DW 1 ;FAT的起始位置(一般从第一个扇区开始) DB 2 ;FAT的个数(必须为2) DW 224 ;根目录大小 DW 2880 ;磁盘大小(2880个扇区) DB 0xf0 ;磁盘的种类 DW 9 ;FAT的长度(固定值9) DW 18 ;1个磁道有几个扇区(必须是18) DW 2 ;磁头数2 DD 0 ;不使用分区 DD 2880 ;重写磁盘大小 DB 0,0,0x29 ;固定值 DD 0xffffffff ;固定值(卷标号码) DB "FLASH-OS " ;磁盘名称(11字节) DB "FAT12 " ;磁盘格式(8字节) RESB 18 ;空出18字节 ;程序主体 DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09 DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb DB 0xee, 0xf4, 0xeb, 0xfd ;显示字符串 DB 0x0a, 0x0a ;2个换行符 DB "Welcome to FlashingOS!" DB 0x0a ;换行 DB 0 RESB 0x1fe-$ ;填写0x00到0x001fe ;$代表参数,这里用于计算需要再输出多少个0, ;$表示在此之前输出的字节数,由此可以补充0的个数 DB 0x55, 0xaa ;启动区以外部分的输出 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00 ,0x00, 0x00 RESB 4600 ;填充4600个0x00 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00 ,0x00, 0x00 RESB 1469432

批处理文件asm.bat,将flashingos.nas 编译生成 flashingos.img 文件

之后只要运行命令行,输入asm,机会生成falshingos.img文件,然后输入run就可以启动系统了。

VMWare运行此虚拟机的步骤我就不在这里写了,如果大家感兴趣可以给我留言,我之后再写一下VMWare运行此虚拟机的教程。

最新回复(0)