zoukankan      html  css  js  c++  java
  • 如何编写自己的操作系统(1)

          我也是自己一步一步学着别人的方法来编写一个操作系统。把一些重点记下来。教程在这里:http://www.brokenthorn.com/Resources/OSDevIndex.html

    1、准备工作

          一台32位Intel的电脑就可以了,使用Windows操作系统。然后下载一些软件安装上:

     

    软件名 下载地址 说明
    NASM http://nasm.sourceforge.net/ nasm –f bin Boot4.asm –o Boot4.bin
    PartCopy http://www.brokenthorn.com/Resources/Programs/pcopy02.zip partcopy Boot4.bin 0 200 -f0

    VFD - Virtual Floppy Drive

    http://sourceforge.net/projects/vfd/

    How to use VFD

    Bochs Emulator

    http://bochs.sourceforge.net/

    How to use Bochs

          NASM和PartCopy需要设置一下环境变量,在Path中添加指向其.exe目录的文件夹即可。其它问题如果有什么不明白的,可以参看这里

       VFD启动时注意使用管理员权限启动,否则会报“没有权限”的错误。

    2、Bootloader

          好了,我们直接进入启动程序。整个程序如下:

    Boot4.asm

          这个程序经过NASM编译之后会形成一个大小恰好为512B的文件,我们使用下面的命令来编译这个名为Boot4.asm的文件(为什么叫Boot4.asm?因为测试这个程序时正好是这个编号:)

    nasm -f bin Boot4.asm -o Boot4.bin

          启动VFD,创建一个虚拟软盘,命名为A盘。然后使用PartCopy把Boot4.bin这个文件拷贝到软盘的第一个扇区:

    partcopy Boot4.bin 0 200 –f0


          现在在软盘的第一个扇区就是我们的这个启动程序。计算机启动时会按顺序检查BIOS设定的所有启动设备(比如按照软驱、光驱、磁盘的顺序来检测是否在其中有可以启动的设备)。在这里,我们把Boot4.bin写入了磁盘的第一个扇区(磁盘的每个扇区为512B),并且这个文件的末尾为0xaa55,这个特殊的字节序列表示这是一个可以启动的文件。BIOS就把这个文件放到内存的 0x7c00:0 这个地址,去执行这个文件。大致过程可以参看这里(计算机按下电源后发生了什么)

          有关这个汇编程序Boot4.asm的详细解释我们后面再做。下面我们编写一个超级简单的操作系统Stage2.asm

    3、一个超级简单的操作系统Stage2.asm

          不用任何解释,直接给出这个操作系统的代码。它的主要功能就是在屏幕上打印出 “Preparing to load operating system...”这个字符串

    Stage2.asm

          之所以把这个文件叫做Stage2.asm,是因为这是系统启动的第二个阶段,这个操作系统是由Boot4.bin从磁盘中读取出来并且加载到内存中的这个文件会被加载到0x7c00:0x0200这个内存地址上。现在我们使用NASM把这个文件编译成一个二进制文件:

    nasm -f bin Stage2.asm KRNLDR.SYS

          之所以把它编译成为KRNLDR.SYS,是因为在Boot4.asm中,我们设定了 ImageName db "KRNLDR  SYS" 这个语句。现在只要知道有这么回事就可以了。这个文件名不能随便改。

          下面我们把KRNLDR.SYS拷贝到磁盘A中:

    copy KRNLDR.SYS A:\

          这时候,检查A盘,就会发现里面多出了一个KRNLDR.SYS这个文件。

    4、设置模拟器

          下面我们使用Bochs这个模拟器来模拟系统的启动。首先安装这个模拟器。然后建立一个文件,名字叫做bochsrc.bxrc,里面的内容为:

    bochsrc.bxrc


          保存好后,运行这个文件,就可以看到模拟器启动了。最后稳定之后的界面应该是这个样子的:

    image

          好了,到现在为止,我们的操作系统就已经运行完成了,打印出了一个字符串。如果你忘了把KRNLDR.SYS文件拷贝到A盘,它还会提示你出错。

          按一下这个界面上面的Power键,就可以结束这次模拟了。

          好了,有关代码的具体介绍,请参看这里

  • 相关阅读:
    操作系统复习
    你不知道的JS(2)深入了解闭包
    剑指offer(66)机器人的运动范围
    剑指offer(65)矩阵中的路径
    剑指offer(64)滑动窗口中的最大值
    剑指offer(63)数据流中的中位数
    剑指offer(62)二叉搜索树的第K个节点
    剑指offer(61)序列化二叉树
    剑指offer(60)把二叉树打印成多行
    让 Laravel API 永远返回 JSON 格式响应!
  • 原文地址:https://www.cnblogs.com/wangshuo/p/2264540.html
Copyright © 2011-2022 走看看