关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »化简为繁,开发自己的简单“操作系统”全过程

    化简为繁,开发自己的简单“操作系统”全过程

    2015-12-26 07:26:23 出处:阿里云
    分享

     一篇不错的文章,按照这篇文章的指导我制作了第一个自己的“操作系统”,也就是一个引导程序啦,当时还是很兴奋的哦!

    1、写在前面

      写一个PC机的引导程序比我们想象的容易很多,事实上所需要了解的只是知道PC机是怎样启动的。在网上看到不少类似的文章,说的很多,有的很麻烦,笔者觉得仅仅是写一个引导程序完全没有必要牵涉太多东西,知道足够的知识用于去实际地写一个出来看看是很多人最初的目的,那这篇文章就刚好适合你了。这篇文章的立足点就是短、简单、一看就懂,而又不会看完了什么都不知道就写出一个连自己都看不懂的代码。

      另外,机器人天空重新改版,笔者兴奋的看到了一个真正的机器人网站,囊括了机器人科学与技术这样庞大的系统工程的各个方面,在此献上这篇文章给机器人天空的操作系统专栏,祝愿机器人天空越办越好,并能够为中国的机器人爱好者们带来更多更丰富的信息与资源,做更多的实事!同时,也希望广大的机器人爱好者和有识之士都能出一份力,为祖国更美好的明天共同努力!笔者与您共勉。

      现在,让我们开始引导程序初探!
     
      [什么?]  

      很多文章中把写一个引导程序称作是开发一个最简单的操作系统,其实这是非常片面的,引导程序算不上操作系统,虽然此程序可以运行在裸机上。所谓引导程序,直观的说就是在系统加电启动时BIOS第一个执行的程序。

      引导程序要想发挥作用,让机器识别,就必须安置在一个特别的位置,这个位置就是磁盘的第一个扇区(0面0磁道1扇区,备注:没有0扇区),而一个包含引导程序的扇区叫作引导扇区。
      
      一个合法的引导扇区(1)通常包含512个字节(当然喽,一个扇区通常本来就是512个字节),(2)并且以0xAA55这样一个占用两个字节的数据结尾作为标志符。(备注:0x前缀说明这是一个十六进制数)。

      也就是如果把引导扇区看成一个字符数组的BootSector[]话(因为一个字符,即char,刚好为一个字节),那么这个数组就拥有512个元素,如果用C语言申明的话即为
    char BootSector[512];

      接着,一个合法的引导扇区必须以0xAA55结束,即
    BootSector[510] = 0x55;
    BootSector[511] = 0xAA;

      除了结束标志必须符合上面的要求之外,中间虽然还有510字节的空间,但执行代码可以少于510字节,用无意义字符(通常用0x0)填充剩余空间即可。

      [过程]

      PC是通过BIOS来启动机器的,当PC机加电之后BIOS启动相应的程序完成机器的自检,然后就寻找可以引导的驱动器,即大家通常所说的启动盘。在 BIOS中可以设置从哪个盘启动,但通常总要检查硬盘,所以当BIOS检查完前面的启动设备之后,如果没有发现任何引导程序,那么就会开始检查主硬盘,即 C盘。如果此时在C盘上找到了合法的引导扇区,那么就会将引导扇区的内容(共512字节)装载到内存0x0000:07C00处。此时BIOS把控制权限交给这段引导程序。

      那么,接下来,引导程序通常会简单的执行一些指令,比如输出一段文字,显示一个启动界面等等,但最重要的,引导程序将会启动一个更大的程序,然后把权限交给他,这通常就是我们所说的操作系统内核。额外补充一句,目前对操作系统的定义有不少,但笔者比较赞成的观点如下:

      从形式上看,操作系统是:从计算机启动到结束的过程中始终在运行的程序。而这通常就是我们所说的操作系统内核。从功能上看,操作系统:管理和维护所有的硬件、软件、数据资源,并为上层应用或服务提供一个抽象的接口。从某种层面上看,第二中定义更接近于虚拟机。(闲话一段^_^)

      [如何]

      现在,已经了解了这些基本的概念,那么,如何动手制作这样的引导扇区呢?这个过程十分简单,

      (1)首先按照要求写一个合法的引导程序(通常用汇编,机器码也可以,呵呵);
      (2)然后将其通过汇编程序,如NASM汇编成二进制文件;
      (3)最后,将这个二进制文件写入到目标盘的第一个扇区。

    2、跟我做

      上面说的很简单吧?那好,现在我们来写一个吧!

      第一步:写代码

    ; 文件名:boot.asm
    ; 代码如下,注意,汇编中通常用“;”来表示注释内容
    ; 此段代码参考《自己动手写操作系统》(于渊)
    ;
    ; 初始化函数
    org 07c00h              ; 告诉编译器将此段程序加载
                            ; 到内存0x0000:07C00处
    mov ax, cs
    mov ds, ax
    mov es, ax
    call PrintStr           ; 调用屏幕打印函数
    jmp $                   ; 无限循环


    PrintStr:               ; 屏幕打印函数
    mov ax, HelloWorld      ; 将字符串拷贝到ax
    mov bp, ax              ; es:bp = 串地址
    mov cx, 24              ; cx = 串长度
    mov ax, 01301h          ; ah = 13, al = 01h
    mov bx, 000ch           ; 页号为0(bh = 0) 黑底红字(bl = 0ch,高亮)
    mov dl, 0
    int 10h                 ; 10h号中断
    ret


    HelloWorld: db "Welcome to Lee's OS *_*" ; 字符串负值
    times 510-($-$$) db 0   ; 用0x0填充剩余的空间使生成
                            ; 的二进制代码刚好为512字节

    dw 0xaa55               ; 结束标志
    ; 整个程序结束!很短吧

      第二步:汇编

      假设你已经安装了NASM程序,那么进入命令行模式,然后输入以下命令:

    C:[PATH] nasm boot.asm -o boot.bin
    其中“C:[PATH]”为boot.asm代码文件所在位置。
    现在如果不出意外的话,你已经拥有了boot.bin二进制文件,这个就是引导程序!

      第三步:制作引导盘

      由于不能随便更改硬盘,否则系统无法进入原来的操作系统,所以我们用软盘来试验。

      那么,我们准备一张软盘。

      现在,我们要自己写一个程序将我们汇编得到的二进制文件写到软盘的第一个扇区。
    C语言程序代码如下:

    /***************START***************/
    #include
    #include

    int main(void)
    {
      FILE *in;
      unsigned char buffer[520];

      if((in = fopen("boot.bin", "rb"))==NULL)
      {
          printf("Error loading filen");
          exit(0);
      }

      fread(&buffer, 512, 1, in);
      while(biosdisk(3, 0, 0, 0, 1, 1, buffer));
      fclose(in);

      return 0;
    }
    /****************END****************/

      注意,这个程序必须同boot.bin文件在同一目录下,然后将软盘放进软驱,运行此程序。

      第四步:GOGOGO

      好了,现在你拥有了一张从头到尾完全自制的引导盘,由于有了她,你想运行你的电脑再也不需要微软插手了,而且这很可能是你第一次能在裸机上运行一个自己的程序哦,哈哈!

      重新启动你的机器,记得把软盘放进去,现在你看见什么了?

      一行醒目的红字:

      Welcome to Lee's OS *_*

      打印在屏幕上!

    3、写在后面

      本文完整的讲述了编写引导程序的过程,其中肯定会有一些不足,欢迎指正。另外,对于有各种其他想法,如希望在虚拟PC上尝试的人,那么只需要查找相应方法就可以。这是本文的第一个版本,如果有必要,后面还可能继续更新:-)

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。