PPCBoot在MPC8250上的移植方法-新品速递_第1页
PPCBoot在MPC8250上的移植方法-新品速递_第2页
PPCBoot在MPC8250上的移植方法-新品速递_第3页
PPCBoot在MPC8250上的移植方法-新品速递_第4页
PPCBoot在MPC8250上的移植方法-新品速递_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑PPCBoot在MPC8250上的移植方法-新品速递摘要:TheBootloader(引导加载程序)是嵌入式系统CPU加电后即开始运行的段代码,它把Linux内核与硬件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要。Ppcboot是功能十分强大的Bootloader。深入研究了PPCBOOt的工作机理,详细分析了PPCBoot在基于MPC8250型处理器的嵌入式系统板上的移植方法、过程与移植要点。1引言Boodoader(引导加载程序)是CPU复位后和进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。Bootloader代码与CPU的内核结构、具体型号等因素有关,其功能类似于通用PC的BOIS程序。除了依赖CPU的体系结构外,Bootloader实际上还依赖于具体的嵌入式板级设备的配置。也就是说,对于二块不同的嵌入式板,即使它们使用相同的CPU构建,要想让运行在其中一块板上的Bootloader程序也能运行在另一块板上,通常也都需要修改Boofloader的源程序。因此,在嵌入式系统的开发中不可能有通用的Bootloader,开发时用户要根据具体的系统设计要求进行移植。从嵌入式系统的实际开发角度讲,嵌入式操作系统的引导、配置甚至应用程序的运行状况都与Bootloader有一定的关联,可以说,掌握Bootloader移植是顺利进行嵌入式系统开发的重要利器。在嵌入式Linux系统中,PPCBoot是功能强大的Boot-loader,它支持多种CPU体系结构,但相对也比较复杂。本文以MPC8250微处理器和嵌入式Linux为背景,针对性的提供了PPCBOOt在开发板上的移植方法,可以应用在基于MPC82xx系列处理器的嵌入式Linux系统应用开发中。2PPCBoot简介PPCBoot是德国DENX小组开发的用于多种嵌入式CPU的Bootloader引导程序,主要由德国的工程师WolfgangDenk和Intemet上的一群自由开发人员对其进行维护和开发。支持PowerPC、ARM、MIPS、m68K等多种处理器平台,易于裁剪和调试。PPCBoot遵循GPL(通用公共许可)公约,完全开放源代码。PPCBoot源代码可以在sourceforge网站的社区服务器中获得,它的项目主页是http://sourceforge.net/projects/ppcboot,也可以从DENX的网站htrp://www.denx.de。笔者使用的版本是PPCBoot-2.0.0。PPCBoot的主要特点如表1所列。

3PPCBoot的运行流程当MPC8250上电或者施加复位信号时,CPU通过读取数据总线D[0:3l]上的值或根据内部的缺省常数D[0:31]=0x00000000,确定它的状态。如果CPU在读取总线值时,RSTCONF#滞表示低电平有效,以下类同)为低电平,则硬复位配置字(HRCW)从总线上读取,若RSTCONF#为高电平,则HRCW选用内部的默认值。上电后,启动存储控制器CSO#(对应于Flash的片选信号)有效,选中Flash,CPU地址线上输出硬件复位中断向量对应的地址0x00000100,开始读第1条指令,在PPCBoot中,这条指令对应于/ppcboot/cpu/mpc8260/start.S中的_start:标号处。下面介绍具体的启动过程。(1)运行start.S(/ppcboot/cpu/mpc8260/start.S)从一start:标号处执行。在完成CPU本身基本的初始化后,主要是初始化CPU内部寄存器的一些状态,主要设置IMMR、ICTRL、D-cache、I-cache等。从in_flash:处执行,设置C语言工作环境,再调转到代码blcpu_init_f(第2步)和blboard_init_f(第3步)。(2)CPU的底层初始化(/ppcboot/cpu/mpc8260/epu_init.C)从start.S中跳转到函数cpu_init_f(volatileimmap_t*immr)处,进行CPU的底层初始化,主要设置了watchdog、SIUMCR寄存器、时基(timebase)寄存器、PIT(周期中断寄存器)、锁相环、系统定时器、存储控制器和CPM等。(3)板上的第1次初始化(/ppcboot/lib_ppc/board.c)完成第2步后,返回地址放人LR寄存器中,再从start.S中跳转到函数board_init_f(ulongbootflag)处,该函数实现板上的第1次初始化,完成SMC初始化和一些硬件测试。尤其是RAM初始化,并分配内存空间,保存板子的信息,准备好在RAM中重定向代码。然后调用relocate_code函数,将PPCBoot移到RAM中运行。(4)搬运代码到内存中(/ppeboot/cpu/mpc8260/8tart.s)从函数board_init_f跳到/ppcboot/cpu/mpc8260/start.S中的relocate_code()函数处,然后将代码搬至SDRAM工作,调整GOT表,做一些重定位后开始在RAM中运行代码。(5)板上的第2次初始化(/ppcboot/lib_ppc/board.C)在relocate_code()函数后将跳转到board_init_r()函数处执行第2次初始化,主要完成一些数据结构、高端模块及系统设备的相关初始化。(6)命令的解析与执行(/ppcboot/commom/main.C)在进行初始化后,PPCBoot会执行函数board_init_r()中的main_loop()函数循环,即监控程序。PPCBoot的监控程序会根据用户从控制台的输入完成预先设定的工作。该函数在/ppebooffeommom/main.c中。在函数main_loop()会调用/ppeboot/com-mom/main.C中的run_command()函数完成命令的解析,并转去执行相应的处理函数。

