Bootloader架构介绍

2019-04-15 14:44发布

一、arm处理器启动流程 参考出处http://m.blog.csdn.net/blog/weicao1990/38150183: 1、S3C2440 支持从norflash和nandflash启动。 Nandflash不参与统一编址,CPU总是从编址的0地址处取指令执行,为了实现从nandflash启动,S3C2440芯片从在CPU启动的时候,首先将nandflash前面4kB的内容复制到芯片中的叫做stepping stone的sram中,steppping stone只有4KB大小,4KB的代码会完成一些硬件初始化的工作,并且将nandflash中剩余部分的代码复制到SDRAM中去,这部分代码包括bootload的剩余代码或者还有内核代码,并在内存中执行。S3C2440内存是从0x30000000地址开始的,也就是BANK6. 2、S3C6410 启动方式:norflash启动(但6410开发板并没有norflash)、oneNAND启动、MODEM启动、IROM(Internal ROM)启动(包括SD卡启动和NANDFLASH启动)。在0地址处是一个映射区域,当从IROM启动的时候,IROM的内容会映射到这一区域,CPU从这里开始取映射到此处的指令。 地址布局: InternalROM从0x08000000-0x0BFFFFFF、stepping stone从0x0C000000-0x0FFFFFFF、内存从0x50000000开始。 启动流程:选择从IROM启动,开发板上电之后,IROM被映射到0地址处,CPU取IROM中第一条指令。在IROM中有芯片厂商固化好的软件BL0,BL0会进行一些硬件的初始化,还会将放在nandflash中的BL1(8K)拷贝到stepping stone运行,BL1会将NANDFLASH中剩余的BL2拷贝到SDRAM中运行,从而完成整个bootload的运行。 3、S5PV210 启动方式:I-ROM启动,其中包括SD卡启动、NANDFLASH启动、USB启动、串口启动。 地址分布: IROM从0xD0000000-0xD000FFFF的64KB的空间 IRAM(steppingstone)0xD0020000-0xD0037FFF的96KB空间。 0地址处采用映射模式,通过跳线选择映射设备。 内存从0x2000000-0x3FFFFFFF,512MB内存空间。 启动流程:处理器上电之后,IROM会被映射到0地址处,CPU从IROM中取第一条指令。固化在IROM中的BL0会进行硬件的初始化工作,之后BL0会将NANDFLASH中BL1拷贝InternalRAM(垫脚石,96KB),之后BL1拷贝剩余的BL2到垫脚石中。BL1和BL2都有最大空间容量,BL1最大不超过16KB,BL2最大不超过80KB,一般BL1只会进行代码复制工作,16KB空间足够,如果BL2超过了80KB,可以将超过80KB的部分拷贝到内存中。 二、bootloader启动流程 1、程序入口          链接器脚本分析(uboot.lds):从start.s中_start开始启动 2、第一阶段程序分析          2.1核心初始化          在核心初始化中首先设置异常向量表,在板子上电之后首先进入reset中断,跳转之后设置处理器工作模式,然后关闭看门狗,关闭所有中断,关闭mmu以保证核心初始化顺利进行,最后外设基地址初始化、设置堆、清除bss以搭建C语言编程环境。 2.2其他初始化 由于各种初始化太多,且笔者初学,不宜归类之后影响读者,故取名为其他初始化,在其他初始化中依次包含系统时钟初始化、简单的nandflash初始化、然后把nandflash中的代码复制到内存中,进入下一阶段程序。 3、第二阶段程序分析          从start.s中ldr pc, =main进去C语言本阶段主要进行mmu、中断、串口、网卡、LCD等外设初始化,可按照经典uboot代码修改之后移植。   后续文章将在裸机平台上详细分析各种初始化。