[uboot] (第一章)uboot流程——概述(转)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ooonebook/article/details/52939100
[uboot] uboot流程系列:
[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)
建议先看《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,根据例子了解一下上电之后的BL0\BL1\BL2阶段,以及各个阶段的运行位置,功能。
=================================================================================
一、bootloader & uboot
1、bootloader的概念
Bootloader是在操作系统运行之前执行的一段小程序。而这段小程序的最终目的,正确地设置好软硬件环境,使之能够成功地引导操作系统。
2、bootloader的核心功能
bootloader的核心功能就是引导操作系统,部分工作如下
初始化部分硬件,包括时钟、内存等等
加载内核到内存上
加载文件系统、atags或者dtb到内存上
根据操作系统启动要求正确配置好一些硬件
启动操作系统
3、bootloader的monitor功能
上述2是bootloader的核心功能,也就是引导操作系统的功能。
但是部分bootloader还支持monitor功能,提供了更多的命令行接口,具体部分功能如下:
进行调试
读写内存
烧写Flash
配置环境变量
命令引导操作系统
4、嵌入式几种常见的bootloader
uboot
这也是最常见的bootloader,开源,常用于ARM,MIPS等平台。
支持monitor功能,也是在项目project X中,使用的bootloader
所以后续两节会针对这个bootloader进行说明
superboot
不开源,友善之臂的tiny210代码中默认使用这个bootloader
LK(Little Kernel)
常用于高通平台,支持monitor功能。
二、uboot-spl & uboot
1、uboot-spl
由uboot编译生成,对应于BL1阶段,也就是BL1的镜像,uboot-spl.bin。
根据《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,其代码运行于IRAM中
主要工作有:
初始化部分时钟(和SDRAM相关)
初始化DDR(外部SDRAM)
从存储介质上(比如SD\eMMC\nand flash)将BL2镜像加载到SDRAM上
验证BL2镜像的合法性
跳转到BL2镜像所在的地址上
后续会从编译和代码流程两方面来介绍uboot-spl。
对应文章:
《[uboot] (第二章)uboot流程——uboot-spl编译流程》
《[uboot] (第三章)uboot流程——uboot-spl代码流程》
2、uboot
由uboot编译生成,对应于BL2阶段,也就是BL2的镜像,uboot.bin。
根据《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,其代码运行于SDRAM中.
主要工作有:
初始化部分硬件,包括时钟、内存等等
加载内核到内存上
加载文件系统、atags或者dtb到内存上
根据操作系统启动要求正确配置好一些硬件
启动操作系统
monitor工作,主要是处理命令行的命令,以下是部分操作:
flash操作
环境变量操作
启动操作
后续会从编译、代码整体流程以及部分功能的具体流程来介绍uboot-spl。
对应文章:
《[uboot] (第四章)uboot流程——uboot编译流程》
《[uboot] (第五章)uboot流程——uboot整体代码流程》
文章最后发布于: 2016-10-26 22:30:45
————————————————
版权声明:本文为CSDN博主「ooonebook」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ooonebook/article/details/52939100
在我月子期间,人家在研究u-boot,我虽然晚了一步,但是迟早也能研究明白
[uboot] (第一章)uboot流程——概述(转)的更多相关文章
- 《驾驭Core Data》 第一章 Core Data概述
<驾驭Core Data>系列教程综合了<Core Data for iOS>,<Learning Core Data for iOS>,<Core Data ...
- javaSE习题 第一章 JAVA语言概述
转眼就开学了,正式在学校学习SE部分,由于暑假放视频过了一遍,略感觉轻松,今天开始,博客将会记录我的课本习题,主要以文字和代码的形式展现,一是把SE基础加强一下,二是课本中有很多知识是视频中没有的,做 ...
- 第一章、Django概述
目录 第一章.Django概述 一.了解软件开发架构 二.HTTP协议 三.响应状态码 四.请求方式 五.基于wsgiref模块 六..动静态网页 七.python三大主流web框架 八.安装Djan ...
- 第一章 Windows内核概述
第一章 Windows内核概述 这一章节描述了Windows内核知识中最重要的几个概念,这些话题在这本书之后会有更详细的描述,那些会与当前的主题密切相关.要确保你理解这个章节的概念,因为这些概念构成了 ...
- Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述
第1章 Java程序设计概述1.1 Java程序设计平台 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求. 可移植性 垃圾收集 提供大型的库 如果想要有奇特的绘 ...
- [编程笔记]第一章 C语言概述
//C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...
- Node入门教程(2)第一章:NodeJS 概述
Node 概述 什么是 Node Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- 【第一章】Shell 概述
一.什么是Shell? shell是一个命令解释器,它不仅包含大量的命令以实现操作系统的对话,还可以实现定义变量.条件判断.循环控制.函数调用等功能. 作用:解释执行用户输入的命令及程序等. 从键盘输 ...
- CDA数据分析【第一章:数据分析概述】
一.数据分析行业发展 1.如何收集.保存.管理.分析.共享正在呈指数式增长的数据是我们必须要面对的一个重要挑战. 2.数据分析包括数据采集.数据存储.检查.清洗.分析.转换和建模等方法对数据进行处理的 ...
- 数据库系统实现 第一章 DBMS实现概述
DBMS提供的能力 1)持久存储 DBMS在灵活性方面比文件系统要好,同时支持对非常大量数据的存储 2)编程接口 3)事务管理 DBMS支持对数据的并发存取,即多个不同的进程(称作事物)同时存取操作, ...
随机推荐
- Serializable 和 Parcelable 的区别?
1.在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类.2.Serializable 在序列化的时候会产生大量的临时变量,从而引起频 ...
- GestureDetector手势识别器
package com.loaderman.gesturedetectordemo; import android.os.Bundle; import android.support.v7.app.A ...
- Git中.gitignore忽略文件(maven项目)
使用情景: 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们 解决方案: 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略 ...
- flutter column row布局的列表自适应宽高
mainAxisSize: MainAxisSize.min
- 我们公司的delphi代码(胆不是我写的!),看看,你觉得怎么样
unit unt_LotBill_dyc; interface uses windows, SysUtils, Classes, ComCtrls, Forms, Controls, StrUtils ...
- Toad oracle
CJ2PFCQ6P49Q4WHQT2D03GNTVX2AN5DG6FWD04YL4QW625KT391J9YF38VKB92SNBWNW-RU-BOARD-BD cr2384
- docker 运行mysql最新版本用navicat连接报错:1251
主要是:新版的mysql的加密方式发生了变化,解决方法如下: 1:进入docker容器: docker exec -it mysql(启动mysql时候起的别名) /bin/bash 2:登陆my ...
- windows编程 使用C++实现多线程类
有时候我们想在一个类中实现多线程,主线程在某些时刻获得数据,可以“通知”子线程去处理,然后把结果返回.下面的实例是主线程每隔2s产生10个随机数,将这10随机数传给多线程类,让它接收到数据后马上打印出 ...
- 创建B树,动态添加节点,并使用三种遍历算法对树进行遍历
ks17:algorithm apple$ cat btree_test.c ///********************************************************** ...
- 小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序
maxwell主要提供了下列功能 支持 SELECT * FROM table 的方式进行全量数据初始化 支持在主库发生failover后,自动回复binlog位置(GTID) ...