ARM的内部启动与外部启动

本文详细介绍了ARM处理器的内部启动和外部启动过程。内部启动时,系统会加载内部存储区1的数据到内部存储区0;而外部启动则将外部存储器的数据映射到内部存储区0。文中还解释了BOOTROM的作用及不同启动方式的具体步骤。

          ARM有内部启动和外部启动之分,究竟何为内部何为外部有必要做个说明,这也是熟悉ARM运作的基础。下文以我目前所使用的Atmel公司AT91SAM9260系列ARM9单板机为例。         

          ARM启动时会产生复位异常,程序计数器指向异常向量地址0x0000_0000,即启动时首先运行的是位于地址0x0000_0000处的指令。因此,从0x0000_0000到0x0010_0000的1M的内部存储区域(内部存储区0)在上电后将决定系统的启动过程。若BMS(Boot Mode Select)=1,则系统将内部存储区1(0x0010_0000--0x0010_8000)的数据映射到内部存储区0,即从内部启动;若BMS=0,则将外部存储器的区域0映射到内部存储区0,实现外部启动。

         ARM芯片的生产厂商一般都会在芯片内部集成BOOTROM,里面固话了一段用于内部启动的代码,该段代码完成的功能是:设备初始化,设定PMC得到主震荡器的频率,分频得到PLLB输出至USB的48MHz时钟频率,为各种ARM模式建立堆栈,设定中断控制器,初始化C变量。跳到Main执行;完成这部分初始化后就要检测片外非易失存储器内是否有有效的可执行代码,检测顺序为SPI DataFlash,TWI EEPROM,EBI并行存储器,有效的可执行代码指的是外部存储器的起始32字节必须是ARM异常向量入口,有效的了执行代码总是从片外的存储器0地址下载到片内的SRAM,在地址重新映射后下载代码为片内0x0000_0000处。当要运行更为复杂的功能时候,可能需要二级bootloader,这时候SRAM中运行的可执行代码还要有搬运功能,将在norflash或者NandFlash中的二级引导代码搬移到SDRAM中运行,该部分二级bootloader运行后又将嵌入式操作系统的代码搬移到SDRAM中,将控制权交给操作系统,这样整个内部启动完毕。

       外部启动过程相对简单,但是需要自行编写整个启动过程的代码,代码量要大一些。外部启动一般将bootloader代码放在容量小相对昂贵但是可以片内执行代码(XIP)的Norflash中,操作系统和应用程序以及数据放在低价大容量的NandFlash中。系统上电后将在norflash中运行bootloader,bootloader一般为功能较为全面的UBOOT,EBOOT,REDBOOT等,完成系统硬件初始化和堆栈分配的任务,同时搬移操作系统内核代码到SDRAM某一地址,最后跳转到该地址将指挥权交给操作系统内核,内核运行后挂在在NandFlash中的文件系统,整个外部启动过程完毕。

本文所述的ARM的指的是CortexA系列以及ARM9,ARM11,跑Linux操作系统。对于CortexM系列并不一定完全适用;   谈到ARM以及启动和烧写等方面,首先我们要明确一下几个关键词:Uboot,Cmdline,启动方式选择,文件系统格式,存储介质,如NAND,EMMC,SD卡等   下面一个一个做相关介绍:   启动方式:   ①一般CPU都可以配置为从多种介质启动,比如SPINorFlash,NAND,EMMC,SD卡,U盘等 ②大致原理是CPU内部ROM有一段固化的启动代码,根据CPU配置引脚,判断启动位置,然后从外部介质读取数据启动 ③一般启动介质的前一部分代码的作用必须是:初始化硬件参数,自身拷贝 ④关于自拷贝:因为CPU内部RAM很小,因此只能读取一部分启动介质的数据即Uboot到内部RAM运行,所以Uboot前一部分的工作需要将自身剩余部分拷贝到外部RAM中,然后加载运行   Uboot:   ①主要作用:引导Linux系统(主要是从存储介质的哪个地方读取Kernel,传递什么样的启动参数) ②其他功能:支持很多命令,主要是存储控制和网络命令,最终目的还是引导和升级系统用 ③常用操作:TFTP,NAS,Flash操作,UBI操作,Setenv,boot等 ④一般升级系统流程:使用tftp方式从主机下载kernel及文件系统等文件,然后使用flash等命令烧写到存储介质如NAND,最后设定启动参数,然后引导系统启动; ⑤一般调试流程,介绍2种: -使用NAS从主机直接加载文件系统,直接在线调试,快捷方便 -设定从SD卡启动,从SD卡加载kernel和文件系统调试
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值