转载: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的概念和功能相关推荐

  1. 嵌入式系统 Boot Loader 技术内幕-目前看到介绍Boot loader最通俗明了的文章

    1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...

  2. 嵌入式系统 Boot Loader 技术内幕

    转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经 ...

  3. 如何通过网络将文件传输到嵌入式设备_嵌入式系统 Boot Loader技术内幕,带你完全了解Boot Loader...

    一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序.包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分.2. Linu ...

  4. Boot Loader 的设计与实现

    <script type="text/javascript"></script> 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌 ...

  5. Linux学习-Boot Loader: Grub2

    boot loader 的两个 stage 在 BIOS 读完信息后,接下来就是会到第一个开机装置 的 MBR 去读取 boot loader 了.这个 boot loader 可以具有选单功能.直接 ...

  6. 嵌入式系统 Boot Loader 技术

    文章目录 1. 引言 2. Boot Loader 的概念 2.1 Boot Loader所支持的CPU与嵌入式开发板 2.2 Boot Loader的安装媒介(Installation Medium ...

  7. Boot loader: Grub入门(转)

    Boot Loader: Grub 在看完了前面的整个启动流程,以及核心模块的整理之后,你应该会发现到一件事情, 那就是『 boot loader 是加载核心的重要工具』啊!没有 boot loade ...

  8. U-BOOT之一:BootLoader 的概念与功能

    U-BOOT之一:BootLoader 的概念与功能 --转自<U-BOOT移植S3C2440完全手册> 1.1嵌入式Linux 软件结构与分布 一般情况下嵌入式Linux 系统中的软件主 ...

  9. 【转】U-BOOT之一:BootLoader 的概念与功能

    [转]U-BOOT之一:BootLoader 的概念与功能 U-BOOT之一:BootLoader 的概念与功能 --转自<U-BOOT移植S3C2440完全手册> 1.1嵌入式Linux ...

最新文章

  1. leetcode-20 valid-parentheses(有效的括号)
  2. windows内存管理和API函数
  3. Android 利用方向传感器获得手机的相对角度
  4. Android开发返回拍摄的图片
  5. 配电基础知识汇总,99%的人都收藏了!
  6. Linux 上 GDM 登录界面如何适应高分屏
  7. 将日期转成指定格式_Excel小技巧——如何利用公式,快速将一串数字转换为日期格式...
  8. 22 块级元素和行内元素
  9. java安全(六)java反序列化2,ysoserial调试
  10. python学习链接
  11. 刷题总结——蜥蜴(ssoj网络流)
  12. Julia的Dates库是重要和必要的补充!
  13. 1074 Reversing Linked List (25 分)
  14. 网易云NCM格式转换器
  15. phpstudy开机自启
  16. 经济学人The right call on Huawei (20190427)
  17. 安卓开发用什么语言好!这是一份用心整理的Android面试总结,已拿offer入职
  18. Android利用谷歌地图获取并解析经纬度对应的地理位置
  19. 计算机光驱参数,光驱价格参数简介【图文】
  20. 华为修改优先级命令_华为LTE重选参数命令简介

热门文章

  1. pythonsys标准_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...
  2. JS中完美兼容各大浏览器的scrolltop方法
  3. 机器学习算法总结--朴素贝叶斯
  4. redis服务器信息统计,利用Redis统计网站在线活跃用户的方法
  5. python+html语音人物交互_将HTML输入传递到python脚本
  6. web自动化测试(java)---测试过程中遇到的错误合集
  7. Hadoop学习之pig
  8. JavaScript 随意整理2
  9. STL浅析——序列式容器vector的数据结构
  10. hihocoder 1183 割点和割边