在vxWorks下的BSP开发指南.docx

上传人:牧羊曲112 文档编号:3379407 上传时间:2023-03-12 格式:DOCX 页数:27 大小:51.18KB
返回 下载 相关 举报
在vxWorks下的BSP开发指南.docx_第1页
第1页 / 共27页
在vxWorks下的BSP开发指南.docx_第2页
第2页 / 共27页
在vxWorks下的BSP开发指南.docx_第3页
第3页 / 共27页
在vxWorks下的BSP开发指南.docx_第4页
第4页 / 共27页
在vxWorks下的BSP开发指南.docx_第5页
第5页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《在vxWorks下的BSP开发指南.docx》由会员分享,可在线阅读,更多相关《在vxWorks下的BSP开发指南.docx(27页珍藏版)》请在三一办公上搜索。

1、在vxWorks下的BSP开发指南基于VxWorks的BSP开发指南 1 BSP概述 一个成熟的商用操作系统,其被广泛应用的必要条件之一就是能够支持众多的硬件平台,并实现应用程序的硬件无关性。一般来说,这种无关性都是由操作系统实现的。 但对于嵌入式系统来说,它没有像PC机那样具有广泛使用的各种工业标准,各种嵌入式系统其不同的应用需求就决定了它一般都选用了各自定制的硬件环境,这种诸多变化硬件的环境就决定了无法完全由操作系统来实现上层软件与底层硬件之间的无关性。 因此各种商用实时操作系统,都采用了分层设计的方法,它将系统中与硬件直接相关的一层软件独立出来,称之为Board Support Pack

2、age即简称BSP。顾名思义,BSP是针对某个单板而设计的,并且它对于用户也是开放的,用户可以根据不同的硬件需求对其作改动或二次开发,而操作系统本身仅仅提供了CPU内核的无关性。BSP在系统中的角色,很相似于BIOS在PC系统中的地位。 定义 BSP就是为软件操作系统正常运行提供最基本、最原始的硬件操作的软件模块,它和操作系统息息相关,但又不属于操作系统的一部分。BSP可以分为三大部分: 1:系统上电时的硬件初始化。 2:为操作系统访问硬件驱动程序提供支持。 3:集成的硬件相关和硬件无关的操作系统所需的软件模块。 BSP的表现形式 BSP主要以两种形式来表现: 1:源代码、系统编译连接依靠文件

3、。 2:二进制的目标代码和目标代码库。 BSP在软件系统中的位置 BSP在软件系统中的位置可以用下图来表示,BSP为操作系统和硬件设备的I/O系统 和硬件无关的系统软件模块 操作系统库 TCP/IP 文件系统 MUX 硬件相关的系统软件模块 Flash/SCSI Driver 操作系统内核 BSP Lan Driver 硬件 Flash/SCSI Controller Lan 控制器 互操作建了一个桥梁,操作系统通过BSP来完成对指定硬件的配置和管理。 SCC Timer 2 vxWorks系统中的BSP 目录结构 BSP软件与其他软件的最大区别在于BSP软件有一整套模板和格式,开发人员必须严

4、格遵守,不允许任意发挥。在BSP软件中,绝大部分文件的文件名和所要完成的功能都是固定的。所以,BSP软件的开发一般来说都是在一个基本成型的BSP软件上进行修改,以适应不同单板的需求。 针对某类CPU的硬件单板,vxWorks通常提供有其DEMO板的BSP, 这些程序位于指定的目录之下。也就是我们所说的最小系统BSP。一般来说,我们在硬件系统设计好之后,都会先找到一个与自己系统相近的DEMO板BSP。并以此为基础,开发自己单板的BSP。 VxWorks BSP的目录结构: BSP文件主要位于Tornado安装之后的Target目录下,具体目录结构如下: config目录:用于vxWorks核心的

