Intel PXA255处理器的U-B00t启动过程、移植分析及下载调试.doc
《Intel PXA255处理器的U-B00t启动过程、移植分析及下载调试.doc》由会员分享,可在线阅读,更多相关《Intel PXA255处理器的U-B00t启动过程、移植分析及下载调试.doc(8页珍藏版)》请在三一文库上搜索。
1、Intel PXA255处理器的U-B00t启动过程、移植分析及下载调试引 言Bootloader是操作系统运行之前执行的一小段程序,用来初始化硬件设备,建立一个系统空间映射图和一个适当的系统软硬件环境。最终Bootloader把操作系统内核映像加载到RAM中。并将系统控制权交给内核。BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此
2、整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。U-Boot被认为是功能最多,最具弹性以及开发最积极的开放源码Bootloader。U-Boot已经能够支持PowerPC,ARM,X86和MIPS体系结构的上百种开发板,U-Boot还具有通过TFTP,从IDE或SCSI磁盘以及DOc启动的能力,还提供了JFFS2的只读功能。正是由于U-Boot较高的可靠性和稳定性;高度灵活的功能设置;丰富的设备驱动程序和丰富
3、的开发和调试文档,因此选择U-Boot作为目标板的Boot-loader。对于嵌入式系统,Bootloader是基于特定的硬件来实现的,因此建立一个通用的。Bootloader是不可能的,要使Bootloader能在目标板上运行,必须做出相应的修改。1、目标板目标板采用Intel PXA255处理器,频率最高可达400 MHz,配置了32 MB的FLASH(Intel StrataFLASH)和64MB的SDRAM(Samsung),网卡采用LAN91C96。SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器,RAM(随机存取存储器
4、)RAM -random access memory 随机存储器。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系(如磁带)。同步是指 Memory工作需
5、要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.(显卡上的DDR已经发展到DDR5) 板上有JTAG口、串口和网口,可分别完成程序的下载和调试工作。目标板的主要硬件资源如图1所示。2 U-Boot启动过程分析充分理解代码的启动流程,对于准确地判断出移植过程中出错的原因和出错的位置具有重要的作用。2.1 U-Boot启动的入口点一个
6、可执行的Image必须有一个入口点,并且只能有一个全局入口。可执行Image的入口一般通过链接脚本文件来实现,脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。本通常可以由应用程序临时调用并执行。各类脚本被广泛地应用于网页设计中,因为脚本不仅可以减小网页的规模和提高网页浏览速度,而且可以丰富网页的表现,如动画、声音等。链接脚本主要用于规定如何把文件内的section放入输出映像文件内,并
7、控制输出文件内各个部分在程序地址空间内的分布。以U-Boot支持的开发板1ubbock为例,查看链接脚本boardlubbocku-boot.lds,就可以知道各个部分的链接顺序。这个连接脚本决定了U-Boot的第一阶段的代码是从0xO开始的,入口由_start符号指定(ENTRY(_start),第一个链接的文件是cuppxastart.o,那么U-Boot的入口指令一定位于这个程序中。2.2 U-Boot的启动步骤UBoot的启动一般分为stagel和stage2两个部分。依赖于CPU体系结构的代码,通常用汇编语言实现,放在stagel;而stage2则通常用C语言来实现,这样可以实现复杂
8、的功能,而且有更好的可读性和移植性。根据对链接脚本文件和源代码的分析,U-Boot的启动过程中函数调用的顺序如图2所示。2.2.1 stagel部分UBoot的stagel代码从人口函数start.S开始,它用汇编语言写成,主要完成的工作为:设置异常向量;设置CPu的速度、时钟频率及中断控制寄存器;初始化内存控制器;将ROM中的程序复制到RAM中;初始化堆栈;转到RAM中执行。RAM(随机存取存储器)RAM -random access memory 随机存储器。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时
9、间使用的程序。 按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。stage1代码执行完以后,就为stage2的运行建立起了基本的硬件环境,此时的U-Boot的存储器SDRAM映射图如图3所示。2.2.2 stage2部分接下来进入到U-Boot stage2,即C语言代码部分,入口是start_arml300t,位于lib_armboard.c中。startarmboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个U-Boot的主函数,该函数主要完成的操作为:初始化本阶段要使用到的硬
10、件设备;检测系统内存映射;将内核映像和根文件系统映像从FLASH拷贝到SDRAM中;为内核设置启动参数;调用内核。在stage2部分,首先初始化全局数据表;然后顺序执行函数指针数组init_sequence中的初始化函数;接下来调用FLAsH_init()函数初始化CFI FLAsH(针对NOR FLASH);接着调用env_relocate()函数初始化环境变量;然后获取目标板的网络地址,包括IP地址和MAC地址;接着调用commendconsole.c中定义的函数console_init_r()初始化串口控制台;最后进入main_loop循环,以接收用户命令。3 U-Boot的移植3.1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Intel PXA255处理器的U-B00t启动过程、移植分析及下载调试 PXA255 处理器 B00t 启动 过程 移植 分析 下载 调试
链接地址:https://www.31doc.com/p-3253010.html