u_boot启动过程中的具体分析(1)
闭上眼睛,细致的回顾一下从NAND FLASH 启动的整个流程,首先,当我们打开板子的时候,先执行的就是嵌入在芯片上的iROM,它的作用就是为了把。NAND Flash 中的bootloader的一部分代码复制到芯片上面的sRAM中,之后,程序在sRAM中执行,它的主要任务就是初始化我们的内存。时钟,以及存储设备,当然更重要的就是从存储设备NAND
Flash上拷贝剩下的bootloader到我们的内存的相关位置,之后,执行接下来的bootloader程序,载入执行我们的OS,以及挂在根文件系统,详细的流程见下图:
那么在载入我们的OS之前程序到底做了哪些事情呢?
接下来,就具体的叙述一下,u-boot第一阶段的启动过程:
(1)设置异常向量表:表中存放的是一些跳转指令,能够跳转到相关的异常处理函数。
(2)设置ARM的核位SVC(管理模式)。禁止IRQ,FIQ异常的产生。
(3)关闭cache ,MMU。关闭cache是由于此时我们用cpu所调用的过程中cache还没有存储相关的有效内容。
所以要关闭它,而MMU内存管理单元。是把虚拟的地址映射为实际的物理地址,当然这是在载入OS之后才能完毕的事情。
(4)关闭看门狗。
我们都知道看门狗的作用。此时就是为了防止系统自己主动的复位所以才关闭的。
(5)设置向量中断控制器:
1 禁止全部的中断。
2 设置全部的中断类型为IRQ.
3 清除公共向量地址寄存器。
(6)初始化UART的GPIO口。为了之后串口的正常使用,所以初始化串口是必须的。
(7)初始化系统的时钟。这里面须要注意的是。系统时钟必须在载入操作系统之前给初始化了,若在载入OS之后才初始化。此时easy导致内存的不稳定,当然后果极为可能就是系统over了。
(8)初始化DDR内存控制器,为之后要把引导载入程序载入到内存做好铺垫。
(9)推断u_boot是否已经在内存中执行。该步是为了防止,之前已经把bootloader载入到了内存中而设置的。
若已经存在,怎直接设置栈,反之。搬移u-boot到内存地址。
(10) 设置栈。
记住。栈是从上往下压的。
(11)清除.bss段,.bss段中本来存放的是未初始化的全局变量,以及未初始化的静态变量,所以刚開始的时候
在NAND Flash中是未知的,所以在拷贝bootloader到内存的时候。我们并没有把.bss段给复制到内存中去,而是在拷贝过去之后,我们一步步的把.bss段给清0了。
(12)设置PC到内存中的对应位置。也就是把第一阶段bootloader的大小给偏移过去的第二阶段的bootloader的地方,去运行接下来的操作。
当中我们须要注意的是,我们经常从NAND Flash启动,可是u-boot默认的经常是从NOR Flash启动,这样就须要我们自己手动的将NAND Flash启动的代码加入进去。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
u_boot启动过程中的具体分析(1)的更多相关文章
- 转:Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法
转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...
- Tomcat启动过程中找不到JAVA_HOME解决方法
在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...
- Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法
转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...
- hive配置以及在启动过程中出现的问题
一.hive配置 1.安装环境 在hadoop-1.2.1集群上安装hive-1.2.1 2.将hive-1.2.1环境变量添加到PATH路径下 使用如下命令打开配置文件 nano /etc/prof ...
- 嵌入式Linux启动过程中的问题积累
嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Num ...
- spring mvc 启动过程及源码分析
由于公司开源框架选用的spring+spring mvc + mybatis.使用这些框架,网上都有现成的案例:需要那些配置文件.每种类型的配置文件的节点该如何书写等等.如果只是需要项目能够跑起来,只 ...
- Android启动过程中背景图片显示
转自:http://blog.csdn.net/zhangzhikaixinya/article/details/17001321 大部分Android App启动过程中,都会设置一个背景图片,直到A ...
- Linux系统在启动过程中mbr主引导程序被破坏的解决方案
首先,mbr主引导程序被破坏是指系统在启动过程中,磁头找不到/boot分区(windows的启动分区在c盘). 1)下面我们模拟主引导分区被破坏的情况:(在启动分区划分446M的存储大小) 2)重启( ...
随机推荐
- Android学习笔记四十Preference使用
Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...
- 初识google多语言通信框架gRPC系列(一)概述
gRPC概述 3/26/2016 9:16:08 AM 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 一直在寻找多平台多语言的通信框架,微软的WCF框架很强大和灵 ...
- Windows 8 应用开发 - 挂起与恢复
原文:Windows 8 应用开发 - 挂起与恢复 Windows 8 应用通常涉及到两种数据类型:应用数据与会话数据.在上一篇提到的本地数据存储就是应用层面的数据,包括应用参数设置.用户重 ...
- hdu 1429 胜利大逃亡(延续)(BFS+比特压缩)
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...
- 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理
Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- Android开发经验—不要指望类finalize干活的方法做你想要什么
之所以专门写了一篇文章finalize方法博客,这是通过在坑的方法引起的.一个读写jni当数据类.我在课堂上finalize该方法被调用来关闭文件和释放内存的方法.频繁调用这个类的时候在JNI里面报异 ...
- Uncaught TypeError: Cannot read property 'call' of undefined jquery.validate.min.js:28
最近在做表单验证时,,自己写的addMethod 方法总是不起作用.折腾了将近一天. 报告的错误,如下面的 Uncaught TypeError: Cannot read property 'call ...
- 电脑知识--Windows一片
.com档 Dos可执行命令文件,一般小于64kb, .com文件包括程序的一个绝对映像.就是说,为了执行程序准确的处理器指令和内存中的数据.Ms-Dos通过直接把该映像从文件复制到内存. 而 载入. ...
- 第十三章——表和索引分区(1)——使用Range Left进行表分区
原文:第十三章--表和索引分区(1)--使用Range Left进行表分区 前言: 如果数据表的数据持续增长,并且表中的数据量已经达到数十亿甚至更多,数据的查询和操作将非常困难,面对非常庞大的表,几时 ...