5、配置及编译的文件。其中又包含多个子目录。 all目录:通用的配置文件 comps目录:用于Tornado工程管理工具配置的源文件 bspname目录: 每个单板都有一个相应目录,命名可根据单板而定,其中包含有关此单板BSP的代码文件,目标文件及编译文件等,这也就是我们通常所说的单板BSP。 h目录:其中包含所有vxWorks操作系统的头文件及通用编译文件。其中的各个子目录表示了vxWorks中不同模块的头文件。 lib目录:由vxWorks为不同平台提供的库文件及目标文件。 src目录:vxWorks提供的部分硬件芯片驱动程序的源代码文件,其又包含多个子目录: config目录:有关vxWor

6、ks操作系统的一些通用的源代码文件。 drv目录:vxWorks中一些硬件芯片的通用驱动程序源代码文件,其根据不同功能的芯片分为若干个子目录,例如end 表示网口驱动,sio表示串口驱动等 unsupported目录:其中包含一些较古老的硬件BSP代码。 3 三种不同的VxWorks映象比较 理解VxWorks映象是开发VxWorks BSP的基础。 VxWorks映象通常由三个部分组成:BSP、操作系统内核和上层应用。从文件的组织形式上可以将映象分为三段:BSS段、Data段和Text段。其中,BSS段存放的是未初始化的全局变量或静态变量,Data段存放的是已经初始化的全局变量或静态变量,T

7、ext段存放的是可执行的代码。 根据应用场合的不同,VxWorks映象可分为三类: Loadable images Rom-based images Rom-resident images 其中,Loadable images通过烧写在ROM中的Bootrom装载到RAM中来启动;Rom-based images使用自身带的启动代码把自己装载到RAM中来启动;而Rom-resident images在ROM中启动,只是把需要动态修改的Data段和BSS段装载到RAM中去。 3.1 可加载的VxWorks映象 这是一种运行于RAM的VxWorks映象。它不包含搬移程序,需要借助于一些外部的程序如

8、bootRom才能加载到RAM的低端RAM_LOW_ADRS地址处。这是缺省的开发映象。 在开发的初期阶段,用户可以根据需要添加或删除一些VxWorks组件,生成自己的可加载的VxWorks映象,存放在开发主机的某个目录下。目标板上电后,由烧结在BOOT中的起始引导程序(BootStrap Programs)将BOOT中的ROM引导程序拷贝到RAM的高端地址RAM_HIGH_ADRS处,并跳转至该地址执行ROM引导程序,配置好所选的加载方式,将指定的主机目录下的可加载的VxWorks映象下载到目标板的RAM地址RAM_LOW_ADRS处,并跳转到此处执行。如图1所示。 图1、可加载的VxWor

9、ks映象 这种映象的优点是生成的VxWorks映象可以存放在开发主机PC机上,不用烧到BOOT中,节省了BOOT容量,也便于随时修改不同的VxWorks映象,适用于调试的初期阶段。不足之处是需要在主机上维护一个正确的VxWorks映象,对于调试硬件无关的上层应用程序显得不是很方便。 在Tornado工作台的Build窗口中,选择Rules属性页中的VxWorks即可生成可加载的VxWorks映象。 3.2 基于ROM的VxWorks映象 这是一种运行于RAM中,但起初存放于ROM中的VxWorks映象。即该映象需要和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT中的引导搬移程序,

10、将整个VxWorks映象拷贝到RAM地址RAM_LOW_ADRS处,并跳转到此处执行。如图2所示。 图2 基于ROM的VxWorks映象 该映象根据是否被压缩又可分为: l 基于ROM的未压缩的VxWorks映象,可直接从ROM拷贝到RAM中 l 基于ROM的压缩的VxWorks映象,这种映象主要是为了节约BOOT空间,在从ROM拷贝到RAM的过程中需要解压缩,因此与上述未压缩的映象相比,它的引导过程相对较慢,但两者在RAM中的运行速度是一样的。 3.3 驻留ROM的VxWorks映象 这种映象起初也和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT中的引导搬移程序,但仅将VxWo

