《嵌入式Linux开发入门》课件第4章_第1页
《嵌入式Linux开发入门》课件第4章_第2页
《嵌入式Linux开发入门》课件第4章_第3页
《嵌入式Linux开发入门》课件第4章_第4页
《嵌入式Linux开发入门》课件第4章_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

第4章EP9315的启动代码——Redboot

4.1bootloader介绍4.2Redboot介绍4.3Redboot移植4.4下载和使用Redboot4.1bootloader介绍4.1.1bootloader的基本概念一个嵌入式Linux系统从软件的角度看通常可以分为4个层次:引导加载程序、Linux内核、文件系统和用户应用程序,如图4.1所示。图4.1嵌入式Linux系统的软件构成引导加载程序是系统加电后运行的第一段代码。我们熟悉的PC中的引导程序一般由BIOS和位于MBR的OSbootloader(例如LILO或者GRUB)一起组成。 然而在嵌入式系统中通常没有像BIOS那样的固件程序(有的嵌入式CPU有),因此整个系统的加载及启动任务就完全由bootloader来完成。在嵌入式Linux中,图4.1中的引导加载程序即等效为bootloader。简单地说,bootloader就是在操作系统内核运行前运行的一段小程序。通过这段小程序,我们可以初始化必要的硬件设备,创建内核需要的一些信息,并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。对于不同的硬件平台并没用一个普遍适用的bootloader,影响bootloader程序设计的因素主要有以下几个方面:

(1) CPU体系结构;

(2)具体嵌入式芯片;

(3)要引导的嵌入式操作系统;

(4)具体的嵌入式开发板的配置。也就是说,对于两块不同的嵌入式开发板,即使CPU的体系结构一致,且来自同一厂家的同一型号的芯片,所使用的bootloader也可能是不同的。4.1.2bootloader的操作模式大多数bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式。这种区别对于开发人员很有意义,但从最终用户的角度看,bootloader的作用永远都是用来加载操作系统的,而并不存在所谓的启动加载模式与下载工作模式的区别。

(1)启动加载模式:这种模式也称为“自主”模式,即bootloader从目标机上的某个固体存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入。这种模式是bootloader的正常工作模式,因此当以嵌入式产品发布的时候,bootloader必须工作在这种模式下。

(2)下载模式:在这种模式下,目标机上的bootloader将通过串口或者网络连接或者其他通信手段从主机下载文件。比如,下载内核镜像和根文件系统镜像等。从主机下载的文件通常首先被bootloader保存到目标机的RAM中,然后被bootloader写到目标机上的Flash类固态存储设备中。bootloader的这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用bootloader的这种工作模式。工作于这种模式下的bootloader通常都会向它的终端用户提供一个简单的命令行接口。4.1.3bootloader程序设计及地址规划

bootloader程序的设计采用两阶段式。第一阶段:主要进行与CPU内核及存储设备密切相关的处理工作,以及进行一些必要的初始化工作,这部分内容用汇编语言编写,并直接在Flash中运行。第二阶段:实现对板级的一些驱动支持,这部分内容用C语言编写,并在RAM中运行。bootloader程序的启动流程如图4.2所示。图4.2bootloader程序的启动流程当bootloader阶段设计好之后,需要考虑的是镜像存储的地址分配:总镜像保存在什么地方,阶段2对应的镜像会被拷贝到什么地方;内核镜像原先存放在什么地方,bootloader又会把它重新加载到什么地方。嵌入式系统复位后,从物理地址的0x00000000开始执行第一段代码,这个地址是由CPU制造商预先安排的。因此我们将固态存储设备Flash映射到这个地址上。当bootloader放到Flash的起始处后,系统加电或者复位后,CPU将首先执行bootloader程序。内核镜像以及根文件系统镜像通常都被加载到SDRAM中运行,这样做是基于运行速度的考虑,尽管在嵌入式系统中内核镜像与根文件系统镜像也可以直接在ROM或Flash这样的固态存储设备中直接运行。所以bootloader在启动时以及加载内核时通常要考虑这一点。假设bootloader的镜像在Flash中的存放地址为0x00000000~0x00040000,内核镜像在Flash中的起始地址为0x000c0000。bootloader的镜像2加载到SDRAM中的起始地址为0xa0000000,内核镜像被加载到SDRAM中的起始地址为0xa0300000。bootloader的地址映射关系如图4.3所示。图4.3bootloader的地址映射以上是系统启动流程的一般概念,与这里所使用的EP9315开发平台情况有所不同。EP9315芯片位于地址0x0000_0000处的存储器组不是Flash存储空间,而是SDRAM存储空间。这就意味着,不能将bootloader代码放在0x0000_0000地址处供系统复位时直接运行。实际上在EP9315芯片内部有一块64 kB大小的ROM,叫做BootROM,其中存放了由厂家固化在其中的BootROM启动代码,完成在执行bootloader程序段之前的最初的初始化工作。在系统启动时将其映射到了0x0000_0000地址处,这样系统启动时首先执行的是BootROM中的代码,下来再由BootROM中的代码引导存放在Flash存储空间中的bootloader运行。4.2Redboot介绍4.2.1Redboot的功能概述

