0.Boot Loader的概念和功能
转载:http://blog.chinaunix.net/uid-20543672-id-94371.html
1、嵌入式Linux软件结构与分布
在一般情况下嵌入式Linux系统中的软件主要分为以下及部分:
(1)引导加载程序:其中包括内部ROM中的固化启动代码和Boot Loader两部分。
而这个内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导Boot Loader。有的芯片比较复杂,比如Omap3,他在flash中没有代码的时候有许多启动方式:USB、UART或以太网等等。而S3C24x0则很简单,只有Norboot和Nandboot。
(2)Linux kernel 和drivers。
(3)文件系统。包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4、UBI、CRAMFS等等)。它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。
(4)应用程序。用户自定义的应用程序,存放于文件系统之中。
在linux内核的启动运行除了内核映像必须在主存的适当位置,CPU还必须具备一定的条件:
1. CPU 寄存器的设置:
R0=0;
R1=Machine ID(即Machine Type Number,定义在linux/arch/arm/tools/mach-types);
R2=内核启动参数在 RAM 中起始基地址;
2. CPU 模式:
必须禁止中断(IRQs和FIQs);
CPU 必须 SVC 模式;
3. Cache 和 MMU 的设置:
MMU 必须关闭;
指令 Cache 可以打开也可以关闭;
数据 Cache 必须关闭;
但是在CPU刚上电启动的时候,一般连内存控制器都没有配置过,根本无法在内存中运行程序,更不可能处在Linux内核的启动环境中。为了初始化CPU和其他外设,使得Linux内核可以在系统主存中跑起来,并让系统符合Linux内核启动的必备条件,必须要由一个先于内核运行的程序,他就是所谓的引导加载程序(Boot Loader)。
而Boot Loader并不是Linux才需要,是几乎所有的运行操作系统的设备都具备的。我们的PC的BOIS就是Boot Loader的一部分(只是前期引导,后面一般还有外存中的各种Boot Loader),对于Linux PC来说,Boot Loader = BIOS + GRUB/LILO。
3、Boot Loader的功能和选择
通过上面的讲述,我们可以知道:bootloader是在OS内核运行之前的一段小程序。通过这段小程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用OS内核准备好正确的环境,最后从别处(flash/以太网/UART)载入内核映像并跳到入口地址。
由于BootLoader直接操作硬件,所以她严重依赖于硬件,而且依据所引导的操作系统的不同,也有不同的选择对于嵌入式世界中更是如此。就S3C24x0而言,如果是引导Linux,一般选用韩国的mizi公司设计的vivi或者DENX软件工程中心的U-boot,如果是引导Win CE,就选用Eboot。如果是开发StrongARM 构架下的LART,就可选用由Jan-Derk Bakker 和 Erik Mouw发布的Blob(Boot Loader Object)。如果是要引导eCos系统,就可以选用同是Redhat公司开发的Redboot。
所以在嵌入式世界中建立一个通用的 BootLoader 几乎是不可能的,而有可能的是让一个 Boot Loader代码支持多种不同的构架和操作系统,并让她方便移植。U-boot就是支持多平台多操作系统的一个杰出代表。这也是为什么我喜欢用U-boot的原因,因为如果在开发S3C2440时熟悉了U-boot,再转到别的平台的时候就可以很快地完成这个平台下的U-boot移植,而且U-boot的代码结构越来越合理,对于新功能的添加也十分容易。
值得一提的是国内的一个开源项目maxwit中的g-bios也是一个不错的开源BootLoader,同样支持多平台。
转载于:https://www.cnblogs.com/Ocean-Star/p/9236349.html
0.Boot Loader的概念和功能相关推荐
- 嵌入式系统 Boot Loader 技术内幕-目前看到介绍Boot loader最通俗明了的文章
1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...
- 嵌入式系统 Boot Loader 技术内幕
转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经 ...
- 如何通过网络将文件传输到嵌入式设备_嵌入式系统 Boot Loader技术内幕,带你完全了解Boot Loader...
一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序.包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分.2. Linu ...
- Boot Loader 的设计与实现
<script type="text/javascript"></script> 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌 ...
- Linux学习-Boot Loader: Grub2
boot loader 的两个 stage 在 BIOS 读完信息后,接下来就是会到第一个开机装置 的 MBR 去读取 boot loader 了.这个 boot loader 可以具有选单功能.直接 ...
- 嵌入式系统 Boot Loader 技术
文章目录 1. 引言 2. Boot Loader 的概念 2.1 Boot Loader所支持的CPU与嵌入式开发板 2.2 Boot Loader的安装媒介(Installation Medium ...
- Boot loader: Grub入门(转)
Boot Loader: Grub 在看完了前面的整个启动流程,以及核心模块的整理之后,你应该会发现到一件事情, 那就是『 boot loader 是加载核心的重要工具』啊!没有 boot loade ...
- U-BOOT之一:BootLoader 的概念与功能
U-BOOT之一:BootLoader 的概念与功能 --转自<U-BOOT移植S3C2440完全手册> 1.1嵌入式Linux 软件结构与分布 一般情况下嵌入式Linux 系统中的软件主 ...
- 【转】U-BOOT之一:BootLoader 的概念与功能
[转]U-BOOT之一:BootLoader 的概念与功能 U-BOOT之一:BootLoader 的概念与功能 --转自<U-BOOT移植S3C2440完全手册> 1.1嵌入式Linux ...
最新文章
- Linux crontab定时任务示例
- 多项式(polynomial)和 单项式(monomial)
- ActionContext_、ValueStack、Stack_Context关系
- ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen'
- linux怎么判断全局符号,Linux下全局符号覆盖有关问题
- Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)
- css 下划线_css学习
- L1-004 计算摄氏温度 (5 分)—团体程序设计天梯赛
- [转]DataGridView显示行号的几种方法
- Java学习之基本概念
- docker部署java项目_JAVA项目如何通过Docker实现持续部署
- 精灵球Plus使用方法
- Arduino介绍_硬件
- CentOS下MySQL安装失败,报socket '/tmp/mysql.sock错误解决方法
- 【观察】嘉诚信息:为智慧检务按下“加速键”
- “感动中国”2012年度人物颁奖词
- 局部加权回归Loess对比MFCC三角滤波(吴恩达机器学习中说,Loess算法用到了aircraft的自动驾驶中)
- C++ 虚函数表 vfptr详解
- 深圳买房负担全球第一:记得在泡沫破灭前把房子卖掉
- 易语言 小写金额转大写金额
热门文章
- oracle出错如何备份数据,备份oracle数据库出错
- Python——Django框架——django-simple-captcha(验证码)
- 列表元素的几种统计方法总结(嵌套列表)
- 解决 git pull 报错 fatal: refusing to merge unrelated histories
- XidianOJ 1099 A simple problem
- Gradle用户指南(1)-Gradle安装
- unity中发布android时候出现这样的提示错误:error:device not found
- [开发技巧3]不显示报表直接打印
- C# MVC使用阿里云对象存储加快图片加载速度(一)
- 6、Flutter Error waiting for a debug connection: ProcessException: adb did not report f(转)