过了挺长一断时间没有看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. BZOJ1016 && JSOI2008] 最小生成树计数

    题目链接:id=1016">点击打开链接 裸题 #pragma comment(linker, "/STACK:1024000000,1024000000") #i ...

  2. USING REFLECTION

    In this section, you take a closer look at the System.Type class, which enables you to access inform ...

  3. 使用linux内核hrtimer高精度定时器实现GPIO口模拟PWM,【原创】

    关键词:Android  linux hrtimer 蜂鸣器  等待队列 信号量 字符设备 平台信息:内核:linux3.4.39 系统:android/android5.1平台:S5P4418  作 ...

  4. Center OS Tomcat7 服务器配置总结

    tomcat7 目录结构 --- webapps 应用存放目录,可以配置Host 来决定这个文件的目录,可以配置多个Host,多个webapps ---ROOT 项目根目录,Tomcat会特殊对待这个 ...

  5. 【140】◀▶ ArcGIS技巧

    目录: Add XY Data 图例修改 中文字符左斜体设置 专题图只显示“度” 制作渐变图例 待定 待定 待定 1. 在ArcGIS中插入含有经纬度的*.txt或者*.xls文件等 File> ...

  6. Mysql 告警 :Establishing SSL connection without server's identity verification is not recommended.

    在集成spring与mybatis是,在spring.xml中配置了DataSource配置,数据库连接采用的是mysql的链接字符串: jdbc:mysql://localhost:3306/wor ...

  7. 学习Python到写poc其实没那么难

    现在,开始! 0x00 前言 今天刚刚把http://drops.wooyun.org/tips/12751放到收藏夹准备看的,然后又看到题主的这个问题.顺便观摩了1楼大神的博客,我这种炒鸡新手表示很 ...

  8. 转载:4412环境搭建:arm-linux-gcc: 没有那个文件或目录

    4412环境搭建:arm-linux-gcc: 没有那个文件或目录 2014年10月15日 ⁄ 环境搭建 ⁄ 共 993字 ⁄ 字号 小 中 大 ⁄ 评论 11 条 ⁄ 阅读 6,125 次 最近弄了 ...

  9. ElasticSearch | centos7 上安装ES

    0 参考博客文章(感谢!!!) [1]  https://www.jianshu.com/p/10949f44ce9c 在linux服务器上安装jdk [2]  https://www.elastic ...

  10. Hdu 5371 Hotaru's problem (manacher+枚举)

    题目链接: Hdu 5371 Hotaru's problem 题目描述: 给出一个字符串N,要求找出一条N的最长连续子串.这个子串要满足:1:可以平均分成三段,2:第一段和第三段相等,3:第一段和第 ...