bootloader是在操作系统内核运行之前运行的一小段程序。这段小程序的功能就是将硬件设备进行初始化,建立内存空间的映射图,正确设置系统的软硬件,为最终调用操作系统内核准备好正确的环境。一般说来,bootloader对硬件的依赖性特别高,尤其是在嵌入式世界中。因此,在嵌入式世界里建立一个通用的bootloader几乎是不可能的。但即使bootloader与硬件的关系比较密切,还是有一些通用的特性。每种不同的CPU体系结构都有不同的bootloader。有些bootloader支持多种体系结构的CPU,比如U-BOOT就同时支持ARM体系结构和MIPS体系结构的CPU。除了依赖于CPU的体系结构外,bootloader实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU构建的,要想让运行在一块板上的bootloader程序也能运行在另一块板上,通常还是需要修改bootloader的源程序。

eCos是一种可配置的嵌入式实时操作系统,Redboot是一个以eCos为基础的应用程序,并且使用了eCos的硬件抽象层(HAL)作为基础,可以看做是嵌入式操作系统eCos的一个最小版本。Redboot可以使用在任何嵌入式系统和实时操作系统(RealTimeOperateSystem)上,作为其他操作系统的引导程序。

Redboot集bootloader、调试、Flash于一体。支持串口、网络下载,执行嵌入式应用程序。它既可以用在产品的开发阶段(调试功能),也可以用在最终的产品上(Flash更新、网络启动)。

RedBoot支持下载和调试应用程序,开发板可以通过BOOTP/DHCP协议动态配置IP地址,支持跨网段访问。用户可以通过tftp协议下载应用程序image。或者通过串口用x-modem/y-modem下载。

Redboot支持用GDB(theGNUdebugger)通过串口或者网卡调试嵌入式程序。可对gcc编译的程序进行源代码级的调试。相比于简易jtag调试器更可靠、高速(CPU的Cache打开后,通过网卡tftp下载能达到1MB/s,GDB下载的速度能达到2Mb/s)、稳定。用户可通过串口或网卡,以命令行的形式管理Flash上的image,下载image到Flash。动态配置Redboot启动的各种参数、启动脚本。上电后Redboot可自动从Flash或tftp服务器上下载应用程序执行。4.2.2Redboot的文件结构在ecos-2.0\packages\redboot\v2_0目录下有5个文件夹和1个文件,它们的内容如下所述:

(1) CDL目录:此目录下只包含一个文件——redboot.cdl。这个文件中包含了配置工具为Redboot包提供的各种选项信息,描述了Redboot的配置和编译信息。这些信息以CDL脚本形式提供。

(2) DOC目录:包含了eCos配置工具所要使用的关于RedbootRommonitor的文件。

(3)  Include目录:包含了Redboot所使用的所有头文件。fs子目录包含了Redboot文件系统所要使用的头文件。net子目录中包含了Redboot支持网络所使用的头文件。

(4)  Misc目录:包含了给Redboot提供的eCos最小配置文件。

(5) Src目录:包含了所有Redboot源文件,fs子目录是文件系统的源代码,net子目录包含了所有网络支持的源代码。

(6) ChangeLog文件:Redboot源码的管理者使用这个文件来对文件的修改进行跟踪管理,通过这个文件可以了解Redboot包的修改过程,用户可以根据自己的需要来选择合适的版本。4.2.3Redboot的启动模式

Redboot有3种启动模式:ROM模式、RAM模式和ROMRAM模式。

