《第8章 处理器核心电路设计和底层软件移植PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第8章 处理器核心电路设计和底层软件移植PPT讲稿.ppt(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第8章 处理器核心电路设计和底层软件移植第1页,共78页,编辑于2022年,星期一8.1 最小硬件系统设计 嵌入式系统的具体硬件设计会随着设计嵌入式系统的具体硬件设计会随着设计应用系统的不同而有所差别。一般情况下,应用系统的不同而有所差别。一般情况下,用户可以根据自己的要求,选用合适的微处用户可以根据自己的要求,选用合适的微处理器类型,根据相应的接口电路,搭配不同理器类型,根据相应的接口电路,搭配不同类型的外设,构成不同用途、不同规模的应类型的外设,构成不同用途、不同规模的应用系统。下面以用系统。下面以PXA255PXA255处理器为例,说明由处理器为例,说明由处理器与处理器与FlashFla
2、sh和和SDRAMSDRAM等外围电路构成的最等外围电路构成的最小硬件系统的设计原理。此最小硬件系统中小硬件系统的设计原理。此最小硬件系统中的各个器件的连接关系参见图的各个器件的连接关系参见图8-18-1。此外,。此外,为了便于开发调试,也可以增加网卡和串口为了便于开发调试,也可以增加网卡和串口部分的电路。部分的电路。第2页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件3图图8-1 8-1 最小系统原理框图最小系统原理框图第3页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件4 PXA2XX PXA2XX
3、系列处理器的存储器接口支持各种存储器芯片,系列处理器的存储器接口支持各种存储器芯片,包括包括SDRAMSDRAM、F1ashF1ash、SMROMSMROM、ROMROM、SRAMSRAM及与及与SRAMSRAM类似的可变类似的可变延迟延迟I I0 0等。下面以等。下面以PXA255PXA255处理器为例,说明嵌入式系统中处理器为例,说明嵌入式系统中最常用的最常用的SDRAMSDRAM和和FlashFlash存储器与处理器的接口设计。如图存储器与处理器的接口设计。如图8-28-2所示,所示,PXA255PXA255处理器的存储器接口将其支持的存储器类处理器的存储器接口将其支持的存储器类型分为动
4、态存储器和静态存储器两类。其中动态存储器分为型分为动态存储器和静态存储器两类。其中动态存储器分为4 4个块,静态存储器分为个块,静态存储器分为6 6个块。每块都有个块。每块都有64MB64MB的寻址空间,的寻址空间,它的物理地址由片选信号它的物理地址由片选信号(chip Select)(chip Select)控制。控制。PXA255PXA255处理处理器的数据总线和地址总线通过缓冲区,分别和外部存储器的器的数据总线和地址总线通过缓冲区,分别和外部存储器的地址线、数据线相连。地址线、数据线相连。8.1.1 8.1.1 系统存储器接口系统存储器接口第4页,共78页,编辑于2022年,星期一图图8
5、-2 PXA2558-2 PXA255存储器控制接口框图存储器控制接口框图第5页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件6 MD31:0 MD31:0是是PXA255PXA255的数据总线的数据总线;nS-DCSx nS-DCSx是是PXA255PXA255的动态存储器片选信号的动态存储器片选信号;nCSx nCSx是是PXA255PXA255的静态存储器片选信号。的静态存储器片选信号。第6页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件7 PXA2XXPXA2XX处理器往往使用大容量的片外存储器
6、作处理器往往使用大容量的片外存储器作为程序或数据存储器,例如采用外部为程序或数据存储器,例如采用外部FlashFlash和和SDRAMSDRAM存储器。外部存储器有存储器。外部存储器有1616位宽度的,也有位宽度的,也有3232位宽度位宽度的,而的,而PXA2XXPXA2XX的总线宽度是的总线宽度是3232位的,所以对于位的,所以对于1616位位的外部存储器,必须进行的外部存储器,必须进行“位扩展位扩展”,即通过并联,即通过并联两块两块1616位的外部存储器构成一个位的外部存储器构成一个3232位的存储系统。位的存储系统。本书的开发板使用的本书的开发板使用的FlashFlash存储器和存储器和
7、SDRAMSDRAM存储器;存储器;采用这种采用这种“位扩展位扩展”的方法,使得系统数据总线工的方法,使得系统数据总线工作在作在3232位的模式下。位的模式下。下面就以异步静态存储器下面就以异步静态存储器(Flash)(Flash)和同步动态存和同步动态存储器储器(SDRAM)(SDRAM)为例,说明为例,说明PXA2XXPXA2XX系统的存储器扩展原系统的存储器扩展原理。理。第7页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件81 1异步静态存储器接口设计原理异步静态存储器接口设计原理 如图如图8-38-3所示,采用两片所示,采用两片IntelI
8、ntel的的E28F128J3A-E28F128J3A-150 Flash150 Flash芯片,构成了芯片,构成了32 MB32 MB的的F1ashF1ash存储器。这存储器。这里的里的FlashFlash芯片是芯片是1616位的,故采用两块并联的方法位的,故采用两块并联的方法为处理器提供为处理器提供3232位的数据总线支持。位的数据总线支持。第8页,共78页,编辑于2022年,星期一图8-3 Flash电路原理框图第9页,共78页,编辑于2022年,星期一 由于处理器从由于处理器从FlashFlash读出的数据是读出的数据是3232位的,位的,所以在对其寻址时,所以在对其寻址时,地址以地址
9、以4 4字节为单位递增字节为单位递增,并且一次性从数据总线上得到并且一次性从数据总线上得到4 4字节的数据。字节的数据。例如,对例如,对Ox00000000Ox00000000进行寻址,将从数据总进行寻址,将从数据总线上获得线上获得x00000000 x000000000 x000000030 x00000003总共总共4 4字节字节的数据。因此,的数据。因此,PXA255PXA255的地址线上的的地址线上的SA-A0SA-A0和和SA-A1SA-A1不与芯片连接。不与芯片连接。对于这样的对于这样的FlashFlash外围外围电路,对电路,对FLASHFLASH的的0 x000000010 x
10、00000001;(Ox00000002(Ox00000002、0 x00000003)0 x00000003)进行寻址,也能获得对地址进行寻址,也能获得对地址0 x000000000 x00000000进行寻址相同的效果。进行寻址相同的效果。第10页,共78页,编辑于2022年,星期一 对于每片芯片来说,数据的输出是以对于每片芯片来说,数据的输出是以1616位位为单位,即为单位,即2 2字节。所以每片芯片地址按字对字节。所以每片芯片地址按字对齐,地址线的齐,地址线的A0A0引脚应连接到地。引脚应连接到地。处理器启动时,从处理器启动时,从Ox00000000Ox00000000地址开始执地址开
11、始执行代码。为了从行代码。为了从FlashFlash引导系统,它必须接到引导系统,它必须接到静态存储器的块静态存储器的块0(Bank0)0(Bank0),所以它使用处理器,所以它使用处理器的的nCS0nCS0作为片选信号。作为片选信号。F1ashF1ash的其他控制脚由的其他控制脚由处理器内部集成的处理器内部集成的Static MemoryStatic Memory控制器进行控制器进行控制。控制。第11页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件122 2S SDRAMDRAM存储器接口设计原理存储器接口设计原理 下面采用两片下面采用两片Sam
12、sungSamsung的的K4S281632CK4S281632C,构成了,构成了64MB64MB的的SDRAMSDRAM存储器。如图存储器。如图8-48-4所示,由于所示,由于SDRAMSDRAM数据宽度为数据宽度为1616位,采用两片并联的方法与位,采用两片并联的方法与PXA255PXA255处理器连接,提处理器连接,提供供3232位的支持。位的支持。第12页,共78页,编辑于2022年,星期一图图8-4 SDRAM 8-4 SDRAM 电路原理框图电路原理框图第13页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件14 K4S281632C K
13、4S281632C是是4M164M16位位4Bank4Bank的的SDRAMSDRAM存储器,总存储器,总共有共有32MB32MB的存储空间。处理器地址线的的存储空间。处理器地址线的SA-A22SA-A22和和SA-A23SA-A23引脚连接到引脚连接到SDRAMSDRAM芯片的芯片的BA1:0BA1:0引脚,决定引脚,决定4 4个片内个片内BankBank的选择;处理器地址线的的选择;处理器地址线的SA-A10SA-A10SA-A21SA-A21和和SA-SA-A24A24则分别连接到则分别连接到SDRAMSDRAM的的A0A0A11A11、A12A12引脚。引脚。SDRAM SDRAM连接
14、到处理器动态存储器的第连接到处理器动态存储器的第0 0块,故块,故选用处理器的选用处理器的nSDCS0nSDCS0作为片选信号。作为片选信号。SDRAMSDRAM的其余的其余引脚则由处理器内部集成的引脚则由处理器内部集成的Dynamic MemoryDynamic Memory控制控制器进行控制。器进行控制。第14页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件158.1.2 8.1.2 串口电路原理串口电路原理 串行通信只有两条信号线,所以电路比较简单。串行通信只有两条信号线,所以电路比较简单。PXA255PXA255处理器有处理器有3 3个个U
15、ARTUART接口,此处选用全功能接口,此处选用全功能UART(FFUART)UART(FFUART)作为最小系统的调试串口。作为最小系统的调试串口。FFUART FFUART须使用须使用GP34GP34和和GP39GP39引脚的第二功能。它的连引脚的第二功能。它的连接电路很简单,只要通过一个接电路很简单,只要通过一个RS232RS232的收发器,完成的收发器,完成TTLTTLCMOSCMOS电平到电平到RS232RS232电平的转换即可电平的转换即可(图图85)85)。第15页,共78页,编辑于2022年,星期一图图8-5 8-5 串口电路原理串口电路原理FF_TXD/GP39PXA255F
16、F_RXD/GP34RS232Transceiver1 12 23 34 45 5第16页,共78页,编辑于2022年,星期一8.2 最小硬件系统的配置8.2.1 处理器的配置 系统上电之后,软件引导代码首先要根据硬系统上电之后,软件引导代码首先要根据硬件设计初始化件设计初始化PXA255PXA255处理器。所以,对处理器的处理器。所以,对处理器的配置是否正确直接决定系统软件能否正常工作。配置是否正确直接决定系统软件能否正常工作。对对PXA255PXA255处理器的配置将使用到三个非常重要寄处理器的配置将使用到三个非常重要寄存器,分别是存器,分别是CCCRCCCR、CKENCKEN和和ICMR
17、ICMR寄存器。它们的定义寄存器。它们的定义和作用如表和作用如表4-14-1所列。所列。第17页,共78页,编辑于2022年,星期一表8-1 CCCR、CKEN和ICMR的定义和作用寄存器名称 定 义 作 用 CCR核心时钟配置寄存器控制着内存、Run模式和Turbo模式的时钟频率 CKEN外设时钟使能寄存器节电 ICMR中断使能寄存器屏蔽中断第18页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件19 CCCR(Core Clock Configuration Register)CCCR(Core Clock Configuration Regis
18、ter)寄存器控制着寄存器控制着内存、内存、LCDLCD、DMADMA控制器所使用的时钟。这些时钟都是由处理器的控制器所使用的时钟。这些时钟都是由处理器的3 3.6864MHz6864MHz钟振倍频上去的,控制倍频比例的参数有三个,见钟振倍频上去的,控制倍频比例的参数有三个,见表表4-4-2 2。1.CCCR1.CCCR寄存器寄存器表表8-8-2 2 CCCR CCCR控制倍频比例的参数控制倍频比例的参数 名 称 使用方法 取值空间L:内存频率因子内存时钟频率=3.6864MHz*L27、32、36、40或45M:运行模式因子运行模式频率=内存时钟频率*M1、2 或4N:Turbo模式因子Tu
19、rbo模式频率=运行模式频率*N1.0、1.5、2.0或3.0第19页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件20 本书使用的开发板是本书使用的开发板是1.3V1.3V电源供电,系统时钟电源供电,系统时钟全部由全部由CPUCPU提供,最快可以达到提供,最快可以达到100MHz100MHz的内存时钟,的内存时钟,400MHz400MHz的运行时钟和的运行时钟和400MHz400MHz的的TurboTurbo模式时钟。模式时钟。L=27,M=4,N=1L=27,M=4,N=1 Reserved CCCR31:10Reserved CCCR31:1
20、0=0 =0 N=1N=1 CCCR9:7 CCCR9:7 =01 =010 0(未用未用)M=4 M=4 CCCR6:5CCCR6:5 =11 =11 L=27 L=27 CCCR4:0CCCR4:0 =00001 =00001 最终的最终的CCCRCCCR寄存器的值应当配置为寄存器的值应当配置为0 x000001610 x00000161注:注:CCCRCCCR中中N N、MM、L L的位定义对应其取值序号的位定义对应其取值序号第20页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件21 CKEN(Clock Enable Register)CK
21、EN(Clock Enable Register)寄存器是一个寄存器是一个控制外部设备时钟使能的寄存器。它对嵌入式系控制外部设备时钟使能的寄存器。它对嵌入式系统的电量消耗有着决定性的作用;对于那些没有统的电量消耗有着决定性的作用;对于那些没有用到的外设,应当关闭其时钟供应。用到的外设,应当关闭其时钟供应。CKEN CKEN的的O O1616位控制着位控制着1313种外设的时钟使能种外设的时钟使能(其中其中有有4 4位保留位保留)。它们的对应关系如下:。它们的对应关系如下:2.CKEN2.CKEN寄存器寄存器第21页,共78页,编辑于2022年,星期一LCDLCD设备设备 CKEN16=1 CK
22、EN16=1FICPFICP设备设备 CKENl5=1 CKENl5=1I I2 2C C设备设备 CKEN14=1 CKEN14=1 MMCMMC设备设备 CKEN12=1 CKEN12=1USBUSB设备设备 CKEN1l=1 CKEN1l=1NSSPNSSP设备设备 CKEN10=1 CKEN10=1I I2 2s s设备设备 CKEN8=1 CKEN8=1BTUARTBTUART、FFUIARTFFUIART、STUARTSTUART、HWUART CKEN7:5=111HWUART CKEN7:5=111SSPSSP设备设备 CKEN4=1 CKEN4=1AC97AC97、SSPSS
23、P设备设备 CKEN3:2=11 CKEN3:2=11其余其余=0=0 实际上,最小硬件系统只需要调试串口,故只需要实际上,最小硬件系统只需要调试串口,故只需要为为FFUARTFFUART提供时钟。提供时钟。CKENCKEN只需要被设置成只需要被设置成0 x000000400 x00000040。实际使用中应根据具体需要,开启某种外设的时钟。实际使用中应根据具体需要,开启某种外设的时钟。第22页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件23 ICMR(Interrupt Controller Mask ICMR(Interrupt Contro
24、ller Mask Register)Register)寄存器是中断使能寄存器。寄存器是中断使能寄存器。1 1代表使能,代表使能,0 0代表屏蔽。代表屏蔽。一般来说,一般来说,PXA255PXA255处理器在处理器在BootloaderBootloader启动阶段启动阶段必须屏蔽所有中断,所以必须屏蔽所有中断,所以ICMRICMR寄器应当设置为寄器应当设置为0 x000000000 x00000000。3.ICMR3.ICMR寄存器寄存器第23页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件24 搭建嵌入式系统时,存储器的配置是最重要的,也是最基础
25、搭建嵌入式系统时,存储器的配置是最重要的,也是最基础的。的。上电之后,上电之后,PXA255PXA255处理器就开始从物理的处理器就开始从物理的0 x000000000 x00000000读第读第一条指令,这第一条指令就是存储在一条指令,这第一条指令就是存储在FlashFlash里的。如果里的。如果FlashFlash没没有配置正确,有配置正确,CPUCPU将取不到正确的指令。将取不到正确的指令。同样,同样,BootloaderBootloader启动时一般会将自身复制到启动时一般会将自身复制到SDRAMSDRAM,然后在,然后在SDRAMSDRAM里运行。因此里运行。因此,只有只有SDRAM
26、SDRAM配置正确,配置正确,BootloaderBootloader的启动流程才能顺利执行。的启动流程才能顺利执行。Flash Flash和和SDRAMSDRAM的配置同属于存储器配置,考虑的对象和涉及的配置同属于存储器配置,考虑的对象和涉及的寄存器比较相近。的寄存器比较相近。存储器的配置涉及两个比较重要的寄存器存储器的配置涉及两个比较重要的寄存器,见表见表4-34-38.2.2 8.2.2 FlashFlashSDRAMSDRAM的配置的配置第24页,共78页,编辑于2022年,星期一表8-3 与存储器配置相关的寄存器寄存器名称 定 义 作用MSCx异步静态存储配置寄存器向CPU传递存储器
27、操作的参数MDCNFG同步动态随机存储器的交互寄存器向CPU传递SDRAM的参数第25页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件26 MSCx(Asynchronous Static Memory Control MSCx(Asynchronous Static Memory Control Registers)Registers)寄存器是存储器控制功能中极其重要的寄存器,寄存器是存储器控制功能中极其重要的寄存器,它记录了它记录了存储器的性质、位宽和操作存储器的性质、位宽和操作的实际参数。的实际参数。MSCxMSCx一般用来一般用来控制外部静
28、态的存储器,在本书所用的开发板上,它用于控制控制外部静态的存储器,在本书所用的开发板上,它用于控制FlashFlash和网卡。和网卡。MSCxMSCx寄存器总共有三个,它们分别是寄存器总共有三个,它们分别是MSCOMSCO、MSClMSCl和和MSC2MSC2。每个寄存器最多可以控制两个外部静态存储器块,这三个。每个寄存器最多可以控制两个外部静态存储器块,这三个寄存器总共可以控制多达寄存器总共可以控制多达6 6个外部静态存储器块个外部静态存储器块nCS0:1nCS0:1、nCS2:3nCS2:3、nCS4:5nCS4:5。只有。只有MSCxMSCx寄存器配置正确,其对应的片选寄存器配置正确,其
29、对应的片选信号才可以使能相应的静态存储器访问。信号才可以使能相应的静态存储器访问。MSCx MSCx十分重要,因为它记录了有关于存储器的几个重要十分重要,因为它记录了有关于存储器的几个重要参数,见参数,见P197P197表表8-48-4所列。所列。1 1MSCxMSCx寄存器寄存器第26页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件27 Flash Flash连接到连接到nCS0nCS0,如,如P198P198图图8-68-6所示,网卡所示,网卡采用采用nCSl(nCSl(即即SASA一一(2SI#)(2SI#)片选信号。片选信号。可以使用可以使
30、用P198P198表表8-58-5的配置清单设置的配置清单设置MCS0MCS0,以,以正确访问正确访问FlashFlash存储器和网卡的存储器和网卡的I I0 0地址空间。地址空间。第27页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件28 MDCNFG(SDRAM MDCNFG Register)MDCNFG(SDRAM MDCNFG Register)寄存器控制寄存器控制PXA255PXA255处理器的同步动态随机存储器的操作参数,处理器的同步动态随机存储器的操作参数,如果这些配置不正确,如果这些配置不正确,SDRAMSDRAM将不能被初始化,
31、软件将不能被初始化,软件启动将无法完成。启动将无法完成。MDCNFG MDCNFG有很多配置项,主要如有很多配置项,主要如P199P199表表8-68-6中所列。中所列。2.MDCNFG2.MDCNFG寄存器寄存器第28页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件29 PXA255 PXA255处理器有处理器有8484个通用个通用(General-Purpose)I(General-Purpose)IO O口。每一个口。每一个GPIOGPIO引脚既可以当做普通的引脚既可以当做普通的I IO O用,用,也可以把它们配置成具有第二功能的引脚。也可以
32、把它们配置成具有第二功能的引脚。GPIO GPIO的配置与的配置与PXA255PXA255处理器所接的外部设处理器所接的外部设备有关。例如,本书所用的开发板的串口和网备有关。例如,本书所用的开发板的串口和网卡用到一些相关的卡用到一些相关的GPIOGPIO寄存器,因此,在系统寄存器,因此,在系统启动时应对它们进行正确配置。启动时应对它们进行正确配置。GPIO GPIO的配置主要由几个寄存器完成,见表的配置主要由几个寄存器完成,见表-。4.2.3 GPIO4.2.3 GPIO和串口的配置和串口的配置第29页,共78页,编辑于2022年,星期一表表-完成完成GPIOGPIO配置的相关寄存器配置的相关
33、寄存器寄存器名称 定 义 配置方法GPDR方向寄存器只有两个引脚配置输出只有两个引脚配置输出GPLR引脚状态寄存器引脚状态寄存器只读只读,配置成配置成0 x0000 00000 x0000 0000GPCR输出00 x0000 0000GPSR输出10 x0000 0000GRER探测上升沿使得能够探测上升沿使得能够0 x0000 0000GFER探测下降沿使得能够探测下降沿使得能够0 x0000 0000GEDR探测上升下降沿探测上升下降沿0 x0000 0000GAFR第二功能寄存器使用了其中使用了其中3 3个引脚第二功能个引脚第二功能第30页,共78页,编辑于2022年,星期一 由P20
34、0图8-7可以看出,GPl5的引脚应当配置成nCSl,方向为输出。由P201图8-8可以看出,GP34和GP39作为FF-Rx和FF-TX连接到RS232传输芯片SP3223ECY,它们应当使用FFUART功能,并且分别设置成输入和输出。具体设置如下:GPDR015=1 GPDR17 =1 GAFR1_L5:4 =01 GAFR1_L15:14 =10 其他各引脚的配置均为0。第31页,共78页,编辑于2022年,星期一8.3 最小硬件系统与Bootloader Bootloader是系统加电后运行的第一段是系统加电后运行的第一段软件代码,软件代码,Bootloader的最终目标就是正确的最终
35、目标就是正确地调用内核来执行。因此,地调用内核来执行。因此,Bootloader只需只需要初始化要初始化CPU、Flash、SDRAM,让,让Linux内核得以运行即可。本节介绍的内核得以运行即可。本节介绍的Bootloader的任务框架就是针对的任务框架就是针对PXA255的最小硬件系的最小硬件系统来进行初始化的。其他设备的初始化,完统来进行初始化的。其他设备的初始化,完全可以交由内核完成。全可以交由内核完成。第32页,共78页,编辑于2022年,星期一 在嵌入式系统中,内核映像、根文件系统映像都存储在嵌入式系统中,内核映像、根文件系统映像都存储在嵌入式系统中,内核映像、根文件系统映像都存储
36、在嵌入式系统中,内核映像、根文件系统映像都存储在在在在ROMROMROMROM或或或或FlashFlashFlashFlash中,直接在固态存储设备中运行程序的速中,直接在固态存储设备中运行程序的速中,直接在固态存储设备中运行程序的速中,直接在固态存储设备中运行程序的速度很慢。因此,度很慢。因此,度很慢。因此,度很慢。因此,BootloaderBootloaderBootloaderBootloader的工作之一就是将内核映像的工作之一就是将内核映像的工作之一就是将内核映像的工作之一就是将内核映像与根文件系统映像加载到与根文件系统映像加载到与根文件系统映像加载到与根文件系统映像加载到RAMRA
37、MRAMRAM中,然后使之运行。中,然后使之运行。中,然后使之运行。中,然后使之运行。由于由于BootloaderBootloader的实现依赖于的实现依赖于CPUCPU的体系结构,的体系结构,因此,大多数因此,大多数BootloaderBootloader的执行都可分为阶段的执行都可分为阶段1 1和和阶段阶段2 2两大部分。依赖于两大部分。依赖于CPUCPU体系结构的代码,比体系结构的代码,比如设备初始化代码等,通常都放在阶段如设备初始化代码等,通常都放在阶段1 1执行,而执行,而且通常都用汇编语言来实现,以达到短小精悍的且通常都用汇编语言来实现,以达到短小精悍的目的。而阶段目的。而阶段2
38、2的代码则通常用的代码则通常用C C语言来实现,这语言来实现,这样可以实现复杂的功能,而且代码会具有更好的样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。可读性和可移植性。第33页,共78页,编辑于2022年,星期一 Bootloader的阶段1执行通常包括以下步骤(以执行的先后顺序):硬件设备初始化;为加载Bootloader的阶段2代码准备 RAM空间;复制Bootloader的阶段2代码到RAM空 间中;设置好堆栈;跳转到阶段2代码的C入口点。第34页,共78页,编辑于2022年,星期一 Bootloader的阶段2执行通常包括以下步骤(以执行的先后顺序):初始化本阶段要使用
39、到的硬件设备;检测系统内存映射(Memor_y map);将内核映像和根文件系统映像从Flash 上读到RAM空间中;为内核设置启动参数;启动内核。第35页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件36 对于对于PXAPXA系列处理器,系列处理器,U-bootU-boot的阶段的阶段1 1代码在代码在U-bootU-boot源代码源代码的的cpucpupxapxastart.Sstart.S文件里,这是一个汇编代码文件。文件里,这是一个汇编代码文件。8.3.1 U-boot8.3.1 U-boot启动阶段启动阶段1 1的处理过程的处理过程第36
40、页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件37 这是这是BootloaderBootloader一开始就执行的操作,其目的是为阶段一开始就执行的操作,其目的是为阶段2 2的执行以及的执行以及随后的内核的执行准备好一些基本的硬件环境。通常包括以下步骤随后的内核的执行准备好一些基本的硬件环境。通常包括以下步骤(以执行以执行的先后顺序的先后顺序):屏蔽所有的中断。在屏蔽所有的中断。在BootloaderBootloader中通常不使用中断,因此在中通常不使用中断,因此在BootloaderBootloader的执行全过程中可以屏蔽中断。中断屏蔽可以
41、通过写的执行全过程中可以屏蔽中断。中断屏蔽可以通过写CPUCPU的中的中断屏蔽寄存器或状态寄存器断屏蔽寄存器或状态寄存器(比如比如ARMARM的的CPSRCPSR寄存器寄存器)来完成。来完成。设置设置CPUCPU的速度和时钟频率。的速度和时钟频率。RAM RAM初始化。包括正确地设置系统的内存控制器的功能寄存器以及初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。各内存库控制寄存器等。初始化初始化LEDLED。典型地,通过。典型地,通过GPIOGPIO来驱动来驱动LEDLED,其目的是表明系统的,其目的是表明系统的状态是状态是OKOK还是还是ErrorError。如果
42、板上没有。如果板上没有LEDLED,那么也可以通过初始化,那么也可以通过初始化UARTUART向向串口打印串口打印BootloaderBootloader 的的LogoLogo字符信息来完成这一点。字符信息来完成这一点。关闭关闭CPUCPU内部指令数据内部指令数据CacheCache。1.1.基本的硬件初始化基本的硬件初始化第37页,共78页,编辑于2022年,星期一各个步骤具体实现代码如下:(a)配置中断。P202 (b)配置复位控制器。P202-203 (c)配置系统时钟。P203(d)配置时钟管理寄存器。P203 (e)配置RS232串口。P203 (f)CPU初始化。P203-204
43、(h)RAM初始化。P203-204第38页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件39 为了获得更快的执行速度,通常把阶段为了获得更快的执行速度,通常把阶段2 2代码加载代码加载到到RAMRAM空间中来执行,因此必须为加载空间中来执行,因此必须为加载BootloaderBootloader的阶的阶段段2 2代码准备好一段可用的代码准备好一段可用的RAMRAM空间范围。空间范围。通常,阶段通常,阶段2 2代码执行需要使用堆栈,因此在考代码执行需要使用堆栈,因此在考虑空间大小时,除了阶段虑空间大小时,除了阶段2 2代码可执行映像的大小外,代码可
44、执行映像的大小外,还必须把堆栈空间也考虑进来。此外,空间大小最好还必须把堆栈空间也考虑进来。此外,空间大小最好是内存页面大小是内存页面大小(通常是通常是4KB)4KB)的倍数。的倍数。2.2.为加载阶段为加载阶段2 2代码准备代码准备RAMRAM空间空间第39页,共78页,编辑于2022年,星期一 一般而言,512 KB的RAM空问已经足够了。具体的地址范围可以任意安排,比如U-boot就将它的阶段2可执行映像安排到从系统RAM的顶端地址开始的512 KB空间内执 行,即RAM末尾-512KB至RAM末尾。第40页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌
45、入式系统课件41 复制时要确定两点:复制时要确定两点:Bootloader Bootloader可执行映像在固态存储设备的存放可执行映像在固态存储设备的存放起始地址和终止地址。通常由于阶段起始地址和终止地址。通常由于阶段1 1所占空间较小,所占空间较小,许多许多BootloaderBootloader程序直接将整个程序直接将整个BootloaderBootloader代码复制代码复制到内存空间。到内存空间。复制的目标地址。本书所移植的复制的目标地址。本书所移植的U-bootU-boot的复制目标的复制目标地址为地址为Oxa3f80000Oxa3f80000,用,用TEXT_BASETEXT_B
46、ASE表示。表示。U-boot U-boot用以下代码来确定这两个重要信息用以下代码来确定这两个重要信息,见见P205P205。3.3.复制阶段复制阶段2 2代码到内存中代码到内存中第41页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件42 复制时要确定两点:复制时要确定两点:Bootloader Bootloader可执行映像在固态存储设备的存可执行映像在固态存储设备的存放起始地址和终止地址。通常由于阶段放起始地址和终止地址。通常由于阶段1 1所占空间较所占空间较小,许多小,许多BootloaderBootloader程序直接将整个程序直接将整个
47、BootloaderBootloader代代码复制到内存空间。码复制到内存空间。复制的目标地址。本书所移植的复制的目标地址。本书所移植的U-bootU-boot的复制的复制目标地址为目标地址为Oxa3f80000Oxa3f80000,用,用TEXT_BASETEXT_BASE表示。表示。U-boot U-boot用以下代码来确定这两个重要信息用以下代码来确定这两个重要信息,见见P205P205。4.4.复制阶段复制阶段2 2代码到内存中代码到内存中第42页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件43 堆栈指针的设置是为了执行堆栈指针的设置是为
48、了执行C C语言代码作好准备。语言代码作好准备。经过上述这些执行步骤后,系统的物理内存布局如经过上述这些执行步骤后,系统的物理内存布局如P206P206图图8-98-9所示。其中,所示。其中,_TEXT_BASE_TEXT_BASE即即BootloaderBootloader代码在内存空间的起始地址,代码在内存空间的起始地址,_bss_start_bss_start即堆栈的即堆栈的起始地址。起始地址。堆栈指针设置代码如堆栈指针设置代码如P206P206:4.4.设置堆栈指针设置堆栈指针第43页,共78页,编辑于2022年,星期一Stage1为 Stage可执行映像准备的RAM地址范围,大小为1
49、MB (blank)Ramdisk(blank)内核映像(blank)BootloaderFLASH地地址空间址空间RAM 地地址空间址空间_TEXT_BASE_bss_startBootlooder代码代码在内存空间的起在内存空间的起始地址始地址堆栈的起始地堆栈的起始地址址图图8-9 8-9 第44页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件45 在上述一切就绪后,就可以跳转到在上述一切就绪后,就可以跳转到Boot-Boot-loaderloader的阶段的阶段2 2去执行了。比如,在去执行了。比如,在ARMARM系统中,这系统中,这可以通过
50、修改可以通过修改PCPC寄存器为合适的地址来实现。因为寄存器为合适的地址来实现。因为此时,在此时,在RAMRAM中已经有了中已经有了Boot-loaderBoot-loader的一份完全一的一份完全一样的复制。跳转的实现代码如样的复制。跳转的实现代码如P207P207:5.5.跳转到阶段跳转到阶段2 2代码的代码的C C入口点入口点第45页,共78页,编辑于2022年,星期一嵌入式系统课件嵌入式系统课件嵌入式系统课件嵌入式系统课件46 阶段阶段2 2的代码通常用的代码通常用C C语言来实现,以便于实语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移现更复杂的功能和取得更好的代码可读