嵌入式系统教学课件:35arm处理器初始化分析.ppt

上传人(卖家):晟晟文业 文档编号:4465607 上传时间:2022-12-11 格式:PPT 页数:86 大小:1.11MB
下载 相关 举报
嵌入式系统教学课件:35arm处理器初始化分析.ppt_第1页
第1页 / 共86页
嵌入式系统教学课件:35arm处理器初始化分析.ppt_第2页
第2页 / 共86页
嵌入式系统教学课件:35arm处理器初始化分析.ppt_第3页
第3页 / 共86页
嵌入式系统教学课件:35arm处理器初始化分析.ppt_第4页
第4页 / 共86页
嵌入式系统教学课件:35arm处理器初始化分析.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

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地址,

26、地址,因此,必须通知编译器以使其知道这个入口,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。该工作可通过修改连接器脚本来完成。(2)设置异常向量设置异常向量(Exception Vector)。(3)设置设置CPU的速度、时钟频率及中断控制寄存的速度、时钟频率及中断控制寄存器。器。(4)初始化内存控制器初始化内存控制器。(5)将将ROM中的程序复制到中的程序复制到RAM中。中。(6)初始化堆栈初始化堆栈。(7)转到转到RAM中执行,该工作可使用指令中执行,该工作可使用指令Ldr PC来完成。来完成。2.2 stage2C语言代码部分语言代码部分 Lib ARM/bo

27、ard.c中的中的start armboot是是C语言语言开始的函数,也是整个启动代码中开始的函数,也是整个启动代码中C语言的语言的主函数,同时还是整个主函数,同时还是整个u-boot(armboot)的的主函数,该函数主要完成如下操作:主函数,该函数主要完成如下操作:(1)调用一系列的初始化函数。调用一系列的初始化函数。(2)初始化初始化Flash设备。设备。(3)初始化系统内存分配函数。初始化系统内存分配函数。(4)如果目标系统拥有如果目标系统拥有NAND设备,则初始化设备,则初始化NAND设备。设备。(5)如果目标系统有显示设备,则初始化该类设如果目标系统有显示设备,则初始化该类设备。备

28、。(6)初始化相关网络设备,填写初始化相关网络设备,填写IP、MAC地址等。地址等。(7)进入命令循环进入命令循环(即整个即整个boot的工作循环的工作循环),接,接受用户从串口输入的命令,然后进行相应的受用户从串口输入的命令,然后进行相应的工作。工作。.3 U-.3 U-BootBoot编译编译 解压解压U-Boot-1.3.1.tar.bz2U-Boot-1.3.1.tar.bz2就可以得到就可以得到全部全部U-BootU-Boot源程序。在顶层目录下有源程序。在顶层目录下有1818个子个子目录,分别存放和管理不同的源程序。目录,分别存放和管理不同的源程序。(1 1)与处理器体系结构或者开

29、发板硬件)与处理器体系结构或者开发板硬件直接相关。直接相关。(2 2)一些通用的函数或者驱动程序。)一些通用的函数或者驱动程序。(3 3)U-BootU-Boot的应用程序、工具或者文件。的应用程序、工具或者文件。目目 录录特特 性性解解 释释 说说 明明board平台依赖平台依赖存放电路板相关的目录文件,如存放电路板相关的目录文件,如RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86)等目录等目录cpu平台依赖平台依赖存放存放CPU相关的目录文件,如相关的目录文件,如mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386

30、等目录等目录lib_ppc平台依赖平台依赖存放对存放对PowerPC体系结构通用的文件,主要用于实现体系结构通用的文件,主要用于实现PowerPC平台通用的函数平台通用的函数lib_arm平台依赖平台依赖存放对存放对ARM体系结构通用的文件,主要用于实现体系结构通用的文件,主要用于实现ARM平台通用的函数平台通用的函数lib_i386平台依赖平台依赖存放对存放对X86体系结构通用的文件,主要用于实现体系结构通用的文件,主要用于实现X86平台通用的函数平台通用的函数include通用通用头文件和开发板配置文件,所有开发板的配置文件都在头文件和开发板配置文件,所有开发板的配置文件都在configs

31、目录下目录下common通用通用通用的多功能函数实现通用的多功能函数实现lib_generic通用通用通用库函数的实现通用库函数的实现Net通用通用存放网络的程序存放网络的程序Fs通用通用存放文件系统的程序存放文件系统的程序Post通用通用存放上电自检程序存放上电自检程序drivers通用通用通用的设备驱动程序,主要有以太网接口的驱动通用的设备驱动程序,主要有以太网接口的驱动Disk通用通用硬盘接口程序硬盘接口程序Rtc通用通用RTC的驱动程序的驱动程序Dtt通用通用数字温度测量器或者传感器的驱动数字温度测量器或者传感器的驱动examples应用例程应用例程一些独立运行的应用程序的例子,如一些

32、独立运行的应用程序的例子,如helloworldtools工具工具存放制作存放制作S-Record或者或者U-Boot格式的镜像等工具,如格式的镜像等工具,如mkimageDoc文档文档开发使用文档开发使用文档与移植相关的主要文件夹与移植相关的主要文件夹(1)CPU它的每个子文件夹里都有如下文件:它的每个子文件夹里都有如下文件:vmakefilevconfig.mkvcpu.c 和处理器相关的代码和处理器相关的代码vinterrupts.c 中断处理代码中断处理代码vserial.c 串口初始化代码串口初始化代码vstart.s 全局开始启动代码全局开始启动代码与移植相关的主要文件夹与移植相关

33、的主要文件夹(2)BOARD它的每个子文件夹里都有如下文它的每个子文件夹里都有如下文件:件:vmakefilevconfig.mkvsmdk2410.c 和板子相关的代码和板子相关的代码(以以smdk2410为例为例)vflash.c flash操作代码操作代码vmemSetup.s 初始化初始化SDRAM代码代码vu-boot.lds 对应的连接文件对应的连接文件与移植相关的主要文件夹与移植相关的主要文件夹(3)lib_ARM体系结构下的相关实现代码,比体系结构下的相关实现代码,比如如memcpy等的汇编语言的优化实现。等的汇编语言的优化实现。1 1顶层目录下的顶层目录下的MakefileM

34、akefile2 2开发板配置头文件开发板配置头文件3 3编译结果编译结果支持支持ARM-920T内核的代码修改内核的代码修改 v由于U-Boot-2.1.1 提供对ARM-920T 内核的直接支持,所以本步骤不需要做任何工作,本文为了让读者了解BootLoder 移植的通用模式,在此只是稍加提示。配置自己的开发板配置自己的开发板 v建立自己开发板的目录和相关文件建立自己开发板的目录和相关文件。1)在include/configs目录中以smdk2410.h为模板添加头文件S3C2410.h(cp smdk2410.h S3C2410.h)。这个文件是开发板的配置文件,它包括开发板的CPU、系

35、统时钟、RAM、Flash系统及其它相关的配置信息。2)在board/目录下创建S3C2410目录。拷贝smdk2410目录下所有文件到S3C2410目录下,共有如下六个文件:flash.c、memsetup.c、S3C2410.c、Makefile、U-Boot.lds 和config.mk,根据开发板实际情况对各个文件进行修改。Flash.cvU-Boot读、写和删除Flash 设备的源代码文件。v由于不同开发板中Flash 存储器的种类各不相同,所以,修改flash.c时需参考相应的Flash 芯片手册。它包括如下几个函数:unsigned long flash-init(void),F

36、lash初始化;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.cv初始化时钟、SMC控制器和SDRAM控制器。v为了以后能用U-Boot的GO命令执行修改过的用loadb或tftp下载的U-

37、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.Cv设置各种总线时钟,打开数据Cache和指令Cache,并设置相关内存参数。Makefilev修改:OBJS:=S3C2410.o flash.o memsetup.o vU-Boot.lds.作如下修改:.text cpu/arm920t/start.o(.text)*(.text

38、)config.mkv用于设置程序连接的起始地址,v如果想在U-Boot 中增加功能,可以留下6M 的空间,修改33F80000 为33A00000。修改顶层Makefile v回到u-boot-2.1.1目录 vrootlocalhost u-boot-2.1.1#gedit Makefilevsmdk2410_config:unconfigv$(MKCONFIG)$(:_config=)arm arm920t smdk2410 NULL s3c24x0v在后面添加自己的配置:vS3C2410_config:unconfigv$(MKCONFIG)$(:_config=)arm arm920

39、t S3C2410 NULL s3c24x0各项的意思如下varm:CPU的架构(ARCH)varm920t:CPU的类型(CPU),其对应于cpu/arm920t子目录。vS3C2410:开发板的型号(BOARD),对应于board/S3C2410目录。vNULL:开发者/或经销商(vender)。vs3c24x0:片上系统(SOC)。编译U-Bootv编译命令编译命令rootlocalhost#cd u-boot-2.1.1rootlocalhost#make distcleanrootlocalhost#make s3C2410_configrootlocalhost#makev编译结果

40、编译结果u-boot in ELF formatu-boot.bin a raw binary imageu-boot.srec in MotorolaTM srec format文文 件件 名名 称称说说 明明文文 件件 名名 称称说说 明明System.mapU-Boot映像的符号表映像的符号表U-Boot.binU-Boot映像原始的二进制格式映像原始的二进制格式U-BootU-Boot映像的映像的ELF格式格式U-Boot.srecU-Boot映像的映像的S-Record格式格式.4 U-.4 U-BootBoot的移植思路的移植思路 U-Boot U-Boot能够支持多种体系结构的处

41、理器,能够支持多种体系结构的处理器,支持的开发板也越来越多。因为支持的开发板也越来越多。因为BootloaderBootloader是完全依赖硬件平台的,所以在新电路板上需是完全依赖硬件平台的,所以在新电路板上需要移植要移植U-BootU-Boot程序。程序。开始移植开始移植U-BootU-Boot之前,要先熟悉硬件电之前,要先熟悉硬件电路板和处理器。路板和处理器。以以S3C2410S3C2410处理器的开发板为例,处理器的开发板为例,U-BootU-Boot的高版本已经支持的高版本已经支持SMDK2410SMDK2410开发板。我们可开发板。我们可以基于以基于SMDK2410SMDK2410

42、移植,那么先把移植,那么先把SMDK2410SMDK2410编编译通过。移植译通过。移植U-BootU-Boot的基本步骤如下。的基本步骤如下。(1 1)在顶层)在顶层MakefileMakefile中为开发板添加新中为开发板添加新的配置选项,使用已有的配置项目为例。的配置选项,使用已有的配置项目为例。(2 2)创建一个新目录存放开发板相关的)创建一个新目录存放开发板相关的代码,并且添加新文件。代码,并且添加新文件。(3 3)为开发板添加新的配置文件。)为开发板添加新的配置文件。(4 4)配置开发板。)配置开发板。(5 5)编译)编译U-BootU-Boot。(6 6)添加驱动或者功能选项。)

43、添加驱动或者功能选项。(7 7)调试)调试U-BootU-Boot源代码,直到源代码,直到U-BootU-Boot在在开发板上能够正常启动。开发板上能够正常启动。.5 U-.5 U-BootBoot的烧写的烧写 新开发的电路板没有任何程序可以执行,新开发的电路板没有任何程序可以执行,也就不能启动,需要先将也就不能启动,需要先将U-BootU-Boot烧写到烧写到FlashFlash中。如果主板上的中。如果主板上的EPROMEPROM或者或者FlashFlash能够取下能够取下来,就可以通过编程器烧写。例如,计算机来,就可以通过编程器烧写。例如,计算机BIOSBIOS就存储在一块就存储在一块25

44、6KB256KB的的FlashFlash上,通过插上,通过插座与主板连接。但是多数嵌入式单板使用贴片座与主板连接。但是多数嵌入式单板使用贴片的的FlashFlash,不能取下来烧写。这种情况可以通,不能取下来烧写。这种情况可以通过处理器的调试接口,直接对板上的过处理器的调试接口,直接对板上的FlashFlash编编程。程。处理器调试接口是为处理器芯片设计的标处理器调试接口是为处理器芯片设计的标准调试接口,包含准调试接口,包含BDMBDM、JTAGJTAG和和EJTAGEJTAG三种接三种接口标准。口标准。JTAGJTAG(Joint Test Action GroupJoint Test Ac

45、tion Group,联合,联合测试行动小组)是一种国际标准测试协议测试行动小组)是一种国际标准测试协议(IEEE 1149.1IEEE 1149.1兼容),主要用于芯片内部测兼容),主要用于芯片内部测试。试。JTAGJTAG接口需要专用的硬件工具来连接。接口需要专用的硬件工具来连接。开发板加电(或者复位)时,烧写程序探开发板加电(或者复位)时,烧写程序探测到处理器是否存在,并开始通信,然后把测到处理器是否存在,并开始通信,然后把BootloaderBootloader下载并烧写到下载并烧写到FlashFlash中。这种方式中。这种方式速率很慢,平均每秒钟可以烧写速率很慢,平均每秒钟可以烧写1

46、00100200200个个字节,不过价格却非常便宜。烧写完成后,复字节,不过价格却非常便宜。烧写完成后,复位实验板,串口终端应该显示位实验板,串口终端应该显示U-BootU-Boot的启动的启动信息。信息。Memory CommandsMemory Commandsbase base print or set address offset print or set address offset crc32 crc32 checksum calculation checksum calculation cmpcmp memory compare memory compare cp cp memo

47、ry copy memory copy mdmd memory display memory display mm mm memory modify(auto memory modify(autoincrementingincrementing)mtestmtest simple RAM test simple RAM test mw mw memory write(fill)memory write(fill)nm nm memory modify(constant address)memory modify(constant address)loop loop infinite loop

48、on address range infinite loop on address range.6 U-.6 U-BootBoot的常用命令的常用命令U-Boot的常用命令的常用命令vFlash Memory Commandscp memory copy(program flash)flinfo print FLASH memory information erase erase FLASH memory protect enable or disable FLASH write protectionU-Boot的常用命令的常用命令vExecution Control Commandsboot

49、m boot application image from memory bootelf Boot from an ELF image in memory go start application at address addrU-Boot的常用命令的常用命令vOthersbootp boot image via network using bootp/tftp protocol echo ehco args to console nand legacy NAND sub-system iminfo print header information for application imagel

50、oadb load binary file over serial lineU-Boot的常用命令的常用命令vOthersloadsload S-Record file over serial linenfs boot image via network using NFS protocolprintenv print environment variablesrarpboot boot image via network using RARP/TFTP protocolrun run commands in an environment variablesetenv set environm

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(嵌入式系统教学课件:35arm处理器初始化分析.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|