BootLoader的stage1

  1.基本的硬件初始化

    这是BootLoader一开始就执行的操作,其目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境。它通    常包括以下步骤

 ①屏蔽所有中断。为中断提供服务通常是OS设备驱动程序的责任,因此在BootLoader的执行全过程中可以不比响应任何中断。中    断屏蔽可以通过写CPU的中断屏蔽寄存器或者状态寄存器(比如ARM的CPSR寄存器)来完成。

②设置CPU的时钟和频率

③RAM初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等

④初始化LED。通过GPIO来驱动LED,其目的是表明系统的状态是OK还是ERROR。如果板子没有LED,那么也可以通过初始化UART向串口打印BootLoader的Logo字符信息来完成这一点。

⑤关闭CPU内部  指令/数据 Cache。

  2.为加载stage2准备RAM空间

通常把stage2加载到RAM空间中来执行,为了获得更快的执行速度。因此必须为加载BootLoader的stage2准备好一段可用的RAM空间。

stage2是C语言执行代码,因此在考虑空间大小时,除了stage2可执行映像的大小外,还必须把堆栈空间也考虑进来。此外,空间大小最好是momery page大小(通常是4KB)的倍数。一般而言,1M的RAM空间就足够了。具体的范围地址可以任意安排,比如blob就将它的stage2可执行映像安排到从系统RAM起始地址0xc0200000开始的1M空间内执行。但是,将stage2安排到整个RAM空间的最顶1MB(RamEnd-1MB  ~  RamEnd  )是一种值得推荐的方法。

    另外,得确保所有安排的地址范围是可读写的RAM空间,因此,必须对你所安排的地址范围进行测试。具体测试方法可以采用类似blob的方法,也即:以memory page 为被测试单位,测试每个memory page 开始的两个字是否可读写。步骤如下:

    ①.先保存memory page一开始的两个字的内容。

    ②.向这两个字中写入任意的数字。比如第一个字写0x55第二个字写入0xaa

    ③.然后立即将这两个字读回。如果读到的内容不是0x55和0xaa,说明这个memory page 所占据的地址范围不是一段有效的RAM

    ④.再向这两个字中写入任意数字,比如0xaa和0x55

    ⑤.读取这两个字,如果不是0xaa和0x55那么说明这个memory page 所占据的地址空间不是一段有效的RAM。

    ⑥.恢复这两个字的内容,测试完毕。

  3.拷贝stage2到RAM中

    确定2点:①.stage2的可执行映像在固态设备存放的起始地址和终止地址

         ②.RAM空间的起始地址

  4.设置堆栈指针sp

  堆栈指针的设置是为了执行C语言代码做好准备。通常可以把sp的值设置为( stage2_end - 4 ),也就是第二节所安排的那个1MB的RAM空间的最顶端(堆栈向下生长)。经过这些步骤后,系统的物理内存布局如下:

    5.经过上述的步骤后,就跳转到stage2去执行了

    

BootLoader 详解(2)的更多相关文章

  1. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  2. BootLoader 详解(1)

    1. Boot Loader的概念 BootLoader就是在操作系统内核运行前之前运行的一段小程序.通过这段小程序,可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件带到一个合适的状态,以便 ...

  3. BootLoader 详解(3)

    BootLoader的stage2 stage2的代码是C语言来实现的,以便于实现更复杂的功能和取得更好的代码可读性和移植性.它与普通C语言程序不同的是,在编译和链接BootLoader这样的程序时, ...

  4. CFE Bootloader详解 — 引导过程

    CFE命令 CFE引导过程 系统加电后,CFE从boot.S (src/shared/boot.S)开始执行,完成判断芯片类型.设置时钟.初始化缓存.把自身加载进RAM等任务后,跳转到c_main() ...

  5. 【转载】 硬盘主引导记录(MBR)及其结构详解

    硬盘的0柱面.0磁头.1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR).该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统 ...

  6. uboot mkimage使用详解

    mkimage使用详解uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来的可执行映象文件的 ...

  7. 引用 mkimage使用详解

    引用 鱼 的 mkimage使用详解  uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件. mkimage在制作映象文件的时候,是在原来 ...

  8. Android的init过程详解(一)

    Android的init过程详解(一) Android的init过程(二):初始化语言(init.rc)解析 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几 ...

  9. 黑苹果引导工具 Clover 配置详解及Clover Configurator使用

    黑苹果引导工具 Clover 配置详解及Clover Configurator使用  2017-03-11 14:01:40 by SemiconductorKING 转自:@三个表哥   简介: 可 ...

随机推荐

  1. java.util.NoSuchElementException解决办法

    报错代码 public void switchToNewWindow(){ //得到当前句柄 String currentWindow = driver.getWindowHandle(); //得到 ...

  2. @SuppressWarnings有什么用处?

    J2SE 提供的最后一个批注是 @SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. @SuppressWarnings 批注允许您选择 ...

  3. php微信接口实例

    <?php /** * wechat php test */ //define your token //定义TOKEN秘钥 define("TOKEN", "we ...

  4. Openstack Neutron DVR workflow

    目前在Juno版本的trunk中已经合入了DVR相关的代码,我的理解是在Juno版本中DVR是一个experimental feature.最好需要稳定一个版本以后再上生产环境.之前写过一篇博文是DV ...

  5. Tcpdump非常实用的抓包12实例

    1.过滤主机---------------------------------------------------------------- - 抓取所有经过 eth1,目的或源地址是 192.168 ...

  6. ADF_Starting系列7_使用EJB/JPA/JSF通过ADF构建Web应用程序之创建UI View

    2013-05-01 Created By BaoXinjian

  7. vim(5)vim下wimrc的配置,解决中文乱码问题

    解决linux下vim乱码的情况:(修改vimrc的内容) 全局的情况下:即所有用户都能用这个配置 文件地址:/etc/vimrc 在文件中添加: ,ucs-bom,gb18030,gbk,gb231 ...

  8. 使用chrome联调不在同一个域的请求

    做前端的,用Ajax获取数据,是常有的事情,同域下自然没问题了,如果是不同域获取数据,浏览器就有个同源策略的限制. Origin * is not allowed by Access-Control- ...

  9. XE6移动开发环境搭建之IOS篇(8):在Mac OSX 10.8中安装XE6的PAServer(有图有真相)

    网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 安装PAServer ...

  10. 37. Binary Tree Zigzag Level Order Traversal && Binary Tree Inorder Traversal

    Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...