11、rks映象的数据段和BSS段拷贝到RAM地址RAM_LOW_ADRS处,映象的代码段仍旧留在ROM中,从ROM中开始执行。如图3所示。 这种映象的优点是具有最快的引导速度,占用最少的RAM空间,适用于RAM空间有限的目标板。但是由于该映象在ROM中运行,运行速度在三种映象中是最慢的。 图3 驻留ROM的VxWorks映象 4 几种不同的BOOTROM的比较 针对上述三种不同的VxWorks映象,可以生成以下几种不同的BOOTROM,主要体现在执行搬移程序romStart( )( 位于bootInit.c文件中)时不同: 4.1 用于可加载VxWorks映象的BOOTROM 由图1所示可知,用于

12、可加载VxWorks映象的BOOTROM包含两部分:起始引导程序。 起始引导程序驻留在ROM中,主要包含: l 汇编级的硬件初始化程序romInit.s,用于系统的基本初始化,设置一些重要寄存器的初始值,进行存储器的映射 l 搬移程序bootInit.c,将ROM引导程序拷贝至RAM的高端地址RAM_HIGH_ADRS,然后跳转到此处执行ROM引导程序。 ROM引导程序起初存放在ROM中,初始化时被拷贝到RAM中,主要用于系统的进一步初始化,并配置加载方式,将VxWorks映象加载至RAM。可分为三种不同的类型: l 压缩的ROM引导程序,在拷贝的过程中需要解压缩,在RAM中执行 l 未压缩的

13、ROM引导程序,可直接拷贝,在RAM中执行 l 驻留ROM的ROM引导程序,仅拷贝ROM引导程序的数据段,代码段仍旧在ROM中执行 在Tornado开发环境中,通过在主窗口点击Build|Build Boot ROM可以选择生成以上 三种BOOTROM,分别为:bootrom_uncmp.hex(未压缩的BOOTROM),bootrom.hex(压缩的BOOTROM),bootrom_res.hex。 静态连接到可加载的VxWorks映象的系统初始化代码执行并完成整个初始化过程。 引导过程成功以后,RAM中ROM引导程序占用的空间可以重新被系统利用。 图1中所示的各地址含义为: l LOCAL

14、_MEM_LOCAL_ADRS是RAM的起始地址 l RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置 l FREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址 l RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。 4.2 用于基于ROM的VxWorks映象的BOOTROM 由图2所示可知,用于该映象的BOOTROM包含两部分:起始引导程序和基于ROM的VxWorks映象。搬移程序bootInit.c负责将VxWorks映象的文

15、本段和数据段搬移到用户定义的低端内存地址RAM_LOW_ADRS,如果需要进行必要的解压缩,然后直接启动VxWorks映像。 因此BOOTROM的容量相对于1节中描述的BOOTROM要大一些,但无需在主机目录下维护一个可用的VxWorks映象。 基于ROM的VxWorks BOOTROM有压缩和未压缩之分。在Tornado工作台的Build窗口中,选择VxWorks映象Rules属性页中的VxWorks_rom即可生成基于ROM的未压缩的VxWorks BOOTROM,选中VxWorks_romCompress即可生成基于ROM的压缩的VxWorks BOOTROM。 4.3 用于驻留ROM的

16、VxWorks映象的BOOTROM 由图3所示可知,用于该映象的BOOTROM包含两部分:起始引导程序。此时,RAM_LOW_ADRS是VxWorks映象的加载点,它也是VxWorks数据段的起始点。 在Tornado工作台的Build窗口中,选择VxWorks映象Rules属性页中的VxWorks_romResident即可生成驻留ROM的VxWorks BOOTROM。 5 BSP的执行流程 下面以“BootRom + vxWorks”的启动形式说明BSP的执行流程: BootStrap程序 在ROM中执行 romInit.s : romInit 设置机器状态字及其它硬件相关寄存器,关闭中

