电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

高手揭密开发简单“操作系统”全过程


发布日期:2023/3/5 10:37:13
 

[什么?]

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

引导程序要想发挥作用让机器识别就必须安置在一个特别的位置这个位置就是磁盘的第一个扇区(磁道扇区备注没有扇区)而一个包含引导程序的扇区叫作引导扇区

一个合法的引导扇区()通常包含个字节(当然喽一个扇区通常本来就是个字节))并且以xAA这样一个占用两个字节的数据结尾作为标志符(备注x前缀说明这是一个十六进制数)

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

char BootSector[];

接着一个合法的引导扇区必须以xAA结束

BootSector[] = x;

BootSector[] = xAA;

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

[过程]

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

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

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

[如何]

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

)首先按照要求写一个合法的引导程序(通常用汇编机器码也可以呵呵)

)然后将其通过汇编程序如NASM汇编成二进制文件

)最后将这个二进制文件写入到目标盘的第一个扇区

跟我做:P]

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

第一步写代码

; 文件名bootasm

; 代码如下注意汇编中通常用;来表示注释内容

; 此段代码参考《自己动手写操作系统》(于渊)

;

; 初始化函数

org ch ; 告诉编译器将此段程序加载

; 到内存x:C

mov ax cs

mov ds ax

mov es ax

call PrintStr ; 调用屏幕打印函数

jmp $ ; 无限循环

PrintStr: ; 屏幕打印函数

mov ax HelloWorld ; 将字符串拷贝到ax

mov bp ax ; es:bp = 串地址

mov cx ; cx = 串长度

mov ax h ; ah = al = h

mov bx ch ; 页号为(bh = ) 黑底红字(bl = ch高亮)

mov dl

int h ; h号中断

ret

HelloWorld: db Welcome to Lees OS *_* ; 字符串负值

times ($$$) db ; 用x填充剩余的空间使生成

; 的二进制代码刚好为字节

dw xaa ; 结束标志

; 整个程序结束!很短吧

第二步汇编

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

C:[PATH]\ nasm bootasm o bootbin

其中C:[PATH]\为bootasm代码文件所在位置

现在如果不出意外的话你已经拥有了bootbin二进制文件这个就是引导程序!

第三步制作引导盘

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

那么我们准备一张软盘

现在我们要自己写一个程序将我们汇编得到的二进制文件写到软盘的第一个扇区

C语言程序代码如下

/***************START***************/

#include

#include

int main(void)

{

FILE *in;

unsigned char buffer[];

if((in = fopen(bootbin rb))==NULL)

{

printf(Error loading file\n);

exit();

}

fread(&buffer in);

while(biosdisk( buffer));

fclose(in);

return ;

}

/****************END****************/

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

第四步GOGOGO

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

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

一行醒目的红字

Welcome to Lees OS *_*

打印在屏幕上!

上一篇:Windows7中的WindowsLiveEssential

下一篇:新浪微博什么是企业版微客服?