设为首页 加入收藏

TOP

Bootloader设计
2016-12-12 08:15:32 】 浏览:264
Tags:Bootloader 设计

引导加载程序是系统加电后运行的第一段代码。我们熟悉的 PC 中的引导程序一般由BIOS(Basic Input/Output System) 和位于 MBR(Master boot record) 的 OS bootloader(例如 LILO 或者 GRUB)一起组成。然而在嵌入式系统中通常没有像 BIOS 那样的固件程序,因此整个系统的加载启动任务就完全由 bootloader 来完成。设计bootloader的主要目的在于初始化系统的软硬件环境进行引导启动(“启动加载”模式)以及系统的升级维护(“下载”模式)。


bootloader 是依赖于硬件而实现的,不同的体系结构及板级配置的bootloader 是不同的,比如常见的简单的无外部存储器的STM32所使用的IAP(In Application Programming)及使用外部存储的u-boot。但它们的基本设计原理都是一样的。


由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性(对于相同的 CPU 以及存储设备,要增加外设支持,阶段 1 的代码可以维护不变,只对阶段 2 的代码进行修改)。


Stage1


Stage2


当 bootloader 阶段设计好之后,需要考虑的是镜像存储的地址分配:总镜像保存在什么地方,阶段 2 对应的镜像会被拷贝到什么地方;内核镜像原先存放在什么地方,bootloader会把它又重新加载到什么地方。


Nor Flash启动


Nand Flash启动


由于成本的问题,在发布的产品中我们一般直接唯一使用Nand Flash。


对于普通用户来说只需要 bootloader 的启动加载模式,但是对于开发者来说,则需要下载模式,因为他们需要时时刻刻地进行一些镜像的更新。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇你知道JavaScript中的结果值是什.. 下一篇ARM汇编语言(Assembly Language)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目