您的位置 首页 技术

Bootloader 介绍

bootloader的定义:相当于pc机的BIOS,在操作系统启动内核运行之前运行的一段小程序,通过这段小程序我们可以初始化cpu内部的硬件设备,建…

bootloader的界说:

相当于pc机的BIOS,在操作体系发动内核运转之前运转的一段小程序,经过这段小程序咱们能够初始化cpu内部的硬件设备,树立内存空间映射规模,从而将体系的软硬件环境带到一个适宜的状况,以便终究调用os内核准备好正确的环境。

能够得出bootloader首要有2个使命,1是初始化cpu内部的硬件设备,2是将os kernel带到内存中去。

在讲bootloader之前,咱们先讲讲pc机的发动进程,

pc机中有bois,这个是固化在硬件的,当pc机一加电今后,bios就会自己发动,完结硬件检测和资源的分配,然后将硬盘中的引导程序调入内存,然后把控制权交给引导程序,引导程序首要的用处便是将操作体系的kernel调入内存,然后跳转到内核的开端地址,然后os就开端发动了。

就pc而言,发动的进程相对杂乱,从bios—>引导程序(grub等)—->os

可是嵌入式体系来说,他没有bios这样硬件,所以它的发动进程全部都是交给bootloader去完结的。

bootloader是放在flash的最前面的方位,原因是:

体系在加电或复位的时分,一切的cpu一般都从cpu制造商预先安排地址开端履行的,(一般是0x00000000方位),所以bootloader一般是放在flash中的最前面的方位。

这是一个简易的flash分布图,bootloader在flash的最前端。

关于bootloader的发动进程还能够分为两种,1是单阶段,2是多阶段的

现在许多的bootloader是2个阶段的

stage 1 的进程(用的是汇编)

1是初始化硬件设备(cpu内存的硬件设备)

2是初始化stage2 要运用的内存空间

3是把stage 2的代码copy到内存中去

4初始话仓库

5是跳转到c的进口函数

stage 2(c言语)

1.初始化本阶段的硬件设备(板载硬件设备)

2.将os kernel导入到内存中去

3.调用内核

stage 1是用汇编写,首要是是为了装备能让c言语运转环境。

这个是一个详细的flash的结构图,bootloader 在履行第一个部分的时分,也便是stage1的时分,会把bootloader stage2这部分copy到ram中去运转,为什么呢,我觉得一个在内存中运转总是比在flash中履行要好,第二我觉得能履行code的flash有必要是nor flash,这样的flash相对本钱也就高了。所以就会发生这个部分。当stage2的时分,会将kernel也copy到内存中,然后在完毕的阶段,让履行地址跳转到操作体系的进口地址,那样的话操作体系也就自己发动来了。

假如剖析过2440的官方代码的话,里边有一个start.s 这个汇编代码,这能够当作一个小型的bootloader,由于他也完结了自发动的进程,不过他发动的是你的程序而不是操作体系,不过效果很类似。

在上面咱们知道bootloader stage1这个阶段的代码是运转在flash中的,假如flash是nor flash的话也是能够的,不过假如你的开发板是不带nor flash的话则就不能了。nand flash是不能让代码运转在flash的,所以他的自发动进程是比较杂乱的。他的cpu有一个4k ram 在加电的时分是被当作垫脚石运用的,当板子加电今后,硬件会主动把flash最前面的code copy到这个内存中的,也便是bootloader stage1这个部分,在这4kB的空间中的代码有必要要完结讲代码copy的内存中去

关于bootloader的研讨我觉得能够看一下start.s这个源代码,你会知道的愈加清楚,不过是汇编的,了解起来会有点困难,要耐性看的…..

还有关于bootloader的移植,为什么要进行bootloader的移植呢,原因有2个

1是由于不同的板子之间的cpu体系结构不一样…

2是由于不同的板子之间的外围硬件设备不一样…

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/274715.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部