过了挺长一断时间没有看U-BOOT了,这两天下载了新版的UBOOT源码(之前看的一些书都是基于早好多年的源码来讲述,总感觉心里有点不对劲,也许是我比较喜新的原因吧,不过小弟我并没有厌旧哈),好了不多扯了,开始来写写随笔,看到好多大牛们都喜欢发技术博文来当做日记,那我就把这当作周记吧!

uboot其实也不能看得太简单了,MCU刚开始启动时一般是由芯片厂商在MCU内部集成了一个IROM,里面的代码是用来对MCU的第一步初始化,比如配置PLL,建立起一个合适环境,然后从外部存储区EMMC,SD,LAND-FLASH这类设备当中复制当中头部第一个block开始的一小部分代码[一般有4K,8K,16K不等,不同系列的MCU,MPU大小有些区别]到MCU内部当中的IRAM内,然后跳转到IRAM当中运行,此时IROM里的代码的功能完成了,把控制权转交给IRAM当中的代码[也就是刚才从外部存储区复制过来的UBOOT代码]来执行,接下来是由此时IRAM中的程序来建立合适的环境,比如初始化栈空间,建立起一个适合C程序运行的环境,再初始化外部RAM控制器,把外部存储区的整个UBOOT代码加载到RAM当中。也许大家会问,为何不能一次性把UBOOT加载RAM当中呢,下面来谈谈原因吧。

刚开始MCU启动时通常是不能访问外部RAM的,因为此时的RAM控制器还没有被我们的UBOOT初始化,而且内部的IROM代码也没有对其做初始化,这也意味着我们此时也还没有可写的DATA区及BSS区,并且BSS区也还没有被IROM代码初始化为0.为了能获取一个完整的C语言工作环境,我们必须分配一个最小的栈空间,而这些工作也是IROM里的代码来完成的。接下来IROM代码再从外部存储区复制代码到IRAM中运行,选择启动方式的选项由MCU,MPU,CPU厂商来提供(如从SD卡,LAND-FLASH,EMMC等),这里得说下[并不是所有的MCU,MPU,CPU都是从外部存储区复制代码到IRAM中,有些是复制到内部的Cache当中,把Cache当作临时的RAM使用,当使用Dcache作为栈的初始化RAM时,我们不需要任何的物理RAM来备份缓存中的数据,这个方法的灵活之处在于缓存被用做一个临时支持必要的存储器(在SDRAM控制器启动之前)]。UBOOT的起始初始化代码的初始化过程中我们也得明确以下几点:

1.初始化的全局数据是只读的,不能改写。

2.不能使用任何的未初始化的全局变量,因为它们还没有被定义,它们的初始化是在重定位到RAM里面之后完成的。

3.在此期间,栈空间是相当有限的,因此避免大数据buffers的存放。

刚开始我们只有栈空间作为有限的可写存储区,也就是说我们此时还不能使用常规的全局数据在代码断之间进行共享,但这也造就了我们在执行UBOOT时可以很方便的建立全局数据结构体给所有的函数,同时我们可以传递一个指向全局数据区的指针给函数,作为函数的参数,但这无疑又增大了代码的体积,所以我们采用另一种方式,用寄存器变量来达到共享数据的功能:我们放置一个指向全局数据区的指针到一个我们预留的一个寄存器当中(在ARM中使用R9寄存器)。

浅谈2015新版 U-Boot的更多相关文章

  1. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  2. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  3. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  4. 浅谈DES加密算法

    一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...

  5. 浅谈Python时间模块

    浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...

  6. 浅谈iOS中MVVM的架构设计与团队协作

    说到架构设计和团队协作,这个对App的开发还是比较重要的.即使作为一个专业的搬砖者,前提是你这砖搬完放在哪?不只是Code有框架,其他的东西都是有框架的,比如桥梁等等神马的~在这儿就不往外扯了.一个好 ...

  7. [C#]6.0新特性浅谈

    原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来 ...

  8. 浅谈MacOS-20155205郝博雅

    预备作业3:安装虚拟机 我的电脑是MacBook Air,因此按照娄老师说的,不需要安装Linix系统便能完成之后的学习.所以我就浅谈一下用MacOS系统的感受. 优点:人性化&便捷 与同系列 ...

  9. 浅谈测试rhel7新功能时的感受及遇到的问题【转载】

    半夜起来看世界杯,没啥激情,但是又怕错误意大利和英格兰的比赛,就看了rhel7 相关新功能的介绍. rhel7的下载地址: https://access.redhat.com/site/downloa ...

随机推荐

  1. css class嵌套

    css 代码: <style> .chose_bonus { font-size:9px;width:400px;border: 2px solid #dddddd;margin-top: ...

  2. Deep Learning 30: 卷积理解

    一.深度卷积神经网络学习笔记(一): 1. 这篇文章以贾清扬的ppt说明了卷积的实质,更说明了卷积输出图像大小应该为: 假设输入图像尺寸为W,卷积核尺寸为F,步幅(stride)为S(卷积核移动的步幅 ...

  3. YTU 2573: 连续奇数和

    2573: 连续奇数和 时间限制: 1 Sec  内存限制: 128 MB 提交: 63  解决: 37 题目描述 小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和. 比如: 2^3 = ...

  4. YTU 2902: H-Sum 3s

    2902: H-Sum 3s 时间限制: 1 Sec  内存限制: 128 MB 提交: 139  解决: 28 题目描述 You are given a number sequence a1,a2, ...

  5. oracle中的sys用户(修改密码)/////Oracle删除表空间的同时删除数据文件 ///// Oracle中如何保证用户只有一个session登录

    oracle中的sys用户(修改密码) (2011-07-01 09:18:11) 转载▼ 标签: it 分类: oracle 概念: SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用 ...

  6. hibernate 的缓存机制

    这是面试中经常问到的一个问题,楼主可以按照我的思路回答,准你回答得很完美,首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具 ...

  7. Mybatis拦截器(插件实现原理)

    在mybatis的mybatis.cfg.xml中插入: <plugins> <plugin interceptor="cn.sxt.util.PageIntercepto ...

  8. BZOJ_5368_[Pkusc2018]真实排名_组合数

    BZOJ_5368_[Pkusc2018]真实排名_组合数 Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他 ...

  9. 利用http_load测试Web引擎性能

    http_load是基于linux平台的性能测试工具,它体积非常小,仅100KB.它以并行复用的方式运行,可以测试web服务器的吞吐量与负载. 一.获得http_load httpd_load的官方站 ...

  10. J20170524-hm

    取りこぼし 意外地输给较自己实力弱的对手,爆出冷门,败给手下败将 振り分け 分配,整理 スキーマ 图解.模式.图式