4PPCBoot源代码的修改和编译要将PPCBoot移植到新的开发板上,应该根据具体的系统设计要求,按照系统硬件配置修改PPC-Boot的源代码。移植主要包括2个层面的移植,第1层是针对CPU的移植,PPCBoot支持的CPU类型在目录/cpu中,MPC8250对应在/cpu/mpe8260目录;第2层是针对具体board的移植,这主要根据开发者自己的具体设计修改代码。为了减少工作量,可以从PPC-Boot支持的demo板选择1个和自己的开发板硬件相似的板子作为模板,这里,笔者选择MPC8260ADS板作为参考板,直接修改与该板上相关的源代码文件。4.1开发板硬件在修改PPCBoot源代码之前,要了解开发板的硬件配置情况,根据硬件配置对源代码中的配置值做相应的修改,表2列举出板子的硬件基本信息。另外,MPC8250开发板的外围设备接口主要有10/100M自适应网卡接口、RS232串口、PCI接口和全功能JTAG调试接口等。4.2修改PPCBoot源代码从移植PPCBoot的要求和PPCBOOt能正常启动的角度出发,并比较MPC8260ADS板和开发目标板异同之后,主要考虑修改以下文件。(1)修改头文件mpc8260ads.h。mpe8260ads.h是板子的配置文件,它配置了板子的CPU、系统时钟、SDRAM、Flash系统及其他所有开发板的信息,是需要修改的重要的文件。在该文件中设置IMMRCPU寄存器基地址,注意该值必须与操作系统的设置一样。#defineCFG—IMMR0xF0000000设置CPU时钟#defineCONFIG_8260_CLKIN33333333/*inHz*/设置:Flash、SDRAM,包括基址、大小、环境参数的偏移和大小,还有内存刷新周期,都要根据目标板的具体情况设置;设置环境参数,用于网络、启动;另外,BR0、OR0、BR1、OR1等内存控制值,Watch.dog及一些目标板特定的参数也要根据实际情况设置。(2)Linux启动时,要从PPCBoot获得内存基地址和大小、时钟频率、波特率、IP地址等参数,所以ppcbooth文件中定义的结构体bd-info的成员顺序必须与Linux操作系统的定义保持一致,实现参数的正确传递。(3)修改mpc8260ads.c。mpe8260ads.c中配置了I/O端口表,初始化SDRAM,完成板子的校验工作。其中,I/O端口表配置了网络端口和板上其他一些通用I/O端口,函数initdram根据SDRAM寄存器的配置完成SDRAM的初始化。(4)修改config.mk。修改ppcboot/board/mpc826Oads/config.mk,设置TEXT_BASE=0xEF000000,使得TEXT_BASE的值和头文件中CFG_FLASH_BASE的值一样,这个值定义启动地址。

4.3编译PPCBoot在代码修改完成后,就要进行重新编译,对PPC-Boot的编译需要在Linux主机上建立PowerPC的交叉编译环境器。自己动手一步一步建立交叉编译环境通常比较复杂,简单的方法是使用别人编译好的交叉编译工具。笔者使用的是MontaVista提供的完整的开发工具集CDK。在RedHatLinux9.O主机上建立好交叉编译工具后,要修改PPCboot目录下的Makefile文件,指定交叉编译器的完整路径名,然后用下面的命令进行配置和编译:#makeMPC8260ADS_config#make编译完成后,得到3个文件:*ppcboot:这是ELF(ExecutableandLinkFormat)格式的文件,可以被大多数Debug程序识别。*ppcboot.bin:这是二进制bin文件,纯粹的ppeboot的二进制执行代码,不包含ELF格式和调试信息。这个文件一般用于安装烧录ppcboot到用户的开发板。*ppcboot.srec:Motorola的S-Record格式.是可以通过串口到开发板中的文件。5移植PPCBoot编译好的ppcboot.bin文件通过JTAG接口到Flash的起始地址处,再次上电后,就可以看到PPCBoot的启动信息:PPCBoot2.0.O(Jul122022—18:21:391RewinTeeh:FengjunpingHuangjianzhongMPC8260ResetStatus:ExternalSoft.ExtemalHardMPC8260ClockConfiguration—Bus—to—C0reMull5x.VCODiv2,60xBusFreq20—60,CoreFreq100-300一dtbrg0,coreenfOxob,busdf5,cpmdf1,plldf0,pnmf2一vco__out199999998,scc_elk49999999,brg_elk49999999一cpu_clk166666665,epm_clk99999999,bus_clk33333333CPU:MPC8260(Rev14,Maskunknown[immr=0x0064,k=0x002d])at166.666MHzBoard:MotorolaMPC8260ADSI2C:readyDRAM:16MBF1ash:16MB***Warning—badCRC.usingdefaultenvironmentIn:serialOut:serialErr:serialstanlinuxnow(y/n):=输入help得到所有命令列表,helpcommand列出该命令的功能。紧接着测试Flash和网卡,如果都正常工作,表明移植PPCBoot的工作基本完成,可以接着调试内核和文件系统。实际过程中可能由于考虑不周而需要多次修改。移植成功后,也可以添加一些其他功能(如LED的驱

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论