嵌入式系统教学课件:35arm处理器初始化分析.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统教学课件:35arm处理器初始化分析.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 教学 课件 35 arm 处理器 初始化 分析
- 资源描述:
-
1、 BOOTLOADERv现在计算机系统多采用“挥发性”的半导体存储器作为内存,系统加电后主存内没有内容,需要非挥发性存储存储器启动时的代码;vPC系统中的启动流程:BIOS(EPROM)执行启动流程从硬盘0扇区读取采用操作系统引导程序由操作系统引导程序完成整个操作系统的加载 BOOTLOADERv嵌入式系统采用EEPROM或FLASH等介质存储操作系统映像。是内存的一部分,操作系统映像也可以在EEPROM或FLASH中就地运行。但是,实际上大多数嵌入式系统还是采用了引导/装入程序,而不让可执行映像在EEPROM或FLASH中就地执行:首先是效率方面的考虑。操作系统的多样性;有利于嵌入式系统的调
2、试;BOOTLOADERv简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。vBoot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。一、什么是bootloader(引导加载程序)Bootloader,为
3、引导加载程序,为引导加载程序,是嵌入,是嵌入式系统加电后运行的第一段代码,相当于式系统加电后运行的第一段代码,相当于PC机的机的BIOS。Bootloader的位置:的位置:通常固化在硬件上通常固化在硬件上的某个固态存储设备上,加电后自启动。的某个固态存储设备上,加电后自启动。Bootloader Boot parametersKernel Root filesystem 应用程序应用程序实时操作系统(实时操作系统(RTOSRTOS)输入输出接口输入输出接口处理器处理器/ARM/ARM核核MMU/CacheMMU/CacheSOC/SOPCSOC/SOPCUSBUSBGPIOGPIOIISII
4、SLCDLCDUARTUART和和IrDAIrDAADC/DACADC/DACFPGA/CPLDFPGA/CPLDDSP/DSP/浮点运算协处理器浮点运算协处理器DMADMA电源管理电源管理人机交互接口人机交互接口LCD/LCD/触摸屏、键盘、鼠标触摸屏、键盘、鼠标设备驱动程序、设备驱动程序、HALHAL、BSPBSP文件系统文件系统/图形用户应用程序接口图形用户应用程序接口驱动层驱动层OSOS层层应用层应用层软件软件硬件硬件以太网以太网看门狗及看门狗及复位电路复位电路Timer/RTCTimer/RTCCANCANFlashFlashEEPROMEEPROMSDRAMSDRAMSRAMSRA
5、M内内存存典型的嵌入式系统组成典型的嵌入式系统组成Bootloader在系统中的位置BootLoader的主要功能v初始化硬件设备初始化硬件设备v建立内存空间的映射图,将部分映像和操作系统装入建立内存空间的映射图,将部分映像和操作系统装入RAMRAM,再转入这部分映像,此后就在,再转入这部分映像,此后就在RAMRAM中执行了。从而中执行了。从而将系统的软硬件环境带到一个合适的状态,以便为最终将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统的内核准备好正确的环境。调用操作系统的内核准备好正确的环境。v系统加电或复位后,所有的系统加电或复位后,所有的CPUCPU通常都从某个由通常都从某
6、个由CPUCPU制造制造商预先安排的地址上取指令。商预先安排的地址上取指令。v比如,基于比如,基于 XScaleXScale core core 的的 CPU CPU 在复位时通常都从地在复位时通常都从地址址 0 x00000000 0 x00000000 取它的第一条指令。而基于取它的第一条指令。而基于 CPU CPU 构建构建的嵌入式系统通常都有某种类型的固态存储设备的嵌入式系统通常都有某种类型的固态存储设备(如:如:PROMPROM、EEPROM EEPROM 或或 FLASH FLASH 等等)被映射到这个预先安排的被映射到这个预先安排的地址上。因此在系统加电后,地址上。因此在系统加电
7、后,CPUCPU将首先执行将首先执行Boot Boot LoaderLoader程序。程序。通常的硬件初始化工作:n 关闭处理器内部指令/数据cache等n 关闭中断n 关闭看门狗n 配置PLLn 配置内存n 初始化各工作模式的堆栈n 配置中断n 拷贝RW段,初始化ZI段BootloaderBootloader的地址:的地址:在嵌入式系统中,在嵌入式系统中,系统加电系统加电复位后,几乎所有的复位后,几乎所有的 CPUCPU都从由复位地址上取指令。都从由复位地址上取指令。比如,基于比如,基于 ARMARM处理器核的处理器核的CPUCPU在复位时通常都从地在复位时通常都从地址址 0 x000000
8、000 x00000000取它的第一条指令。取它的第一条指令。在这个地址处安在这个地址处安排的就是排的就是BootloaderBootloader。backbackBootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。几种发布的BootloaderBootloaderMonitor描描 述述X86ARMPowerPCLILO否否Linux磁盘引导程序磁盘引导程序是是否否否否GRUB否否GNU的的LILO替代程序替代程序是是否否否否Lo
9、adlin否否从从DOS引导引导Linux是是否否否否ROLO否否从从ROM引导引导Linux而不需而不需要要BIOS是是否否否否Etherboot否否通过以太网卡启动通过以太网卡启动Linux系统的固件系统的固件是是否否否否LinuxBIOS否否完全替代完全替代BUIS的的Linux引引导程序导程序是是否否否否BLOB否否LART等硬件平台的引导等硬件平台的引导程序程序否否是是否否U-Boot是是通用引导程序通用引导程序是是是是是是RedBoot基于基于eCos的引导程序的引导程序1、vivivivi是韩国是韩国Mizi公司开发的公司开发的Bootloader,适用于,适用于ARM9处理器。
10、处理器。2、RedBoot RedBoot即红帽即红帽(Red Hat)嵌入嵌入式调试引导程序,是一种用于嵌入式系统的独式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导立开放源代码引导/装载器。装载器。3、U-Boot U-Boot(Universal Bootloader)由德国由德国DENX小组开发,是一款目前功能较为小组开发,是一款目前功能较为强大的开源强大的开源Bootloader程序,它支持多种处程序,它支持多种处理器平台,包括理器平台,包括ARM、PowerPC、MIPS等。等。backbackBootloader操作模式 大多数大多数Bootloader都有两种不同的操作
11、都有两种不同的操作模式:模式:“启动加载启动加载”模式和模式和“下载下载”模式。模式。其区别对于开发人员其区别对于开发人员才有意义。才有意义。从最终用户的角度从最终用户的角度看,看,Bootloader的作的作用就是用来加载操作用就是用来加载操作系统,而并不存在所系统,而并不存在所谓的启动加载模式与谓的启动加载模式与下载模式的区别。下载模式的区别。loadermemorybitsflashbits1、启动加载(Bootloading)模式启动加载模式称为启动加载模式称为“自举自举”(Autonomous)模式。即)模式。即Bootloader从目标机上的某个固态存从目标机上的某个固态存储设备上
12、将操作系统加载到储设备上将操作系统加载到 RAM 中运中运行,整个过程并没有用户的介入。行,整个过程并没有用户的介入。启动加载模式是启动加载模式是 Bootloader的正常的正常工作模式,在嵌入式产品发布的时侯,工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。必须工作在这种模式下。2、下载(Downloading)模式下载方式:下载方式:在这种模式下,目标机上在这种模式下,目标机上的的Bootloader将通过串口连接或网络连将通过串口连接或网络连接等通信手段从主机下载文件。接等通信手段从主机下载文件。下载内容及存储:下载内容及存储:主要是下载内核映主要是下载内核
13、映像和根文件系统映像等。从主机下载的像和根文件系统映像等。从主机下载的文件通常首先被文件通常首先被Bootloader保存到目标保存到目标机的机的RAM中,然后再被中,然后再被 Bootloader写写到目标机上的到目标机上的FLASH 类固态存储设备中。类固态存储设备中。下载模式应用场合:下载模式应用场合:Bootloader的这的这种模式通常在第一次安装内核与根文件种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新系统时被使用;此外,以后的系统更新也会使用到这种工作模式。也会使用到这种工作模式。用户应用接口:用户应用接口:工作于这种模式下的工作于这种模式下的Bootloa
14、der通常都会向它的终端用户提通常都会向它的终端用户提供一个简单的命令行接口。供一个简单的命令行接口。如在如在RedBoot下,将出现下,将出现“RedBoot”提示提示符;在符;在vivi Bootloader 下出现下出现“vivi”提示符。提示符。下载(Downloading)模式示例RedBoot的的Bootloader像像RedBoot或或U-Boot等功能强大的等功能强大的Bootloader通常都可同时支持这两种工作通常都可同时支持这两种工作模式,而且允许用户在这两种工作模式之间模式,而且允许用户在这两种工作模式之间进行切换。进行切换。比如,比如,RedBoot在启动时处于正常的
15、启在启动时处于正常的启动加载模式,但是它会延时动加载模式,但是它会延时3秒等待终端用秒等待终端用户按下任意键而将户按下任意键而将RedBoot切换到下载模式。切换到下载模式。如在等待时间内没有接收到用户按键,则继如在等待时间内没有接收到用户按键,则继续启动续启动 Linux 内核。内核。backbackBootloader启动过程Bootloader的启动可以分为两个阶段的启动可以分为两个阶段1、第一阶段、第一阶段阶段阶段1主要包含依赖于主要包含依赖于CPU体系结构及硬体系结构及硬件设备的初始化等。通常都用汇编语言来实件设备的初始化等。通常都用汇编语言来实现。这个阶段的任务有现。这个阶段的任务
16、有5:(1)、基本的硬件设备初始化、基本的硬件设备初始化这是这是 Bootloader 一开始就执行的操作,一开始就执行的操作,其目的是为阶段其目的是为阶段2 的执行、以及随后的执行、以及随后kernel 的执行准备好一些基本的硬件环境。的执行准备好一些基本的硬件环境。它通常包括以下工作:它通常包括以下工作:关闭处理器内部指令关闭处理器内部指令/数据数据cache等等 关闭中断关闭中断 关闭看门狗关闭看门狗 配置配置PLL 配置内存配置内存 初始化各工作模式的堆栈初始化各工作模式的堆栈 配置中断配置中断 拷贝拷贝RW段,初始化段,初始化ZI段段ARM7ARM7引导程序示例引导程序示例(2)、为
17、阶段、为阶段2代码准备代码准备RAM空间空间为了获得更快的执行速度,通常把为了获得更快的执行速度,通常把 阶段阶段2 的代码加载到的代码加载到 RAM 空间中来执行。空间中来执行。准备准备RAM空间考虑的因素:阶段空间考虑的因素:阶段2代码代码大小、堆栈、页大小(大小、堆栈、页大小(4KB的倍数)、安排的倍数)、安排位置等。位置等。(3)、拷贝阶段、拷贝阶段2代码到代码到RAM空间空间(4)、设置好堆栈、设置好堆栈堆栈指针堆栈指针sp设置在设置在1MB 的的 RAM 空间的空间的最顶端最顶端(堆栈向下生长堆栈向下生长)。(5)、跳转到阶段、跳转到阶段2的的C程序入口点程序入口点在上述一切都就绪
18、后,就可以跳转到在上述一切都就绪后,就可以跳转到 Bootloader 的的 stage2 去执行了。去执行了。stage2_start.stage1为stage2可执行映像准备的RAM地址范围,大小:1MBramdisk.(blank)内核映像.(blank)stage2可执行映像可能的最大大小:1MBstage1可执行映像大小:1MBRAM地址空间Flash地址空间堆栈指针sp:stage_end-40 x0001,0000(64KB)0 x0000,0400(1KB)0 x0000,0000.(blank)Bootloader的的stage2可执行映像可执行映像刚被拷贝到刚被拷贝到RAM
19、空空间时的系统内存布间时的系统内存布局局2、第二阶段、第二阶段阶段阶段2通常用通常用C语言来实现,以便语言来实现,以便实现更复杂的功能,也使程序有更好实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的主的可读性和可移植性。这个阶段的主要任务有要任务有5:(1)、初始化本阶段要使用到的硬、初始化本阶段要使用到的硬件件至少初始化一个串口,以便和终端至少初始化一个串口,以便和终端用户进行用户进行 I/O 输出信息等。输出信息等。(2)、检测系统内存映射、检测系统内存映射(memory map)所谓内存映射,就是指在整个物理所谓内存映射,就是指在整个物理地址空间中有哪些地址范围被分配用来地
20、址空间中有哪些地址范围被分配用来作为系统的作为系统的 RAM 单元。为后面使用单元。为后面使用RAM、运行程序做好准备。、运行程序做好准备。(3)、将、将kernel和根文件系统映像从和根文件系统映像从flash读到读到RAM空间空间(4)、为、为kernel设置启动参数设置启动参数这是在调用内核之前应该做的准备工作。这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后的内核都期望以标记列表以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。的形式来传递启动参数。启动参数标记列表方法:以启动参数标记列表方法:以ATAG_CORE标记开始,以标记开始,以ATAG
21、_NONE标记结束。标记结束。在嵌入式在嵌入式 Linux 系统中,通常需要由系统中,通常需要由 Boot Loader 设置的启动参数有:设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映(内存映射)、射)、ATAG_NONE等。等。(5)、调用内核、调用内核Bootloader调用调用Linux kernel的方法是的方法是直接跳转到内核的第一条指令处。在跳转时直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:必须满足下列条件:1)、CPU寄存器的设置:寄存器的设置:R0为为0;R1为为机器类型机器类型ID;R2为启动参数,标记列表在为启动参数,标记列表在RAM中的起始基
22、地址。中的起始基地址。(机器类型参见机器类型参见 linux/arch/arm/tools/mach-types目录目录)2)、CPU模式:模式:CPU必须设置为必须设置为SVC模模式,必须禁止中断式,必须禁止中断(IRQs和和FIQs)。3)、MMU 和和 Cache的设置:的设置:MMU 必须必须关闭;指令关闭;指令 Cache 可以打开也可以关闭;可以打开也可以关闭;数据数据 Cache 必须关闭。必须关闭。backback.2 U-Boot工程简介 最早,最早,DENXDENX软件工程中心的软件工程中心的Wolfgang Wolfgang DenkDenk基于基于8xxrom8xxro
23、m的源码创建了的源码创建了PPCBOOTPPCBOOT工程,工程,并且不断添加处理器的支持。后来,并且不断添加处理器的支持。后来,Sysgo Sysgo GmbhGmbh把把PPCBOOTPPCBOOT移植到移植到ARMARM平台上,创建了平台上,创建了ARMBOOTARMBOOT工程。然后以工程。然后以PPCBOOTPPCBOOT工程和工程和ARMBOOTARMBOOT工程为基础,创建了工程为基础,创建了U-BootU-Boot工程。工程。现在,现在,U-BootU-Boot已经能够支持已经能够支持PowerPCPowerPC、ARMARM、X86X86、MIPSMIPS体系结构的上百种开发
24、板,已经成体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开为功能最多、灵活性最强并且开发最积极的开放源码放源码BootloaderBootloader。目前仍然由。目前仍然由DENXDENX的的Wolfgang DenkWolfgang Denk维护。维护。u-boot系统启动流程系统启动流程v大多数大多数bootloader都分为都分为stage1和和stage2两大部分,两大部分,u-boot也不例外。依赖于也不例外。依赖于CPU体系结构的代码体系结构的代码(如设备初始化代码等如设备初始化代码等)通常通常都放在都放在stage1且可以用汇编语言来实现,且可以用汇编语言
25、来实现,而而stage2则通常用则通常用C语言来实现,这样可语言来实现,这样可以实现复杂的功能,而且有更好的可读性以实现复杂的功能,而且有更好的可读性和移植性。和移植性。stage1(start.s代码结构代码结构)vu-boot的的stage1代码通常放在代码通常放在start.s文件中,文件中,它用汇编语言写成,其主要代码部分如下:它用汇编语言写成,其主要代码部分如下:v(1)定义入口定义入口。由于一个可执行的。由于一个可执行的IMage必须必须有一个入口点,并且只能有一个全局入口,有一个入口点,并且只能有一个全局入口,通常这个入口放在通常这个入口放在ROM(flash)的的0 x0地址,
展开阅读全文