(1) ROM模式:在这种模式下,Redboot存放和执行都在ROM(Flash或EPROM)中。这种情况是在RAM资源受到一定限制的的条件下才采用的。Flash中的命令不能更新Redboot所在空间的Flash。如果要更新,必须运行RAM模式。

(2) RAM模式:在这种模式下,Redboot驻留和运行都在RAM中。它用于在一些情况下更新基本ROM模式。

(3) ROMRAM模式:在这种模式下,Redboot驻留在ROM(Flash或EPROM)空间中,但在执行之前要复制到RAM中。这时所占用的内存空间要比ROM模式大。它的优点是运行速度快,能更新Redboot在Flash中的映像。4.2.4X86平台下eCos开发环境的建立

1.环境变量的设定在运行eCos配置工具进行开发之前,需要设定eCos环境变量的内容。这些环境变量的作用是告知Linux操作系统图形配置工具configtool的位置、eCos组件库的位置、交叉开发工具的位置等必备的信息。以普通用户模式方式进入Linux操作系统。首先安装eCos源码和交叉开发工具,接着打开超级终端,在bash下运行ecosenv.sh以进行环境变量的设置,然后输入如下命令:

$ECOS_REPOSITORY=/EBD_9315/ecos-2.0.tar.gz_

FILES/ecos-2.0/packages

$PATH=/EBD_9315/ecos-2.0.tar.gz_FILES/ecos-2.0/tools/bin:/EBD_9315/arm-elf-gcc-3.2.1-full.tar.bz2_

FILES/usr/local/arm/3.2.1-elf/bin:…其中,/EBD_9315/ecos-2.0.tar.gz_FILES/ecos-2.0/

packages指定了eCos组件库的位置;/EBD_9315/ecos-2.0.tar.gz_FILES/ecos-2.0/tools/bin指定了图形配置工具configtool的位置;/EBD_9315/arm-elf-gcc-3.2.1-full.tar.bz2_FILES/usr/local/arm/3.2.1-elf/bin指定了交叉开发工具的位置。建立组件库位置变量ECOS_REPOSITOTRY,并将交叉开发工具链相关的路径添加到PATH系统变量中去,这样就可以使用eCos环境进行应用开发了。

2.运行eCos开发环境

下面主要介绍运行eCos开发工具,通过对eCos下自带的图形配置工具进行配置和编译,Redboot最终生成开发板可执行的redboot.bin文件的步骤。

(1)运行Linux环境,进入图形配置工具configtool所在的路径/EBD_9315/ecos-2.0.tar.gz_FILES/ecos-2.0/tools/bin。并在bash中输入./configtool启动配置工具。如果出现有关组件库或工具链查找不到的情况,检查环境变量的设置是否正确。

(2)执行Build菜单下的Templates命令,从中选中所需要的目标硬件平台的类型(EP9315开发板)和配置包类型为Redboot,如图4.4所示。图4.4图形配置工具中硬件平台和配置包的选择

(3)单击“OK”按钮,将会出现配置冲突窗口,如图4.5所示。这是由于选择了不同配置时,某些选项之间可能互相冲突,通过该窗口可以应用eCos的默认规则来解决冲突,为此,直接单击Continue按钮即可。图4.5配置冲突窗口

(4)执行File菜单下的Import条目,从文件选择窗口中选择packages\hal\arm\arm9\ep93xx\v2_0\misc\redboot

_RAM.ecm配置文件。单击“确定”按钮后,同样会出现一个冲突窗口,单击“Continue”解决冲突,会得到如图4.6所示的配置。图4.6特定硬件平台下配置窗口

(5)选择File下面的Saveas命令,保存配置,例如保存为RedBoot_RAM.ecc。

(6)执行Build下的Library命令,建立库文件和可执行文件。如果编译顺利,在信息窗口显示编译完成。输出结果如图4.7所示。图4.7Redboot编译成功编译之后,在保存配置文件的目录下,将会建立三个文件夹,其末尾分别为install、build和mlt。在本次建立的RedBoot_RAM_install/bin目录下,会有redboot.bin可执行文件。若Redboot选择使用ROMRAM启动模式,那么用同样的方式编译了redboot_ROMRAM.ecm文件生成了redboot_ROMRAM.bin文件,下载到目标板能正常使用,至此编译工作完成。4.3Redboot移植4.3.1移植的重点移植工作主要集中在eCos操作系统的HAL(硬件抽象层)和devs(设备驱动)文件夹中。硬件抽象层(HardwareAbstractionLayer)简称为HAL,它负责对目标系统硬件平台进行操作和控制,包括对中断和例程的处理,为上层软件提供硬件操作接口。只需提供新硬件的抽象层,就可以将整个eCos系统包括基于eCos的应用移植到新的硬件平台上。

