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

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

                             ——转自《U-BOOT移植S3C2440完全手册》

1.1嵌入式Linux 软件结构与分布

一般情况下嵌入式Linux 系统中的软件主要分为以下几部分:

1) 引导加载程序:其中包括内部ROM 中的固化启动代码和BootLoader 两部分。内部固化ROM 是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。有的芯片比较复杂,比如Omap3 在flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。而S3C24x0 则很简单,只有Norboot 和Nandboot。

2) Linux kernel drivers

3) 文件系统。包括根文件系统和建立于Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境及载体。

4) 应用程序。用户自定义的应用程序,存放于文件系统之中。

在Flash 存储器中,他们的分布一般如下:

但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader 参数区,等等。

1.2 在嵌入式Linux BootLoader 的必要性

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)。

而BootLoader 并不是Linux 才需要,而是几乎所有运行操作系统的设备都需要。我们的PC 的BOIS 就是Boot Loader 的一部分(只是前期引导,后面一般还有外存中的各种BootLoader),对于Linux PC 来说,Boot Loader = BIOS + GRUB/LILO。

1.3 Boot Loader 的功能和选择

综上所述:BootLoader 是在操作系统内核启动之前运行的一段小程序。通过这段程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像到主存并跳到入口地址。

由于BootLoader 需要直接操作硬件,所以它严重依赖于硬件,而且依据所引导的操作系统的不同,也有不同的选择。对于嵌入式世界中更是如此。就S3C24x0 而言,如果是引导Linux,一般选用韩国的mizi 公司设计的vivi 或者DENX 软件工程中心的Das 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 的代码结构越来越合理,对于新功能的添加也十分容易。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java写七彩文字_【PS精选案例教程】创建一个漂亮的七彩文字

原标题:【PS精选案例教程】创建一个漂亮的七彩文字效果图:步骤1. 新建一个文档(大小随意)步骤2. 滤镜→渲染→云彩步骤3. 可以按CtrlAltF增加效果步骤4. CtrlJ复制一层步骤5.设置前景色步骤6. 用径向渐变从中间往外拉一个渐变步骤7. 设置“图层1”混合模…

容斥原理的二进制实现模版

最近学习容斥原理,实现容斥原理大致有三种方法:dfs,队列数组,二进制。 今天主要讲下二进制实现容斥原理: 有一个集合{A1……An},求集合的子集?很显然答案为 也就是2^n个,也就是每一个…

测试鼠标双击_鼠标环境可靠性测试是什么

鼠标和电脑是的组合,购买电脑时一般商家会送给用户一个配套的鼠标,鼠标和电脑一样,对环境的要求较高,极少部分的鼠标由于短路或者是环境温度过高的问题会导致鼠标出现自燃的现象,如果用户此时正在使用电脑编辑文件&…

virtualbox主机网络管理 未能创建_如何在 VirtualBox 中增加现有虚拟机的磁盘大小 | Linux 中国...

导读:你可以在 VirtualBox 中扩大虚拟硬盘,即使在创建之后也可以。                   本文字数:1434,阅读时长大约:2分钟https://linux.cn/article-12869-1.html作者:Dimitrios Savvopoulos译者…

usb长包数据结束判断_如何判断南桥好坏 判断南桥好坏方法介绍【详解】

南桥是电脑里重要的零部件,南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。那么南桥发生故障, 怎么判断南桥好坏 呢?一、通过测PCI槽、AGP槽对地打阻值可判定南北桥有无损坏1、PCI槽中所有的AD复合线对地打阻值都为300&…

taskkill无法终止进程 拒绝访问_解决删除文件时,提示无法删除的问题

有时我们想删除某个程序文件夹,或是卸载后残留的一些 .dll 等后缀的文件,却一直提示 “运行中” 、 “权限不足” ,甚至用第三方的强力删除功能都无法删除。这时我们可以用系统自带的命令行功能,使用几个简单的小命令就可以彻底删…

擦窗机器人测试标准_擦窗机器人,我选择玻妞的三个理由!

很多人都喜欢高层,一览无遗,广阔风景!可现实是无论什么高层湖景都会被窗户上日积月累的灰尘遮挡的严严实实,每次擦窗都累到怀!疑!人!生!于是一年又一年,你想要的风景始终…

Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来

原标题:Oracle 谈 JavaFX 及 Java 客户端技术的未来据 Oracle 博客称,从 JDK 11 开始,Oracle 将从 JDK 中删除 JavaFX,但在 2022 年之前,Oracle 还会继续为 JDK 8 中的 JavaFX 提供商业支持。2011 年,JavaF…

低代码开发平台_低代码开发平台测评——伙伴云

