0.11之路(一):BIOS引导过程

BIOS在内存最开始的位置构建中断向量表,紧接着是BIOS数据区,此外还要有与中断向量表相应的中断服务程序。我们正是利用这些中断服务程序把内核加载到内存中。
中断是操作系统里的一个意义重大的概念,是一个技术手段。

加载内核程序并为保护模式做准备

对于Linux 0.11来说,计算机将分三批次逐次加载操作系统的内核代码,第一批由BIOS中断 int 0x19 把第一扇区 bootsect 的内容加载到内存;第二批、第三批在bootsect的指挥下,分别把其后的4个扇区和随后的240个扇区的内容加载至内存。

先来看一下 int 0x19 指向的中断服务程序 —— “启动加载服务程序”。首先这个程序是BIOS事先设计好的,代码是固定的,与操作系统无关,它的目的就是找到软盘并加载第一扇区
所以BIOS是独立于操作系统的。

接着就是将第一扇区加载到内存 0x07C00 的位置,操作系统出现了。
这个扇区里存放的是 Linux 0.11 的引导程序(俗称bootloader)。

这里要区分一下:BIOS和bootloader是不同的。BIOS之后,bootloader开始工作。在PC上bootloader分为两部分:第一阶段引导程序位于主引导记录(MBR),用以引导位于某个分区上的第二阶段引导程序,如NTLDR、BOOTMGR和GNU
GRUB等。所以我们经常见到的grub就属于bootloader,当然它不是BIOS。
在ARM板移植时,我们通常会对uboot进行裁剪,使得这个板子拥有合适的bootloader,但与PC不同的是,对于嵌入式Linux来说,并没有BIOS,而是直接从flash中运行bootloader,然后装载内核,所以省去了BIOS。

于是第一扇区就称为启动扇区(boot sector)。第一扇区的载入,标志着 Linux 0.11 中的代码即将发挥作用。第一扇区中的代码是汇编程序 bootsect.s ,这是计算机开机以来,内存中第一次有了 linux 操作系统自己的代码,虽然只是启动代码。

到目前流程是这样的:
开机——BIOS——bootsect.s

对BIOS开发人员来说,他们只需要做到:接到启动操作系统的命令后,只从启动扇区把代码加载到0x07C00位置,至于这个扇区中存放的是不是操作系统的引导程序,则不管,将责任推给用户。也就是说用户要确保正确安装了操作系统。而操作系统的设计者必须把最开始执行的程序“定位”在启动扇区,其余的程序则可以根据具体的操作系统而有不同的设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值