HAL层可分为:

(1)  CommonHAL(通用抽象层);

(2)   ArchitectureHAL(体系结构抽象层);

(3)  VariantHAL(变体抽象层);

(4)  PlatformHAL(平台抽象层)。这几个层次同样可以在eCos-2.0的软件结构上找到对应关系,以EP9315平台为例对应关系如下:

(1)在路径ecos-2.0\packages\hal\common下可见通用抽象层Common;

(2)在路径ecos-2.0\packages\hal\arm\arch下可见体系结构抽象层Arch;

(3)在路径ecos-2.0\packages\hal\arm\arm9\var下可见变体抽象层Var;

(4)在路径ecos-2.0\packages\hal\arm\arm9\ep93xx下可见平台抽象层ep93xx。体系结构抽象层。eCos所支持的不同处理器系列具有不同的体系结构,如ARM系列、PowerPC系列、MIPS系列等。体系结构抽象层对CPU的基本结构进行抽象和定义,此外它还包括中断的交付处理、上下文切换、CPU启动以及该类处理器结构的指令系统等。变体抽象层指的是处理器在该处理器系列中所具有的特殊性,这些特殊性包括Cache、MMU、FPU等。eCos的变体抽象层就是对这些特殊性进行抽象和封装。平台抽象层是对当前系统的硬件平台进行抽象,包括平台的启动、芯片的选择和配置、定时设备、I/O寄存器访问以及中断寄存器等。硬件抽象层的这三个子模块之间没有明显的界线。对于不同的目标平台,这种区分具有一定的模糊性。例如,MMU和Cache可能在某个平台上属于体系结构抽象层,而在另一个平台上则可能属于变体抽象层的范围;再比如,内存和中断控制器可能是一种片内设备而属于变体抽象层,也可能是片外设备而属于平台抽象层。

eCos的移植通过这三个子模块来完成,即平台抽象层的移植、变体抽象层的移植和体系结构抽象层的移植。对一个新的体系结构来说,其体系统结构抽象层的建立相对来说比较困难,需要编写新的体系结构抽象层。eCos支持大部分当前广泛使用的嵌入式CPU,已具有了支持各种体系结构的硬件抽象层。因此,eCos的移植很少需要进行体系结构抽象层的编写。一般来说,进行eCos开发时,移植的主要工作在平台抽象层上,这是由于eCos已实现了绝大多数流行嵌入式CPU的体系结构抽象层和变体抽象层。平台抽象层主要完成的工作包括:内存的布局、平台早期初始化、中断控制器以及简单串口驱动程序等。4.3.2平台抽象层的移植

Redboot是eCos自带的启动代码,它比eCos要简单,没有使用中断和线程机制,但包含了大部分最基本的功能。建立目标平台的Redboot通常按以下步骤进行。

(1)根据新平台的需要对平台抽象层进行修改。修改的主要内容有:新平台的目录名、组件定义(CDL)、内存布局文件(MLT)、平台初始化的源文件和头文件。

(2)调整组件定义文件(CDL)选项。包括选项的名字、实时时钟/计数器、CYGHWR_MEMORY_LAYOUT变量、串口参数以及其他的一些选项。

(3)在顶层ecos.db文件中加入所需要的包,并增加对目标平台的描述。最初,该目标平台的入口可以只包含硬件抽象层包,其他硬件支持包以后再加入(关于驱动程序对硬件的支持将在下一部分中描述)。经过修改后,就可在eCos配置程序中选择新的平台进行配置。在eCos源码包的ecos-2.0\packages\ecos.db中有关EP9315目标平台和硬件支持包的描述如下:

targetedb9315{

alias

{"CirrusLogicEDB9315evaluationboard"ep9315}

packages{CYGPKG_HAL_ARM

CYGPKG_HAL_ARM_ARM9

CYGPKG_HAL_ARM_ARM9_EP93XX

CYGPKG_DEVS_FLASH_STRATA

CYGPKG_DEVS_FLASH_EDB9312

CYGPKG_DEVS_ETH_ARM_EP93XX

}

description“TheEDB9315targetprovidesthepackagesneededtoruneCosontheCirrusLogicEP9315baseddevelopmentboards.”

set_valueCYGHWR_HAL_ARM_EDB93XX_

VARIANT"EP9315"

}上面的一段程序是对EBD_EP9315目标平台的描述,target的描述会出现在eCos自带的图形配置工具Configtool的Template选项里,target里同时指定了包含的package,如下所示:

packageCYGPKG_HAL_ARM{

alias {"ARMcommonHAL"hal_armarm_halarm_arch_hal} directory hal/arm/arch script hal_arm.cdl hardware description"

TheARMarchitectureHALpackageprovidesgenericsupportforthisprocessorarchitecture.ItisalsonecessarytoselectaspecifictargetplatformHALpackage."

} //有关体系结构抽象层的硬件支持包//

packageCYGPKG_HAL_ARM_ARM9{ alias {"ARM9variant"hal_arm_arm9} directory hal/arm/arm9/var script hal_arm_arm9.cdl hardware

description"TheARM9HALpackageprovidesthesupportneededtorun

eCosonaARM9basedsystems."

} //有关变体抽象层的硬件支持包//

packageCYGPKG_HAL_ARM_ARM9_EP93XX{

alias{"CirrusLogicEP93xxbasedsystems"

hal_

arm_ep93xxarm_ep93xx_hal}

directoryhal/arm/arm9/ep93xx

scripthal_arm_arm9_ep93xx.cdl

hardware

description"TheEP93xxHALpackageprovidesthesupportneededtoruneCosonCirrusLogic

developmentboards."

} //有关平台抽象层的硬件支持包//

packageCYGPKG_DEVS_FLASH_STRATA{ alias {"GenericFLASHmemorysupportforIntelStrataFLASH"strata} directory devs/flash/intel/strata script flash_strata.cdl hardware

description"ThispackagecontainsgenerichardwaresupportforIntel

StrataFLASHmemorydevices."

} //有关Flash的硬件支持包//

packageCYGPKG_DEVS_FLASH_EDB9312{

alias{"CirrusLogicEDB9312FLASHmemorysupport"flash_edb9312}

directorydevs/flash/arm/edb9312

scriptflash_edb9312.cdl

hardware

description"ThispackagecontainshardwaresupportforFLASHmemoryontheCirrusLogicEDB9312(EP93xxeval)platform."

} //有关Flash的硬件支持包//

packageCYGPKG_DEVS_ETH_ARM_EP93XX{

alias{"CirrusLogicEDB9312ethernetdriver"ep93xx_eth_driver}

hardware

directorydevs/eth/arm/ep93xx

scriptep93xx_eth_drivers.cdl

description"EthernetdriverforCirrusLogicEDB93xxdevelopmentboards."

} //有关网口的硬件支持包//

(4)修改include/pkgconf中的内存布局(MLT)文件。按照新的硬件平台内存布局修改MLT文件。MLT文件对应每种启动类型有三个不同后缀的文件:.h文件、.ldi文件和 .mlt文件。手工修改时只需修改 .h文件和 .ldi文件,并保证两个文件同步修改。修改的主要内容有ROM的起始地址、ROM的大小、RAM的起始地址和RAM的大小。

(5)修改平台的I/O宏定义。在include/ep93xx.h文件中完成对平台的各种I/O宏定义,包括各种CPU的系统配置寄存器、内存配置寄存器、串口配置寄存器、LCD配置寄存器、以太网配置寄存器等的I/O地址。

(6)实现简单的串口驱动程序。串口的初始化、接收和发送在src/hal_diag.c文件完成。主要的函数如下:

cyg_hal_plf_serial_init_channel(),完成对某个串口的具体初始化工作;

cyg_hal_plf_serial_putc(),从串口发送一个字符;

cyg_hal_plf_serial_getc(),从串口接收一个字符;

cyg_hal_plf_serial_getc_nonblock(),以无阻塞的方式接收一个字符,即缓冲区中无数据时立即返回;

cyg_hal_plf_serial_isr(),串口中断服务程序;

cyg_hal_plf_serial_init(),调用cyg_hal_plf_serial_init_

channel()函数初始化各串口,并向内核注册串口中断服务程序、串口的读/写例程和配置例程。

(7)修改或增加平台初始化程序。平台初始化在3个文件中完成:src/ep93xx_misc.c、include/hal_platform_

