《手机开机引导.docx》由会员分享,可在线阅读,更多相关《手机开机引导.docx(2页珍藏版)》请在三一办公上搜索。
1、手机开机引导1.6 启动引导 这一部分要谈到的是这几个内容:Bootup的两种方案;BootLoader和BootCode,还有启动顺序以及重映射机制。着重要讲的是BootLoader和BootCode,这两段小代码一起组成了启动引导程序。 要弄清出系统是怎么引导启动的,首先要对地址映射有一个了解。因为系统总是根据指令和数据存放的地址来访问和操作的。 MT6218的寻址寻址空间位宽为32位,以每个存储模块256M的模式来组织寻址的。最大可以支持到4GB空间,目前只定义了MB0MB9,其他的空间为以后的扩展保留。系统的RAM、ROM、寄存器、MCU、外部设备全部映射到这些寻址空间中。首先看看这个
2、MB0,MB的意思就是内存块的意思。MB0就是从最低的地址开始的第一个内存块。其实被映射到这里的还有一个非常重要的东西就是BootCode。ARM系列处理器默认状态下都是RESET之后开始跑到系统最低的地址,就是00000000h这个地方来取指令。同时我们看到其实SystemRom的位置在48000000h这个地方。很明显系统要从SystemRom开始启动的话就必须有一个动态映射。BootCode就和内存重映射机制一块儿被映射到MB0来。 经过这样的分析,我们就很清楚BootCode的作用了,它其实就是系统被Reset之后要执行的第一段小代码,要完成的工作也比较简单,就是引导重映射机制让系统从
3、特定的地方开始执行启动程序。那么,引导到什么地方去呢? 从这里我们可以引出两种Bootup的方式。第一种是系统工厂编程模式,其实每个系统都是从这种模式开始的。刚开始时Flash里是没有手机软件的,打完板之后的第一件事情就是要往里面写软件,就是通常所说的download。这个就要靠BootCode来为这个动作做引导。第二种方式就是普通模式,手机出厂之后交给用户就都是这种模式了,这时系统都被引导到Flash上启动,就是运行其中我们Download的软件。那么这两种模式是怎么确定的呢?系统怎么认定应该朝哪个方向走呢?其实这是通过CPU上的一个引脚来确定的,当IBOOT接地时,就执行第一种启动方式,I
4、BOOT为高电平则从正常方式启动。而这种判断的执行,是通过BootCode这段小代码来指引PC跑到不同地方来执行这两种启动方式。 MT6218系列在默认状态下,当IBOOT接地时,Boot Code 被映射到MB0,但是并不是不可更改的,可以通过编程设置CPU的一个内部寄存器EMI_REMAP的RM1这两位来直接改变这种映射方式。 在这里我们提到了一个重映射的概念,重映射就是把一些设备的存储空间重新映射到同一张内存映射表里来。这个内存重映射的机制有什么来负责呢?靠的就是BootLoader,其实,BootCode的作用这样描述会更加准确,它除了做一些CPU自身的低级初始化之外,就是要定位BootLoader的所在。BootLoader也是要我们要重点阐述的地方。 那么什么是Boot Loader呢?简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。MT6218系列手机中的BootLoader大概是这样一个结构: