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. Silverlight4-安装顺序(VS2010)

    1.vs2010 2. Silverlight4_Tools 3.Silverlight_Developer 4.Microsoft Expression Blend Preview for Silv ...

  2. Hubilder用git插件安装使用

    打开Hbuilder,工具->插件安装(git分布式版本管理插件) 打开https://www.github.com,注册.登录.创建仓库 在Hbuilder中新建项目→然后右键→Team→共享 ...

  3. github Mac端的使用案例

    1. 本地有一个仓库,是和网页版的github连接在一起的,平时用Terminal来控制的,怎么放在github的客户端呢? 解决办法: 1.1 点击左上角的+ 号,在弹出框中选择Add,然后choo ...

  4. 如何将数据库中的表导成XML文件

    1.现将数据库中的信息读到DataTable中 2.用函数将DataTable转为string private string ConvertDataTableToXML(DataTable dt) { ...

  5. POI对Excel

    完美兼容excel2003 和excel2007的读取,处理了所有excel所有的类型,依赖包如下: poi-3.10-FNAL.jar poi-ooxml-3.10-FNAL.jar poi-oox ...

  6. DelayQueue

    1.结构 使用的是PriorityQueue来作为底层的存储 元素需要实现Delayed接口,该接口继承了comparable接口 DelayQueue的队头元素是根据comparable排在队首的元 ...

  7. ionic build android 报错分析

  8. Android --MainActivity模板

    系统自带的NavigationDrawerFragment 1.自动生成NavigationDrawerFragment,onCreatView代码如下 @Override public View o ...

  9. glusterFS安装维护文档

    .规划: .依赖包 yum install libibverbs librdmacm xfsprogs nfs-utils rpcbind libaio liblvm2app lvm2-devel l ...

  10. Git 使用的配置 常用命令

    老文一篇 搬过来 1. git的部分配置 # 全局提交用户名与邮箱 git config --global user.name "simon" git config --globa ...