setup.h和include/hal_platform_ints.h。

● hal_platform_ints.h完成系统的中断宏定义。在不同的平台中设备数量和类型不同,中断的译码方式也不一致,需要根据具体情况作出调整(由于在hal_platform_setup.h中,通过设置CPSR关闭了中断请求,不用考虑中断,因此在Redboot移植过程中不用修改此文件)。● hal_platform_setup.h主要完成系统硬件的初步配置, 这里一般要在看门狗和中断关闭后,配置系统时钟频率、ROM和RAM的初始化参数。

● ep93xx_misc.c文件完成目标板的进一步初始化、中断处理、延时例程和操作系统时钟设置。

(8)若要修改运行Redboot和运行Linux系统的串口波特率,可以在ep93xx\cdl\hal_arm_arm9_ep93xx脚本配置文件中进行相应的设置。经过以上修改,底层的平台抽象层就基本完成了,这时可用eCos的配置工具生成Redboot进行测试。4.3.3有关设备驱动的移植由于不同的两块开发板所采用的芯片有可能是不一样的,因此就必须考虑修改Flash驱动。修改Flash配置主要是修改cdl文件。如上一节平台抽象层移植所述在ecos.db的EP9315目标平台中与Flash有关的硬件支持包是:

packageCYGPKG_DEVS_FLASH_STRATA{

alias{"GenericFLASHmemorysupportforIntelStrataFLASH"strata} directory devs/flash/intel/strata

script flash_strata.cdl hardware

description"ThispackagecontainsgenerichardwaresupportforIntel

StrataFLASHmemorydevices."

} //有关Flash的硬件支持包//

packageCYGPKG_DEVS_FLASH_EDB9312{

alias{"CirrusLogicEDB9312FLASHmemorysupport"flash_edb9312}

directorydevs/flash/arm/edb9312

scriptflash_edb9312.cdl

hardware

description"ThispackagecontainshardwaresupportforFLASHmemoryontheCirrusLogicEDB9312(EP93xxeval)platform."

} //有关Flash的硬件支持包//如上所述,除了要修改cdl文件,建立相应的Flash的硬件支持包,并将此新建的Flash支持包包含在EP9315的目标平台描述(targetedb9315)中外,必要时还要修改相应驱动的flash.c文件。对于我们的EP9315开发平台上的Flash而言,硬件支持包packageCYGPKG_DEVS_FLASH_STRATA包含了对Flash进行操作的源程序;硬件支持包packageCYGPKG_

DEVS_FLASH_EDB9312包含了对Flash进行操作时所涉及的头文件,头文件中定义了Flash的数据位宽度、Flash芯片数、Flash基地址位置、Flash容量大小等信息。4.3.4实现64MBFlash容量所做的移植工作

实现64MBFlash容量所做的移植工作主要包括以下几点:

1. ecos-2.0/packages/hal/arm/arm9/ep93xx/v2.0/

includ/pkgconf● mlt_arm_arm9_edb9315_romram.ldi

rom:ORIGIN=0x60000000,LENGTH=0x2000000改为:

rom:ORIGIN=0x60000000,LENGTH=0x4000000● mlt_arm_arm9_edb9315_romram.mlt

regionrom6000000020000001!改为:

regionrom6000000040000001!● mlt_arm_arm9_edb9315_romram.h

#defineCYGMEM_REGION_SIZE(0x2000000)改为:

#defineCYGMEM_REGION_SIZE(0x4000000)

2. devs/flash/arm/edb9312/v2_0/include/

edb9312_strataflash.inl● defineCYGNUM_FLASH_BASE_MASK(0xFE00_0000u)//for32Mbytesflash改为:

defineCYGNUM_FLASH_BASE_MASK(0xFC00_0000u)

//for64MBFlash3. devs/flash/intel/strata/v2_0/src/falsh_unlock_block.c● #defineMAX_FLASH_BLOCKS128改为:

#defineMAX_FLASH_BLOCKS2564. packages/hal/armarm9/ep93xx/v2_0/include/

hal_platform_setup.h

//

//Createaread-writemappingofFLASHatvirtualaddress0x6000_0000.

//

addr1,r0,#0x00001800#ifdefined(HAL_PLATFORM_EP9301)||defined(HAL_

PLATFORM_EP9302)

movr2,#0x00000040#else

movr2,#0x00000080改为movr2,#0x00000100#endif