17、断,禁止程序和数据CACHE,初始化内存,并设置堆栈指针 bootInit.c : romStart( ) 将ROM中的程序搬移至RAM中 ROM Boot程序 被搬移到RAM中执行 bootConfig.c : usrInit( ) 设置cache的工作模式,板级硬件初始化,调用sysHwInit( ),usrKernelInit( ),KernelInit( ),初始化Win内核,产生根任务usrRoot( ) bootConfig.c : usrRoot( ) 初始化内存,系统时钟,I/O系统,标准输入输出错,异常处理,产生任务bootCmdLoop bootConfig.c : boo

18、tCmdLoop( ) 调用自动引导程序autoboot( ),此函数若成功则不返回 bootConfig.c: autoboot( ) 延时7s,以默认参数启动 等待超时 用户按键中断 bootConfig.c: bootLoad( ) 加载VxWorks映象,并转向它进行重启 bootConfig.c :bootCmdLoop( ) 启动命令行用于配置VxWorks启动参数 用户输入 开始在RAM中运行VxWorks sysALib.s : sysInit( ) 锁住中断,关闭cache,初始化处理器的寄存器至缺省值 usrConfig.c : usrInit( ) 设置cache的工作模

19、式,板级硬件初始化,初始化Win内核,启动usrRoot( ) usrConfig.c : usrRoot( ) 初始化内存,系统时钟,I/O系统,标准输入输出错,异常处理,添加用户应用程序 5.1 BOOTROM的启动过程 1、 目标板加电之后,程序指针指向RESET中断程序入口处,开始执行初始化程序romInit.s,设置机器状态字及其它硬件相关寄存器,关闭中断,禁止程序和数据CACHE,初始化内存,并设置堆栈指针,保存启动类型,调用romStart( )。 2、 程序跳到第一个C程序bootInit.c的函数romStart( )入口地址,根据堆栈中的参数决定是否清零内存RAM则清零),

20、根据不同的bootrom文件,把ROM中数据段和文本段拷贝到RAM; 3、 程序跳到RAM入口地址,根据用户配置来设置cache的工作模式,清零bss段,初始化异常处理程序,进行板级硬件初始化sysHwInit( )。 4、 启动多任务内核KernelInit( ),执行usrRoot任务。在该任务中初始化串口,创建console终端设备。创建bootCmdLoop任务,根据单板设计选择不同方式加载VxWorks映像文件,如通过串口、网口、硬盘等方式。 5.2 VxWorks映象的启动过程 VxWorks进入点sysInit 启动VxWorks系统的第一步就是将系统映象加载到主内存。这通常是在

21、VxWorks boot Rom 的控制下,从开发主机上下载。接着,boot Rom将控制权交给VxWorks的起始进入点:sysInit。在makefile和 config.h文件里,已将这个进入点设置成位于地址RAM_LOW_ADRS。 函数sysInit位于系统特定的汇编语言模块sysALib.s中。它可以锁住中断,关闭cache,初始化处理器的寄存器至缺省值。它还会关闭跟踪,清除所有未决的中断,并调用一个位于usrConfig.c 模块的C语言子程序:usrInit 。对于某些目标板,sysInit还执行一些必要的与系统有关的硬件初始化,以便在usrInit中执行完剩余的初始化内容。仅

22、供usrInit使用的初始堆栈指针,被设置成位于系统映象(RAM_LOW_ADRS)以下,向量表以上的位置。 初始化代码usrInit 函数usrInit,储存有关引导类型的信息,处理在内核启动之前必须执行的初始化,而后启动内核执行。它是运行于VxWorks内的第一个C函数。此时,所有的中断都已被锁住。 许多VxWorks工具在usrInit( )中都不能使用。这是因为此时还没有任务的上下文,那些需要任务上下文的工具无法被调用。函数usrInit( )仅做一些创建初始化任务usrRoot( )所必须的工作。然后由usrRoot( )完成启动过程。 usrInit( ) 中的初始化过程如下所述:

23、 Cache初始化 usrInit( ) 的起始代码初始化cache,设置cache 模式,并将cache放置在一个安全的位置。在usrInit( )结束时,缺省情况下,指令cache和数据cache被使能。 对系统的BSS段清零 C 和C+语言规定所有未初始化的变量缺省的初始值为零。这些未初始化的变量被放置在一个称为bss的段内。由于usrInit( )是系统执行的第一个C代码,在它的一开始对包含bss段的内存清零。VxWorks的boot ROM 也会清内存,但VxWorks映象假设没有采用boot ROM,仍然执行清内存的操作。 初始化中断向量 异常向量必须在使能中断和启动内核之前建立。

24、首先,调用intVecBaseSet( ) 建立向量表基地址。而后,调用excVecInit( ) 初始化所有的异常向量至缺省句柄,以便安全地捕获和报告由程序错误或意外的硬件中断导致的异常。 初始化硬件至静止状态 通过调用系统相关函数sysHwInit( )初始化系统硬件。该函数复位并关闭那些在中断使能以后可能产生中断的硬件设备。这一点很重要,因为VxWorks ISRs直到在任务usrRoot( )中完成系统初始化以后,才被连接到它们的中断向量上。不要在sysHwInit( ) 调用中试图为一个中断连接一个中断句柄,因为此时内存池还没有初始化。 初始化内核 函数usrInit( )结束时调用

25、了两个内核初始化函数: usrKernelInit( )(在usrKernel.c中定义)为每个指定的可选内核组件调用合适的初始化代码。 kernelInit( ) (kernelLib.c的一部分)初始化多任务环境,不用返回。函数参数包括: l 用以产生作为根任务的应用程序,典型的为usrRoot( ) l 使用的堆栈大小 l 可用的起始内存地址,一般位于VxWorks映象的代码段,数据段和bss 段之后,如果包含可选的主机内存池,则还要加上WDB_POOL_SIZE。 l 由sysMemTop( )定义的内存顶部 l 中断堆栈的大小 l 中断封锁级别 kernelInit( ) 调用int

26、LockLevelSet( ),关闭循环模式,创建一个中断堆栈,就可以通过调用驱动器的初始化函数将它安装进I/O系统。实际的设备是通过调用驱动器的设备创建函数来创建和命名的。这个函数的参数包括设备名称,一个串行I/O通道描述字,和输入输出缓存大小。 宏NUM_TTY定义了tty口的数量。宏CONSOLE_TTY指定了哪个口作为控制台口,宏CONSOLE_BAUD_RATE指定了其比特率。这些宏都在configAll.h中定义,但对于那些具有非标口数的单板可以在config.h中对它们进行重新定义。 设置标准输入、标准输出和标准出错信息 系统级的标准输入、标准输出和标准错误信息的配置是通过打开控

27、制台设备并调用ioGlobalStdSet( )来建立的。这些配置作为VxWorks的缺省设备用于与应用开发人员通讯。为了使控制台设备成为一个交互式的终端,调用ioctl( )将设备选项设为OPT_TERMINAL。 安装异常处理和登录 初始化VxWorks的异常处理工具和登录工具(由logLib库提供)。这些工具检查在根任务内部或者初始化各种工具时产生的程序错误。 当定义了宏INCLUDE_EXC_HANDLING和INCLUDE_EXC_TASK后,调用excInit( )初始化异常处理工具。excInit( ) 函数产生一个异常支持任务excTask( )。初始化以后,可以安全地捕获和报

28、告导致硬件异常的程序错误,报告并解除没有初始化向量的中断。当定义了INCLUDE_SIGNALS后,调用sigInit( )初始化VxWorks的信号工具,该工具用于任务的异常处理。 当定义了INCLUDE_LOGGING宏以后,调用logInit( )初始化登录工具。其参数定义了显示登录信息的设备的文件描述字,和分配的登录信息缓存数。登录初始化还创建了一个登录任务logTask( )。 初始化管道驱动 如果需要所谓的管道,在configAll.h中定义INCLUDE_PIPE,就会自动地调用pipeDrv( )初始化管道。而后任务就可以利用管道通过标准的I/O接口互相通讯了。管道必须由pip

