过了挺长一断时间没有看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. 记一次部署java项目的问题

    项目里面有自动化任务, tomcat 错误信息 Table 'xxx.QRTZ_TRIGGERS' doesn't exist 提示在mysql中找不到这个表. 但mysql中确实存在,但名字是:qr ...

  2. 【IOI 1996】 Network of Schools

    [题目链接] 点击打开链接 [算法] 对于第一问,将这个图缩点,输出出度为零的点的个数 对于第二问,同样将这个图缩点,输出入度为零.出度为零的点的个数的最大值 [代码] #include <al ...

  3. tcp/ip网络通讯安全加密方法

    tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等.但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的 ...

  4. 虚拟机安装hadoop

    1.用VMware建立两台虚拟机(Centos6.5)系统,并设立主机名为node1与node2 2.设置虚拟机网络两台都是设置为如图: 3.修改两台虚拟机的/etc/hosts的文件为 (其中192 ...

  5. zoj3955:Saddle Point(想法题)

    传送门 题意 给出n*m的矩阵,询问所有子矩阵中鞍点的个数 鞍点定义:在行唯一最小,在列唯一最大 分析 我们遍历每个点,计算该点对于答案的贡献即可. 每个点的贡献为\((2^{numa[i][j]}) ...

  6. 51nod 1120 机器人走方格 V3 【卡特兰数+卢卡斯定理+组合数】

    -我并不知道为什么事卡特兰数,反正用dp打的表就是卡特兰数,因为是两个三角所以再乘个2 卡特兰数使用\( h(n)=\frac{C_{2n}^{n}}{n+1} \)因为范围比较大所以组合数部分用卢卡 ...

  7. Mac怎么刷新DNS缓存

    OS X Mavericks.Mountain Lion 和 Lion 请使用以下“终端”命令来还原 DNS 缓存设置: sudo killall -HUP mDNSResponder

  8. ssh 公钥登录远程主机 并禁止密码登录

    https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-centos7 如果在新的机器上,得先用密码登录一 ...

  9. bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【LCT】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 第一道LCT,调了3天,发现是智障bug,我的青春... 主要参考了黄学长的代码,也没 ...

  10. [ZPG TEST 115] 种树【差分约束】

    4. 种树 (trees.pas/c/cpp) [问题描述] 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号为1..n.每个块的大小为一个单位尺寸并最多可种一 ...