闭上眼睛,细致的回顾一下从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)的更多相关文章

  1. 转:Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法

    转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...

  2. Tomcat启动过程中找不到JAVA_HOME解决方法

    在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...

  3. Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程

    1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...

  4. Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法

    转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...

  5. hive配置以及在启动过程中出现的问题

    一.hive配置 1.安装环境 在hadoop-1.2.1集群上安装hive-1.2.1 2.将hive-1.2.1环境变量添加到PATH路径下 使用如下命令打开配置文件 nano /etc/prof ...

  6. 嵌入式Linux启动过程中的问题积累

    嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Num ...

  7. spring mvc 启动过程及源码分析

    由于公司开源框架选用的spring+spring mvc + mybatis.使用这些框架,网上都有现成的案例:需要那些配置文件.每种类型的配置文件的节点该如何书写等等.如果只是需要项目能够跑起来,只 ...

  8. Android启动过程中背景图片显示

    转自:http://blog.csdn.net/zhangzhikaixinya/article/details/17001321 大部分Android App启动过程中,都会设置一个背景图片,直到A ...

  9. Linux系统在启动过程中mbr主引导程序被破坏的解决方案

    首先,mbr主引导程序被破坏是指系统在启动过程中,磁头找不到/boot分区(windows的启动分区在c盘). 1)下面我们模拟主引导分区被破坏的情况:(在启动分区划分446M的存储大小) 2)重启( ...

随机推荐

  1. 【原创】poj ----- 2376 Cleaning Shifts 解题报告

    题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K ...

  2. 一个简单的带缓存http代理

    眼下1.0版模型非常easy.即对客户机发来的请求进行简单处理后,转发到server.转发之前先检查本地缓存.假设有.则直接回送给客户本地资源 程序流程大致例如以下图: 缓存是通过把文件保存到磁盘上, ...

  3. HDU 4828 (卡特兰数+逆)

    HDU 4828 Grids 思路:能够转化为卡特兰数,先把前n个人标为0.后n个人标为1.然后去全排列,全排列的数列.假设每一个1的前面相应的0大于等于1,那么就是满足的序列,假设把0看成入栈,1看 ...

  4. COM模块三---根的形成和注册代理server(Building and Registering a Proxy DLL)

    Prerequisite:C++ 程序员,熟windows计划,熟Win32 Dll,了解windows注册表. 笔者:割者 上一篇文章中,我们定义了COM接口.通过编译生成了四个文件,本文使用这四个 ...

  5. NET WEB

    .NET WEB程序员需要掌握的技能 2015-12-28 08:50 by 敏捷的水, 3997 阅读, 66 评论, 收藏, 编辑 本来这个是我给我们公司入职的新人做一个参考,由于 @张善友 老师 ...

  6. WebCollector 2.x 新手教程

    WebCollector爬虫官网:https://github.com/CrawlScript/WebCollector 技术讨论群:250108697 WebCollector 2.x教程列表 We ...

  7. nuget 命令详解

    包相关 Install-Package 安装包   -Version 4.3.1 参数指定版本Uninstall-Package 卸载包Update-Package 更新包Get-Package 默认 ...

  8. 顺序表----java实现

    最简单的数据结构--顺序表,此处以数组为例. 顺序表的优点:支持随机读取,内存空间利用率高. 顺序表的缺点:1.需要预先给出最大数据元素个数,这往往很难实现. 2.插入和删除时需要移动大量数据. Se ...

  9. 【转】linux建立软链接

    实例:ln -s /home/gamestat    /gamestat linux下的软链接类似于windows下的快捷方式 ln -s a b 中的 a 就是源文件,b是链接文件名,其作用是当进入 ...

  10. 大约cocos2d-X 3.x使用引擎版本自带的物理引擎Physics

    今天打算用BOX2D物理引擎, 我想我以前听说过一些时间cocos2d-X在3.0版本封装自己的物理引擎Physics, 听名字很霸气量, 这的确是一个比BOX2D非常多( 毕竟是基于BOX2D封装的 ...