Boot Loader之ARM Uboot移植 阶段一 理论篇

1.boot loader需要完成的任务:

              1》设计程序的入口地址

              2》建立异常中断处理向量

              3》初始化CPU各种模式的堆栈和寄存器

              4》初始化系统中要使用的各种片内外设备

              5》初始化目标板

              6》引导操作系统

2.boot loader 的实现流

在stage1中boot loader主要完成5方面的工作,依次为

          1》基本的硬件的初始化

                 屏蔽所有的中断,设置CPU的速度和时钟频率,初始化内存的控制器,初始化串口,关闭CPU内部指令/数据cache

           2》为加载stage2 准备内存空间

                 为了获得更快的运行速度,通常将stage2加载到RAM空间中执行,因此必须为加载boot loader的stage2准备好一段可用的RAM空间范围。由于stage2通常是c语言执行代码,因此在考虑空间大小时,除了要考虑stage2映像的大小,还应该考虑堆栈的大小。

           3》复制stage2到内存空间中

               复制的时候要注意两点 :

                stage2的可执行映像在固态存储设备的存放起始地址和终止地址。

                内存空间的起始地址

4》设置堆栈指针sp

                因为堆栈是向下生长的,通常把sp的值设置为那个1MB的RAM空间的最顶端。

           5》跳转到stage2的入口点

               上述一切都就绪后,就可以跳转到bootloader 的stage2去执行了。

               stage2 是用c代码书写,但是在编译连接的时候不能使用glibc 库的任何支持函数。带来一问题就是从哪里跳转进main函数呢?直接将main()函数的起始地址作为整个stage2执行映像的入口点或许是最直接的方法,但是这样做有两个缺点:
               无法通过main()函数传递函数参数
               无法处理main()函数返回的情况
               另一种方法Trampoline(弹簧床)的概念,即用汇编语言写一段Trampoline 小程序,并将Trampoline程序来作为stage2可执行的映像的执行入口点。然后可以在Trampoline汇编小 程序中用CPU跳转指令跳入main()函数中去执行;而当main()函数返回时,CPU执行路径显然再次回到Trampoline程序。简而言之,这种方法的思想就是:用这段Trampoline程序作为main()函数的外部包裹(external wrapper)

UBoot讲解和实践-----------讲解(一)的更多相关文章

  1. UBoot讲解和实践-------------讲解(二)

    UBoot  ARM移植之阶段二   理论篇 stage2: 1.初始化本阶段要使用的硬件设备: 通常包括两方面: 1)初始化至少一个串口,以便和终端用户进行I/O输出信息.              ...

  2. Android事件总线分发库EventBus3.0的简单讲解与实践

    Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Han ...

  3. LSTM和双向LSTM讲解及实践

    LSTM和双向LSTM讲解及实践 目录 RNN的长期依赖问题LSTM原理讲解双向LSTM原理讲解Keras实现LSTM和双向LSTM 一.RNN的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训 ...

  4. 使用Keras进行深度学习:(七)GRU讲解及实践

    ####欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 GRU(Gated Recurrent Unit) ...

  5. 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memory, ...

  6. 使用Keras进行深度学习:(五)RNN和双向RNN讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 笔者:Ray 介绍 通过对前面文章的学习,对深度神经网络(DNN) ...

  7. Vuex 实践讲解

    state 用来数据共享数据存储 mutation 用来注册改变数据状态 getters 用来对共享数据进行过滤操作 action 解决异步改变共享数据 这个四大特征就是核心,如何用怎么用 接下来还是 ...

  8. MySQL/RDS数据如何同步到MaxCompute之实践讲解

    摘要:大数据计算服务(MaxCompute,原名ODPS)是阿里云提供的一种快速.完全托管的EB级数据仓库解决方案.本文章中阿里云MaxCompute公有云技术支持人员刘力夺通过一个实验向大家介绍了阿 ...

  9. 使用Keras进行深度学习:(二)CNN讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 现今最主流的处理图像数据的技术当属深度神经网络了,尤其是卷积神经网 ...

随机推荐

  1. android xUtils get post

    使用android xUtils框架,进行http的get和post验证. 参考链接: https://github.com/wyouflf/xUtils3 http://blog.csdn.net/ ...

  2. 我的工具箱之Opera浏览器

    下载地址:http://pan.baidu.com/s/1gdVQA11 刚出来时挺火的,后来有点渐趋式微了.

  3. Linux - sort & uniq

    参考:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html sort < InputFile | uniq -c

  4. svn更新项目时遇到被锁住的问题

    来自:http://blog.csdn.net/woshixuye/article/details/7776742 遇到问题 我们用svn更新某个项目的时候,有时候会遇到一些什么文件夹被locked等 ...

  5. OGRFeature的DestroyFeature方法

    Ogr的销毁DestroyFeature方法: void OGRFeature::DestroyFeature( OGRFeature *poFeature ) { delete poFeature; ...

  6. PHP编码规范(转)

    一.文件格式 1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" .这是为了防止多余的空格或者其它字符影响到代码.例如:<?php$foo = ' ...

  7. [转]【android studio】解决layout预览出现Rendering Problems Exception Unable to find the layout for Action Bar.

    在android studio中打开layout文件,发现不能预览布局,提示以下错误: Rendering Problems Exception raised during rendering: Un ...

  8. iOS如何统计渠道

    http://bbs.umeng.com/thread-10-1-1.html https://www.zhihu.com/question/20697933

  9. swiper有时候不能自动滚动的问题

    <script type="text/javascript"> $(function(){ var swiper = new Swiper('.swiper-conta ...

  10. Http错误 404.3-Not Found....或者500.19 Internal Server Error

    解决方法:以管理员身份打开VS2010x64位兼容命令提示:aspnet_regiis -i