-- 作者:wangxinxin
-- 发布时间:2010-12-1 11:17:27
-- 基于MPC860/VxWorks的嵌入式系统开发
Research on the Developing of Embedded Abstract: The article introduces the characters of embedded processor MPC860 and embedded real-time operation system VxWorks and describes the process of embedded system development based on MPC860/ VxWorks which uses BDM to write bootrom file, uses FIP to download VxWorks image and uses Tornado integrated developing circumstance to download and debug applying program. Key Words: MPC860, VxWorks, Tornado, embedded system 摘 要:本文介绍了嵌入式处理器MPC860与嵌入式实时操作系统VxWorks的特点,描述了基于MPC860/ VxWorks嵌入式系统开发的流程:使用BDM调试器烧写bootrom文件,使用FTP下载vxworks内核镜像,使用Tornado集成开发环境下载与调试应用程序。 关键字: MPC860;VxWorks;Tornado;嵌入式系统
1 引言 摩托罗拉公司生产的MPC系列CPU基于PowerPCTM结构,它由三个模块组成:即PowerPCTM内核、系统接口单元(SIU)及通信处理模块(CPM)[1]。三个模块均采用32 位内部总线。主处理器是PowerPCTM内核,能够实现内存管理,具有指令和数据Cache。系统接口单元中,存储器控制单元可支持多种高性能的存储器,包括SDRAM和Flash。CPM是一个RSIC处理器,具有串行通信控制器、波特率发生器等,支持多种协议的命令集,可以配置成多种通信处理模式。 VxWorks是一种实时性非常强的嵌入式操作系统,具有高性能的内核、良好的持续发展能力、以及友好的功能强大的开发环境,使该系统越来越被用户认可。 目前,基于MPC860/VxWorks系统的应用越来越广泛,因此,本文对基于MPC860/VxWorks系统的开发的一般流程进行了研究。 2 开发平台 2.1 开发方式介绍 进行嵌入式系统开发有多种方式,常用的方式有两种: (1)先进行硬件设计开发,然后通过仿真器在目标板上调试程序,如单片机常用的开发方法;或者在主机上编写完用户程序,将其直接编译入内核,整体下载入目标板,通过主机上的交叉调试器对目标机上的程序进行调试,如嵌入式实时多任务系统开发。 (2)软硬件同时开发,通常一些嵌入式操作系统都有一个集成开发环境,包括目标机仿真器,可以在开发硬件的同时,在仿真器上开发调试应用程序,最后进行联合调试。 第二种方式开发时间短,但不够直观,容易出错,即使仿真成功,但在下载到目标板后,通常还需要调试排错。在有硬件环境的情况下,通常采用第一种方式,尤其是开发需要对硬件进行直接操作的底层驱动程序。 这里我们设计一款基于MPC860的嵌入式硬件环境,它同时具有几种通信接口:BDM接口、串口和网口。系统开发采用第一种开发方式,软件开发流程主要包括:引导程序的烧写、下载vxworks镜像和应用程序下载调试等几个主要方面。 2.2 Tornado集成开发环境 Tornado是嵌入式实时领域里最新一代的开发调试环境,提供了高效明晰的图形化的实时应用开发平台,它包括一套完整的面向嵌入式系统的开发和调测工具[2]。在Tornado II中,包括高性能的实时操作系统VxWorks、原代码编辑器、C/C++编译器、高性能的调试器、图形化的浏览器,集成的模拟器等工具和组件。 最主要的特点是:Tornado支持动态链接和加载,允许开发者增量式地加载目标模块到目标系统。动态链接和加载目标模块的能力作为Tornado结构的核心,使开发者避免了在宿主机上链接应用到内核,然后再下载整个可执行体到一个静态环境的这样通常采用的步骤。这样,就大大地缩短了每个编辑—测试—调试的周期。 Tornado II工具提供一个高度可视化和自动化的开发环境,加快了基于VxWorks的应用开发。 3 开发方案 3.1 系统引导程序编程与bootrom烧写 (1)系统引导程序编程 目标系统启动工作首先要进行系统初始化,对不同的CPU,系统初始化的基本步骤是类似的,主要步骤如下: 启动; 禁止中断; 放boot type(引导类型)到堆栈; 清空指令和数据缓存。 VxWorks 系统的 PowerPC BSP系统开机后,处理器是从romInit()函数开始执行,这是romInit.s 中的第一段程序。在romInit()函数中必须完成以上功能,这些功能程序通常使用汇编语言来写。在romInit()程序中开始执行C程序之前必须尽可能少的加载设备。引导程序结束时,得到C程序romStart()在ROM中的地址,保证romInit执行结束后,系统跳转执行romStart(),将文本和数据段从ROM复制到RAM中。 在系统初始化程序段中,可加入串口初始化程序和驱动程序,使系统引导结束后可支持使用串口传输命令和信息。加入下载命令程序段,以便于下载VxWorks内核镜像文件。 (2)bootrom烧写 bootrom烧写方式有多种,可以使用编程器编程,但对于在线系统调试,为方便修改,现在使用较多的是JTAG 调试器和BDM调试器。我们的系统采用的是MPC系列的CPU MPC860,它提供有BDM接口。因此可以很方便的使用BDM 调试工具编程。 MPC BDM调试工具通过宿主机的打印口与MPC BDM接口电缆相连,然后加到目标板的BDM接口上。连接BDM和目标板的电源,(此时也可以将串口线和网线连接到主机上)。在烧写程序之前,将以上编写的程序编译成二进制目标代码拷贝到c:\\sds74\\cmd\\init下。 打开SDS74调试软件,首先要下载烧写boot的文件,然后执行run/go命令,大约需要几分钟,boot烧写完成。 将boot烧好后,拔掉bdm和目标板的电源以及bdm电缆,然后再插上目标板的电源,boot将运行,正常时会在主机的串口超级终端显示如下信息:BOOT>,此时可以说boot烧写成功。 3.2下载和运行VxWorks内核镜像 在可引导的MPC860嵌入式平台上,使用串口和网络传输数据,进行BSP和应用程序调试。相对于使用串口传输数据,使用网络传输具有速度快,因此使用串口进行发送命令和返回信息,使用网口传输数据[6](如图1)。
主机 目标机
WindRiver公司提供了很多基于不同硬件平台的典型的板级支持包BSP。因此,开发基于VxWorks的实用板级支持包是尽量获得一个与目标板硬件环境相近的参考板级支持包和相关代码模板,再根据目标板硬件环境,完成板级支持包包含的驱动程序及设备初始化,从而完成板级支持包的开发[4]。 启动Tornado II集成开发环境,使用工程向导创建一个可启动工程(bootable VxWorks image)项目,选择基于ads860的BSP。在这个工程项目里可以进行BSP的基本配置、VxWorks的基本配置、网卡配置等,结合实际电路和应用进行修改,创建用户自己的BSP以支持特定硬件。前述bootrom程序也可由此生成。在此阶段可以借助WDB调试代理和Tornado工具辅助开发,也可以选择在线仿真器ICE辅助开发。 BSP 调试完成,编译此工程项目为一个VxWorks内核镜像文件*.img,在以后的应用程序调试过程中可通过Tornado的一个部件 ftp server下载。下载方法如下: 首先连接主机与目标板的网线和串口线,目标板上电后,在超级终端窗口3秒以内按回车键进入boot shell;否则,目标机系统会进入自动寻找并运行程序状态。 此时启动和配置ftp server,选择Security菜单中的user/rights命令,添加一个用户名如target,密码target,设置主目录为C:\\;然后点击Done。ftp server配置完成。 现在需要设置主机ip地址。将主机ip设为192.168.1.1,子网掩码255.255.255.0。将调试好的VxWorks镜像文件*.img拷贝到C:\\。 最后,在主机的串口超级终端中输入设置好的下载命令@,目标板开始从主机的ftp server下载*.img(vxworks的ram镜像)。 下载完成,*.img文件自动运行,在超级终端窗口显示vxworks镜像在目标板启动成功的信息,此时vxworks内核已经成功装载到目标板,可以同主机的tornado(vxworks的集成开发环境)进行连接了。 3.3 在tornado中编写和运行应用程序 当上述环境配置成功后就可以进行应用程序开发了。在tornado集成开发环境中可以开发并调试各种应用程序,添加程序并编译成功后就可以下载到目标板上进行调试了。下面通过一个应用程序调试示例加以说明。 4 开发应用程序示例 4.1 开发并编译程序 启动Tornado II集成开发环境,使用工程向导创建一个可下载工程(downloadable application modules)项目project1,在创建过程中选择工具链(toolchain)为PPC860gnu。在工程项目中编写或添加应用程序源文件,如一个Hello.c文件。 #include "vxworks.h" #include "drv/multi/ppc860Siu.h" void root() { printf("hello!How are you?\\n"); /*在终端输出此信息*/ } #define PD10 (0x0020) #define PD09 (0x0040) #define RUNLIGHT PD10 #define LINKLIGHT PD09 void RunLight(void) { int immrVal = vxImmrGet(); *PDDIR(immrVal)|=RUNLIGHT; while(1) { *PDDAT(immrVal) ^=RUNLIGHT; taskDelay(sysClkRateGet()/2);/*delay 0.5 second*/ } } void run() { taskSpawn ("RunLight", 100,0 /*switchTaskOptions*/,0x1000, (FUNCPTR)RunLight, 0,0,0,0,0,0,0,0,0,0); } /*通过以上函数创建并激活一个新任务,点亮系统指示灯*/ 4.2 配置和运行target server 使用Tornado编译器编译成功后下载。下载之前首先要配置和运行target server,在菜单tool/target server/configure中,先点击new新建一个配置如configuration1, 然后开始配置。 在target server proportion 项的“Back End”的选项中选择wdbrpc; 在target server proportion 项的“Core File and Symbols”的选项中设置vxworks镜像文件位置为C:\\; 在target name/ip address输入目标板的ip 地址192.168.1.254; 配置完成,点击Launch运行; 下面可以下载和运行应用程序了。 4.3下载和运行程序 在工程上点击右键,选择download project1.out下载应用程序到目标板,然后可以在Tornado中的shell里运行应用程序了,如在shell中运行hello.c中的root函数(在shell中打印hello!How are you?)和run(目标板的run灯会闪亮)。 在每次下载调试应用程序或添加新的应用程序时都不需要把它们和vxworks内核编译到一起,这样节省了开发和调试时间。 5 总结 本文描述了基于嵌入式实时操作系统VxWorks的开发方法,凭借性能优良的VxWorks和高度集成的开发环境,VxWorks的应用已成为新的研究热点。在开发过程中使用相近的BSP开发用户自己的板级支持包,难度降低了并缩短了开发时间,使用ftp server下载VxWorks内核镜像,使用Torndo 工具编译、调试和下载应用程序。通过这样的流程对应用程序的开发带来了极大的方便,该方法已得到广泛应用。 本文作者创新点:对基于VxWorks嵌入式操作系统在MPC8XX系列cpu上的开发过程进行了具体而实用的描述。有一定的应用价值。
|