29、eDevCreate( ) 函数创建。 初始化标准I/O 当定义了宏INCLUDE_STDIO以后,VxWorks 就会包含一个可选的标准I/O包。 创建文件系统设备并初始化设备驱动 许多VxWorks配置至少包含一个磁盘驱动器,或带有dosFs/rt11Fs/rawFs文件系统的RAM磁盘。首先,通过调用驱动器的初始化代码安装一个磁盘驱动器。而后,驱动器的设备创建代码会定义一个设备。这个调用会返回一个指向描述设备的BLK_DEV结构的指针。 然后就可以调用文件系统的设备初始化代码dosFsDevInit( ), rt11FsDevInit( ), or rawFsDevInit( )初始化和

30、命名设备。在初始化一个设备之前,必须用dosFsInit( ), rt11FsInit( )或 rawFsInit( )初始化文件系统模块。文件系统的设备初始化函数的参数取决于特定的文件系统,但典型的包括设备名称,由驱动器的设备创建代码产生的一个指向BLK_DEV结构的指针,可能还有一些文件系统特定的配置参数。 初始化浮点支持 如果在configAll.h中包含了INCLUDE_FLOATING_POINT宏定义,则调用floatInit( )函数初始化浮点I/O支持。当定义了INCLUDE_HW_FP,调用mathHardInit( )初始化对浮点协处理器的支持。当定义了INCLUDE_SW

31、_FP,调用mathSoftInit( )初始化对软件浮点仿真的支持。 包含性能仿真 VxWorks具有两个内嵌的性能监视工具。一个由spyLib提供的任务活动综述,一个由timexLib提供的子程序执行定时器。如果在configAll.h中定义了宏INCLUDE_SPY 和INCLUDE_TIMEX,就会包含这些工具。 初始化网络 如果配置头文件中定义了INCLUDE_NET_INIT,usrRoot( )就会调用usrNetInit( )函数初始化网络。usrNetInit( )函数使用了一个配置字符串作为它的参数。这个配置字符串通常是一条“引导行”,用于VxWorks的boot ROM引

32、导系统。根据这个字符串,usrNetInit( )函数执行以下操作: l 调用netLibInit( )初始化网络子系统 l 连接并配置合适的网络驱动器 l 添加网关路由 l 初始化远程文件存取驱动器netDrv,并添加一个远程文件存取设备 l 初始化远程登录工具 l 可选地初始化远端程序调用 l 可选地初始化网络文件系统工具 如前所述,是否包含这些网络工具由configAll.h中的宏定义决定。 初始化可选产品和其它组件 可选产品VxMP可提供共享内存目标。如果定义了宏INCLUDE_SM_OBJ,usrRoot( )就会调用usrSmObjInit( )函数。这个函数初始化通讯接口,然后启

33、动代理。 执行一个启动脚本 如果VxWorks配置了目标驻留的shell,定义了INCLUDE_STARTUP_SCRIPT,并且在boot引导过程中在启动脚本参数中输入了脚本文件的名称,usrRoot( )函数就可以执行一个用户提供的启动脚本。如果在引导过程中忽略了启动脚本参数,就不会执行启动脚本。 可加载VxWorks映象的初始化过程 函 数 函 数 功 能 所 在 文 件 sysInit (a)锁住中断;(b)禁用缓冲; sysALib.s (c)用缺省值初始化系统中断表 (a)调用sysClkConnect,sysClkRateSet, iosInit,ttyDrv; (b)初始化ex

34、cInit,logInit,sigInit. (c)初始化管道,pipeDrv; (d)stdioInit,mathSoftInit或mathHardInit (e)wdbConfig:配置并初始化目标代理机 kernelLib.h usrConfig.c 6 调试方法 6.1 ICE方式: 在串口和网口初始化及发挥功能以前,用仿真器调试是一种相对来讲很方便手段。 BSP软件的调试通常需要利用仿真器来进行。目前市场上的大多数仿真器都能支持JTAG接口。典型的仿真器调试环境如下图所示: RS232调试计算机RS232仿真器JTAG目标板调试计算机通过RS232接口与仿真器相连,完成对仿真器的初始

