嵌入式系统教学课件:35arm处理器初始化分析.ppt
《嵌入式系统教学课件:35arm处理器初始化分析.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统教学课件:35arm处理器初始化分析.ppt(86页珍藏版)》请在三一办公上搜索。
1、BOOTLOADER,现在计算机系统多采用“挥发性”的半导体存储器作为内存,系统加电后主存内没有内容,需要非挥发性存储存储器启动时的代码;PC系统中的启动流程:BIOS(EPROM)执行启动流程从硬盘0扇区读取采用操作系统引导程序由操作系统引导程序完成整个操作系统的加载,BOOTLOADER,嵌入式系统采用EEPROM或FLASH等介质存储操作系统映像。是内存的一部分,操作系统映像也可以在EEPROM或FLASH中就地运行。但是,实际上大多数嵌入式系统还是采用了引导/装入程序,而不让可执行映像在EEPROM或FLASH中就地执行:首先是效率方面的考虑。操作系统的多样性;有利于嵌入式系统的调试;
2、,BOOTLOADER,简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。,一、什么是bootloader(引导加载程序)Bootloader,为
3、引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。 Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。,典型的嵌入式系统组成,Bootloader在系统中的位置,BootLoader的主要功能,初始化硬件设备建立内存空间的映射图,将部分映像和操作系统装入RAM,再转入这部分映像,此后就在RAM中执行了。从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统的内核准备好正确的环境。系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于 XScale core 的 CPU 在复位时通常都从地址 0
4、x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(如:PROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行Boot Loader程序。,通常的硬件初始化工作: 关闭处理器内部指令/数据cache等 关闭中断 关闭看门狗 配置PLL 配置内存 初始化各工作模式的堆栈 配置中断 拷贝RW段,初始化ZI段,Bootloader的地址:在嵌入式系统中,系统加电复位后,几乎所有的 CPU都从由复位地址上取指令。比如,基于 ARM处理器核的CPU在复位时通常都从地址 0 x00000000取它的第一
5、条指令。在这个地址处安排的就是Bootloader。,back,Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。,几种发布的Bootloader,表7-1开放源码的Linux引导程序,1、vivivivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。2、RedBoot RedBoot即红帽(Red Hat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器。3、U-Boot U-Boot(
6、Universal Bootloader)由德国DENX小组开发,是一款目前功能较为强大的开源Bootloader程序,它支持多种处理器平台,包括ARM、PowerPC、MIPS等。,back,Bootloader操作模式,大多数Bootloader都有两种不同的操作模式:“启动加载”模式和“下载”模式。其区别对于开发人员才有意义。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。,1、启动加载(Bootloading)模式启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将
7、操作系统加载到 RAM 中运行,整个过程并没有用户的介入。启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。,2、下载(Downloading)模式下载方式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中。,下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统
8、时被使用;此外,以后的系统更新也会使用到这种工作模式。用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。 如在RedBoot下,将出现“RedBoot”提示符;在vivi Bootloader 下出现“vivi”提示符。,下载(Downloading)模式示例,RedBoot的Bootloader像RedBoot或U-Boot等功能强大的Bootloader通常都可同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,RedBoot在启动时处于正常的启动加载模式,但是它会延时3秒等待终端用户按下任意键而将RedBoot切换到下
9、载模式。如在等待时间内没有接收到用户按键,则继续启动 Linux 内核。,back,Bootloader启动过程,Bootloader的启动可以分为两个阶段1、第一阶段阶段1主要包含依赖于CPU体系结构及硬件设备的初始化等。通常都用汇编语言来实现。这个阶段的任务有5:(1)、基本的硬件设备初始化这是 Bootloader 一开始就执行的操作,其目的是为阶段2 的执行、以及随后kernel 的执行准备好一些基本的硬件环境。,它通常包括以下工作: 关闭处理器内部指令/数据cache等 关闭中断 关闭看门狗 配置PLL 配置内存 初始化各工作模式的堆栈 配置中断 拷贝RW段,初始化ZI段,ARM7引
10、导程序示例,(2)、为阶段2代码准备RAM空间为了获得更快的执行速度,通常把 阶段2 的代码加载到 RAM 空间中来执行。 准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。 (3)、拷贝阶段2代码到RAM空间(4)、设置好堆栈堆栈指针sp设置在1MB 的 RAM 空间的最顶端(堆栈向下生长)。(5)、跳转到阶段2的C程序入口点在上述一切都就绪后,就可以跳转到 Bootloader 的 stage2 去执行了。,Bootloader的stage2可执行映像刚被拷贝到RAM空间时的系统内存布局,2、第二阶段阶段2通常用C语言来实现,以便实现更复杂的功能,也使程序
11、有更好的可读性和可移植性。这个阶段的主要任务有5:(1)、初始化本阶段要使用到的硬件至少初始化一个串口,以便和终端用户进行 I/O 输出信息等。,(2)、检测系统内存映射(memory map)所谓内存映射,就是指在整个物理地址空间中有哪些地址范围被分配用来作为系统的 RAM 单元。为后面使用RAM、运行程序做好准备。(3)、将kernel和根文件系统映像从flash读到RAM空间,(4)、为kernel设置启动参数这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表方法:以ATAG_CORE标记
12、开始,以ATAG_NONE标记结束。在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映射)、ATAG_NONE等。,(5)、调用内核Bootloader调用Linux kernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。 (机器类型参见 linux/arch/arm/tools/mach-types目录)2)、CPU模式: CPU必须设置为SVC模式,必须禁止中断(IRQs和FIQs)。3)
13、、 MMU 和 Cache的设置:MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭。,back,.2 U-Boot工程简介,最早,DENX软件工程中心的Wolfgang Denk基于8xxrom的源码创建了PPCBOOT工程,并且不断添加处理器的支持。后来,Sysgo Gmbh把PPCBOOT移植到ARM平台上,创建了ARMBOOT工程。然后以PPCBOOT工程和ARMBOOT工程为基础,创建了U-Boot工程。,现在,U-Boot已经能够支持PowerPC、ARM、X86、MIPS体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开放源码
14、Bootloader。目前仍然由DENX的Wolfgang Denk维护。,u-boot系统启动流程,大多数bootloader都分为stage1和stage2两大部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。,stage1 (start.s代码结构),u-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:(1) 定义入口 。由于一个可执行的IMage必须有一个入口点,并且只能有一个全局入
15、口,通常这个入口放在ROM(flash)的0 x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。,(2)设置异常向量(Exception Vector)。(3)设置CPU的速度、时钟频率及中断控制寄存器。(4)初始化内存控制器 。(5)将ROM中的程序复制到RAM中。(6)初始化堆栈 。(7)转到RAM中执行,该工作可使用指令Ldr PC来完成。,2.2 stage2C语言代码部分,Lib ARM/board.c中的start armboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数主要完成
16、如下操作:(1)调用一系列的初始化函数。(2)初始化Flash设备。,(3)初始化系统内存分配函数。(4)如果目标系统拥有NAND设备,则初始化NAND设备。(5)如果目标系统有显示设备,则初始化该类设备。(6)初始化相关网络设备,填写IP、MAC地址等。(7)进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。,.3 U-Boot编译,解压U-Boot-1.3.1.tar.bz2就可以得到全部U-Boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。 (1)与处理器体系结构或者开发板硬件直接相关。 (2)一些通用的函数或者驱动程序。 (3
17、)U-Boot的应用程序、工具或者文件。,表7-2U-Boot的源码顶层目录说明,与移植相关的主要文件夹,(1)CPU它的每个子文件夹里都有如下文件:makefileconfig.mkcpu.c 和处理器相关的代码interrupts.c 中断处理代码serial.c 串口初始化代码start.s 全局开始启动代码,与移植相关的主要文件夹,(2)BOARD它的每个子文件夹里都有如下文件:makefileconfig.mksmdk2410.c 和板子相关的代码(以smdk2410为例)flash.c flash操作代码memSetup.s 初始化SDRAM代码u-boot.lds 对应的连接文件
18、,与移植相关的主要文件夹,(3)lib_ARM体系结构下的相关实现代码,比如memcpy等的汇编语言的优化实现。,1顶层目录下的Makefile2开发板配置头文件3编译结果,支持ARM- 920T内核的代码修改,由于U-Boot-2.1.1 提供对ARM-920T 内核的直接支持,所以本步骤不需要做任何工作,本文为了让读者了解BootLoder 移植的通用模式,在此只是稍加提示。,配置自己的开发板,建立自己开发板的目录和相关文件。 1) 在include/ configs目录中以smdk2410.h为模板添加头文件S3C2410. h(cp smdk2410.h S3C2410.h) 。 这个
19、文件是开发板的配置文件,它包括开发板的CPU、系统时钟、RAM、Flash系统及其它相关的配置信息。 2) 在board/目录下创建S3C2410目录。拷贝smdk2410目录下所有文件到S3C2410目录下,共有如下六个文件:flash.c、memsetup.c、S3C2410.c、Makefile、U-Boot .lds 和config.mk,根据开发板实际情况对各个文件进行修改。,Flash.c,U-Boot读、写和删除Flash 设备的源代码文件。由于不同开发板中Flash 存储器的种类各不相同,所以,修改flash.c时需参考相应的Flash 芯片手册。它包括如下几个函数: unsi
20、gned long flash-init (void ),Flash初始化; int flash-erase (flash-info-t *info,ints-first,ints -last),Flash擦除; volatile static int write- hword (flash-info-t *info,ulong dest , ulong data) ,Flash 写入; int write-buff (flash-info-t *info,uchar *src ,ulong addr,ulong cnt),从内存复制数据。,memsetup.c,初始化时钟、SMC控制器和SD
21、RAM控制器。为了以后能用U-Boot的GO命令执行修改过的用loadb或tftp下载的U-Boot.在标记符“0:”上加入五句: mov r3,pc ldr r4,= 0 x3FFF0000 and r3,r3,r4 / /以上三句得到实际启动的内存地址 add r0,r0,r3 / /用GO 命令调试uboot时,启动地址在RAM add r2,r2,r3 / /把初始化内存信息的地址,加上实际起动地址,S3C2410.C,设置各种总线时钟,打开数据Cache和指令Cache,并设置相关内存参数。,Makefile,修改:OBJS := S3C2410.o flash.o memsetup
22、.o,U-Boot.lds.作如下修改: .text cpu/ arm920t/ start.o ( .text) * (.text) ,config.mk,用于设置程序连接的起始地址,如果想在U-Boot 中增加功能,可以留下6M 的空间,修改33F80000 为33A00000。,修改顶层Makefile,回到u-boot-2.1.1目录 rootlocalhost u-boot-2.1.1#gedit Makefilesmdk2410_config : unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0在后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 教学 课件 35 arm 处理器 初始化 分析
链接地址:https://www.31ppt.com/p-1340649.html