orrr3,r12,#0x00000012

orrr3,r3,#0x00000c004.4下载和使用Redboot4.4.1下载Redboot这里提供的目标板已经在Flash中写好了Redboot,一般情况下不需要重新写Redboot。要是发生了某种意外,可能需要重新写入和设置Redboot,Redboot是通过使用仿真器利用JTAG接口烧入Flash的。图4.8至图4.12所示为Redboot烧写步骤示意图,具体操作步骤如下。

(1)打开“Multi-ICEServer”,显示界面如4.8所示。图4.8“Multi-ICEServer”程序运行界面

(2)打开目标板电源,单击,检测到硬件,如图4.9所示。图4.9检测硬件

(3)启动AXD环境。选择菜单栏“Options”下“Configuretarget”选项,出现对话框“ChooseTarget”,如图4.10所示,然后单击“OK”。图4.10AXD环境下的“ChooseTarget”对话框(4)下载redboot.bin文件到SDRAM。在AXD环境下,单击工具按钮,选择redboot.bin所在的路径,并将“Address”设置为0x1000000(0x1000000指定redboot.bin下载到SDRAM中的地址),如图4.11所示,然后单击“打开”。图4.11下载redboot.bin文件到SDRAM(5)使用ADS下的Flash烧写程序pro_flash.axf将SDRAM中的redboot.bin烧入Flash的指定地址。在AXD环境下,右键单击,使用“loadImage”选项找到pro_flash.axf的存放路径,选择“打开”,如图4.12所示。图4.12从SDRAM中烧写redboot.bin到Flash(6)在AXD环境下单击运行pro_flash.axf烧写程序,等待redboot.bin烧写完成。待烧写完毕后,关闭目标板开关;拔掉仿真器;用串口线连接目标板的uart1口和PC机的COM1口;并连接目标板和PC机的网络接口;设置Windows下的超级终端(如图4.13所示),其中“每秒位数”设为57600。图4.13超级终端的设置

重新开启目标板开关,在超级终端中可看到Redboot的启动画面,如图4.14所示。图4.14Redboot启动画面4.4.2配置和使用Redboot烧写Redboot之后,我们要对启动脚本进行设置,具体步骤如下:

(1)首先运行fisinit进行初始化操作:

RedBoot>fisinit

(2)运行fconfig-i命令配置启动脚本(其中粗体字为要输入或修改的部分):

RedBoot>fconfig-i

>>fisloadramdisk.gz

>>fisloadzImage

>>exec-r0x800000-s0x600000

(3)接下来配置开发板的IP地址、子网掩码等信息,配置完成后复位,使网络配置生效。这样,启动脚本就设置好了。4.4.3下载Linux内核和文件系统启动脚本设置好之后我们就要将内核和文件系统下载到目标板上。此时先要在PC机上开启TFTP服务,内核和文件系统是通过网口从PC机下载到目标板的。并使TFTP指向目标板所需文件。配置TFTP的步骤如图4.15、图4.16、图4.17和图4.18所示。图4.15TFTP配置(1)点击Configure出现如图4.16所示对话框。图4.16TFTP配置口点击Browse出现图4.17所示窗口,选中zImage和ramdisk.gz所在的目录,然后单击“确定”按钮。图4.17TFTP配置(3)最后单击“OK”,完成TFTP的设置。再单击Tftpd下面的Start开启TFTP服务,如图4.18所示。图4.18TFTP配置(4)

1.下载文件系统

Redboot>load-r-v-b0x800000ramdisk.gz//将ramdisk.gz读到内存地址0x800000处

\

Rawfileloaded0x00800000-0x00dae46e,assumedentryat0x00800000因为文件比较大,可能需要一点时间。下载好之后再烧到Flash上面。以下是从SDRAM内存到Flash的烧写语句,其中0x800000为内存地址,0x600000为ramdisk.gz文件的长度(要求比ramdisk的实际大小大一点)。Redboot>fiscreate-b0x800000-l0x600000ramdisk.gz…Erasefrom0x60040000-0x60640000:…Programfrom0x00800000-0x00e00000at0x60040000:...Erasefrom0x63fc0000-0x64000000:...Programfrom0x07fbf000-0x07fff000at0x63fc0000:.

2.下载内核

Redboot>load-r-v-b0x80000zImage

\

Rawfileloaded0x00080000-

温馨提示

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

评论

0/150

提交评论