35、化配置工作,通常这项工作只在第一次使用仿真器时进行,配置结果一般会被仿真器存储起来。仿真器通过以太网口与调试计算机相连,通过JTAG接口与目标板相连,利用这条通路,仿真器就可将计算机上的程序下载到目标板上进行调试。 目标板上的串口和以太网口为被调试的对象,和调试计算机相连,主要是可以通过调试计算机检验目标板上的接口是否工作正常。 在仿真器环境下,既可以调试vxWorks映象,也可以调试bootrom映象。当调试BootRom映象时,需要修改CONFIG.H和MAKEFILE文件将这段代码定位到RAM中,然后通过仿真器下载到目标板上的RAM中进行调试。 ENET6.2 “黑”调: 方法是加“灯”

36、、用示波器测片选等,目的是打通串口,达到宿主机与目标机的通信。 “黑”调的工程步骤: 烧ROM Build 最简IMAGE 串口OK NO yes Modify BSP “黑”调 Build BSPlib START download Bsp其他部分ok YES 增加bsp 其他部分 BSP完成 NO Build ram 类型image Build image 验证其他部分 7 BSP实际开发的主要过程 1研读所选CPU的资料。 2研读硬件设计文挡。 3研读电路板中重要器件的资料。 4找一个BSP模板,熟悉它并在此基础上开发自己的BSP。从头研制BSP工作量极大,也没有必要。 5利用仿真器进行

37、调试,开发最小BSP系统。 6在最小BSP的基础上,利用Tornado集成开发环境,进一步调试外围设备,配置、完善系统。 8 主要文件及宏开关介绍 以est8260评估板为例,说明编制BSP软件所涉及的主要文件及宏开关。 8.1 Makefile文件 位于BSP文件目录下的编译文件Makefile,定义了启动文件bootrom首地址及大小,以及编译时调用的函数库,VxWorks映像文件的加载地址,用户需增加的目标模块。 该文件中的主要宏定义: CPU = PPCEC603 目标板的CPU类型,MPC750为PPC604,MPC8260为PPCEC603 TOOL = gnu 主机工具为基于GN

38、U的工具,用户不必修改 TGT_DIR = $(WIND_BASE)/target target所在目录(WIND_BASE)已在torVars.bat中指定,为Tornado的安装目录 include $(TGT_DIR)/h/make/defs.bsp 定义编译选项 include $(TGT_DIR)/h/make/make.$(CPU)$(TOOL) 即文件make.ppc860gnu include $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE) 即defs.x86-win32,定义和主机操作平台相关的工具 注意: 只能在这个位置之后重新定义make

39、的定义。 TARGET_DIR = est8260 目标板BSP目录名,用户需指定为目标板BSP文件所在目录 VENDOR = EST BOARD 目标板制造商,和BSP程序无关,作注释用 = est8260 Evaluation SBC 目标板名,和BSP程序无关,作注释用 BOOTINIT = bootInit.c USRCONFIG = usrConfig.c 系统编译bootrom时会自动编译用户BSP文件目录下的usrConfig.c和bootInit.c,缺省文件位于All目录下。 以下地址值都为十六进制值,无需加入0x前缀。在config.h和Makefile中都定义了ROM_T

40、EXT_ADRS, ROM_SIZE, RAM_HIGH_ADRS等常量,在2个文件中的对常量的定义要求一致。 ROM_BASE_ADRS = fff00000 ROM的物理起始点 ROM_TEXT_ADRS = fff00100 根启动设备Boot ROM首地址 ROM_SIZE = 00080000 BOOTROM大小 LOCAL_MEM_LOCAL_ADRS = 00000000 RAM的物理起始点 LOCAL_MEM_SIZE = 01000000 RAM大小 RAM_LOW_ADRS = 00100000 加载VxWorks的目标地址 RAM_HIGH_ADRS = 00a00000

