当前位置: 技术问答>linux和unix
关于操作系统中引导部分的实现
来源: 互联网 发布时间:2016-07-11
本文导语: 现在是从软盘引导,没有什么头绪,请教各位达人。。。 | 额,我写过一个完整的引导程序,也是从软盘启动的,其实这样的,软盘不需要什么文件系统,因为你可以把各个文件的准确路劲算...
现在是从软盘引导,没有什么头绪,请教各位达人。。。
|
额,我写过一个完整的引导程序,也是从软盘启动的,其实这样的,软盘不需要什么文件系统,因为你可以把各个文件的准确路劲算出来,那个时候再用int 13h获取各个模块。
然后设定好gdt就可以进入保护模式了。再就是分页,然后设置idt什么的,代码可以和我要。
然后设定好gdt就可以进入保护模式了。再就是分页,然后设置idt什么的,代码可以和我要。
|
网上有很多有关Linux制作引导盘的文章,
有从软盘,U盘等引导方式。
有从软盘,U盘等引导方式。
|
上面的兄弟给的资料应该够用的了。但就怕初学者看不懂。
简单说来。每一种存储介质,如光盘,软盘,硬盘,他们都有一个区域叫做引导区,基本上就是开始的位置。
默认的情况下,电脑bios在自检完了之后,会按设置启动顺序去读每一个介质的引导区,然后执行。只是后如果你的介质的引导区被写入了可加载系统的代码的话,就会启动成功。
简单说来。每一种存储介质,如光盘,软盘,硬盘,他们都有一个区域叫做引导区,基本上就是开始的位置。
默认的情况下,电脑bios在自检完了之后,会按设置启动顺序去读每一个介质的引导区,然后执行。只是后如果你的介质的引导区被写入了可加载系统的代码的话,就会启动成功。
|
有很多图书可以参考,比如:一个操作系统的实现,Linux内核分析,etc。
; boot.asm
[ORG 0]
jmp 0x07c0: start
start:
mov ax, cs
mov ds, ax
mov es, ax
reset:
mov ax, 0
mov dl, 0 ;Drive=0(=A)
int 13h
jc reset ; ERROR ==> reset again
read:
mov ax, 0x1000
mov es, ax ; ES:BX = 1000:0000
mov bx, 0
mov ah, 2 ; read data to es:bx
mov al, 5 ; read 5 sectors
mov ch, 0 ; Cylinder = 0
mov cl, 2 ; Sector = 2
mov dh, 0 ; Head = 0
mov dl, 0 ; Drive = 0
int 13h ; Read!
jc read ;ERROR ==> Try again
jmp 1000h:0000 ; jmp to es:bx, execute:
times 510-($-$$) db 0
dw 0xAA55
|
最主要的你需要了解CPU的相关概念,掌握汇编语言,推荐学习图书IA32编程手册,系统篇,这里面就教你怎么去实现一个操作系统。
|
首先要知道软盘的文件格式 一般都是FAT16文件系统
通过读取存储在该文件系统中各个文件名字 查找到存放在软盘上的操作系统的加载程序
找到之后跳转到操作系统的加载程序中执行。
通过读取存储在该文件系统中各个文件名字 查找到存放在软盘上的操作系统的加载程序
找到之后跳转到操作系统的加载程序中执行。