​本次测评的产品严格来说不算低代码开发平台,它自己给自己的定位更多是全流程数据生产力平台。不过它依然具备应用搭建的关键要素,而且在数据管理方面还比较出彩,所以不能放过它——伙伴云,这款由Discuz!主创团队操刀…

oracle对某两列求和再求和_函数实战:多列条件求和

今天和新手小伙伴们分享有关条件求和的内容,高手请忽略哈。先来看一组销售数据,是某商场不同品牌电视机的三天销售记录:现在需要根据G列的品牌,计算其三天的销售总和。想必有表亲已经想到办法了,既然是按条件求和&…

php 访问第三方接口吗,PHP-----------HTTP请求的第三方接口

2019独角兽企业重金招聘Python工程师标准>>>开发中常常遇到接口请求这个功能,后台也不例外,因为遇到了,所以写一篇。前段时间做商城后台时,需要用到第三方物流接口查询物流信息。post:/***** param $url* par…

(IOS)截图Demo

思路是建一个UIView的子类&#xff0c;获取划动出的矩形&#xff0c;用协议将矩形传递给代理对象&#xff0c;依据该矩形完成图像数据的截取&#xff0c;并显示出来。 截图视图类&#xff1a; #import <UIKit/UIKit.h>protocol UICutImgDelegate;interface BIDCutView : …

POJ1033 Defragment

题目来源&#xff1a;http://poj.org/problem?id1033 题目大意&#xff1a; 某操作系统的文件系统中&#xff0c;所有的磁盘空间被分为N个大小相等的cluster&#xff0c;编号1至N。每个文件占用一个或多个cluster。所有没有被文件占用的cluster称为是空闲的。磁盘上的一个文件…

pcb过孔漏铜_【企业资讯】大正瑞地:专注PCB药水二十年,品质、性能可靠

企业简介公司拥有领先的技术及产品、顾问型服务、PCB药水全系列体系化运行。沉铜、电镀、中/超粗化、减铜药水、化镍金、OSP、显影、退膜及辅助物料等全系列PCB药水&#xff0c;自主研发&#xff0c;拥有核心技术&#xff0c;自成体系&#xff0c;可以全面、系统的供应产品及全…

前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter

李熠&#xff1a;前端架构 101&#xff08;一&#xff09;&#xff1a;在谈论它们之前我们需要达成的共识​zhuanlan.zhihu.com李熠&#xff1a;前端架构 101&#xff08;二&#xff09;&#xff1a; MVC 初探​zhuanlan.zhihu.com李熠&#xff1a;前端架构 101&#xff08;三&…

如何连接安卓手机_安卓手机如何使用AirPods

苹果公司推出的无线蓝牙耳机AirPods可以说是市面上最好的无线耳机&#xff0c;配合iPhone使用能够给你带来畅快舒适的体验。有很多小米华为oppo&#xff0c;vivo等安卓手机用户也在问了&#xff0c;安卓手机能够支持AirPods呢&#xff0c;答案是肯定的。图片来源&#xff1a;网…

晒一下我的代码生成器

经过最近一段新的尝试【BS架构】,之前的编程一直是CS架构&#xff0c;但也总是在忙那些项目&#xff0c;没法整理出一套符合自己团队的一套编程体系和架构&#xff1b; 新的起点&#xff0c;又是一个新的挑战&#xff0c;现在已经是03年&#xff0c;最早做的时候是07年&a…

matlab自动排版,工具方法| Matlab 简单绘图与排版

matlab启动界面 来自百度百科对于很多教师与学生&#xff0c;Matlab是做数值计算很好的一款软件。收集、整理、分析数据十分的方便&#xff0c;我们也可以通过Matlab画出相对比较好看的图。这里简单总结下Matlab的画图方式与排版&#xff0c;供初学者参考、交流。Matlab基本都是…

坦克大战代码_坦克大战系列文章-坦克大战简介

前言本篇主要对坦克大战Robocode做一个简单的介绍&#xff0c;对java最初的人工智能算法演练工具做一个了解坦克大战简介今天我们要谈的是java 最初的基于人工智能算法的仿真模拟坦克大战&#xff0c;全称Robocode。Robocode 是一位IBM的工程师 Mat Nelson 用Java 语言所创造的…

php查询文件名,php怎么查询文件名

php查询文件名的方法&#xff1a;可以利用pathinfo()函数来查询。pathinfo()函数以数组的形式返回关于文件路径的信息&#xff0c;包括目录路径、文件名等&#xff0c;如&#xff1a;【print_r(pathinfo("/testweb/test.txt"))】。pathinfo() 函数以数组的形式返回关…