41、 拷贝boot ROM文本段和数据段的目标地址 HEX_FLAGS = -a $(ROM_TEXT_ADRS) Hex文件转化为bin文件的执行程序参数 MACH_EXTRA = m8260CpmEnd.obj 用户加入的目标模块名,后缀为obj LDFLAGS = -X -N -Map est8260.map 在连接标识中增加-M est8260.map可以在BSP目录下生成包含编译信息的est8260.map文件。 注意:只能在这个位置之前重新定义make的定义。 include $(TGT_DIR)/h/make/rules.bsp include $(TGT_DIR)/h/make/r

42、ules.$(WIND_HOST_TYPE) 定义编译各种BSP文件的生成规则 8.2 all/ConfigAll.h文件 此文件包含了适用于所有目标板的缺省定义。主要定义了以下选项和参数: 内核配置参数 I/O系统参数 NFS 参数 选择可选的软件模块 选择可选的设备控制器 cache模式 最大数量的不同共享内存目标 设备控制器I/O地址,中断向量和中断级别 8.3 config.h文件 此文件位于BSP目录下,包含仅适用于特定目标板的定义,还可以对configAll.h中的缺省定义进行重定义。其主要内容为: 1、BSP版本号 #define BSP_VER_1_1 1 #define BS

43、P_VERSION 1.2 #define BSP_REV /4 2、configAll.h 包含文件,应放在BSP_VERSION和BSP_REV定义之后 #include configAll.h 3、定义缺省的BOOT引导设备 #define DEFAULT_BOOT_DEVICE CPM_END 4、定义网络控制器 #define INCLUDE_CPM ;使用SCC以太网控制器 5、定义缺省的BOOT引导参数 #define DEFAULT_BOOT_LINE $dev(0,procnum)host:dirfile h=# e=# b=# g=# u=usr pw=passwd f=#

44、 tn=targetname s=script o=other $dev - boot device,启动的设备类型,必须是已包含的设备。 procnum - 处理器序号,一般从零开始。 host - 主机名 dir:file - 被加载的VxWorks文件所在的完整路径 h - 主机IP e - 目标板IP b - 背板IP,用户可不定义 g - 网关,用户可不定义 u - 用户名 pw - 登录口令 f - 定义网络加载方式。无此项时缺省值为零,为FTP tn - 目标板名 s - 启动描述字符串,用户可不定义 o - 从SCSI启动时指明网络接口 依据不同的启动设备类型,其中某些项可无。

45、例如: #define DEFAULT_BOOT_LINE motec(0,0)diags:c:vxWorks h=172.96.36.88 e=172.96.78.23 g=172.16.0.1 u=anonymous pw=user f=0x00 tn=est8260 6、缓冲和MMU工作方式 #define INCLUDE_CACHE_SUPPORT #define USER_I_CACHE_ENABLE #define USER_D_CACHE_ENABLE #define INCLUDE_MMU_BASIC #define USER_I_MMU_ENABLE #define USER

46、_D_MMU_ENABLE 7、包含必要的网络驱动 #define INCLUDE_NETWORK #define INCLUDE_END 8、定义内存地址和大小 应与Makefile中的定义一致 #define USER_RESERVED_MEM 0x00000000 目标板用户保留内存大小 #define ROM_WARM_ADRS (ROM_TEXT_ADRS+8) 热启动地址,为ROM_TEXT_ADRS的一个偏移量,由启动文件romInit.s中跳转语句 bl start相对第一条执行语句的偏移量 。 8.4 target.h文件 本文件定义和目标板硬件相关的宏。用户应根据目标板硬件对时钟频率、内存空间分配、串口数目等进行设置。 8.5 romInit.s文件 此文件是系统上电运行的第一个程序,也是制作BOOTROM时需要重点修改的程序,与硬件配置紧密相关。 可能需要修改: 机器状态寄存器MSR 内部存

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号