bootloader

一个嵌入式系统从软件角度来看可以分为三个层次:

1.引导加载程序

包括固化在固件(firmware)中的boot程序,和bootloader两大部分。

2.Linux内核

特定于嵌入式平台的定制内核

3.文件系统

包括了系统命令和应用程序。

 

软件层次:

同时装有bootloader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配。

 

Bootloader -- boot parameters -- kernel -- root filesystem

 

bootloader定义:

在操作系统运行之前的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

 

安装bootloader:

系统加电复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行的。如:s3c2410在复位后从地址0x0000-0000起开始执行。而嵌入式系统则将固态存储设备,如:flash.安排在这个地址上。bootloader程序又安排在固态存储器的最前端,这样就能保证在系统加电后,CPU首先执行bootloader程序。(bootloader 放到0x0000-0000地址处)。

 

移植bootloader:

原因:

不同的CPU体系结构都有不同的bootloader。除了依赖于CPU体系结构外,bootloader还依赖于具体的嵌入式板级设备的配置,比如办卡的硬件地址分配,外设芯片的类型等。

也就是说,对于两块不同的开发板而言,即使它们是基于同一种CPU而构建的,但如果他们的硬件资源或配置不一致的话,要想在一块开发板上运行的bootloader程序也能在另一块板子上运行,还是需要作修改。

芯片级的移植,板级的移植。

 

流程:

启动过程可以分为单阶段和多阶段两种。通常多阶段的bootloader具有更复杂的功能,更好的可移植性。

从固态存储设备上启动的bootloader大多采用两阶段:(stage1:汇编; stage2 C语言)

stage1: 1.完成初始化硬件(CPU内部的寄存器);

2.为stage2准备内存空间;

3.并将stage2复制到内存中;

4.设置堆栈;(因为C语言需要使用堆栈)

5.然后跳转到stage2的c入口点。

stage2:  1.初始化本阶段要使用到的硬件设备(板载的硬件,外设)

2.将内核映像和根文件系统映像从flash上读到ram中;

3.调用内核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值