免费下载说明: 网络资源,整理仅供学习参考!ARM9嵌入式VxWorks实践教程
前 言 #
《ARM9 嵌入式 VxWorks 实践教程》是 ARM 嵌入式技术系列教程之一。该教程教材采用华中科技大学和武汉创维特信息技术有限公司联合研制的JXARM9-2410 嵌入式教学实验系统作为教学实践平台。
VxWorks 嵌入式操作系统是目前嵌入式主流操作系统之一,它以超强的实时性、稳定的系统性能以及标准化的软件开发过程被广泛的使用在军工、工业控制等领域,本书结合 ARM9 嵌入式处理器的特点,介绍了在其上进行VxWorks 开发的基本过程和方法。
本书详细地讲解了 VxWorks 开发平台 TornadoII 的建立过程、 VxWorks BSP 板级支持包的移植和开发过程、驱动程序的设计方法以及VxWorks 应用程序的设计和开发等,内容覆盖 VxWorks 开发的全过程,它不仅可以作为嵌入式 VxWorks 开发的初学者作为实践教程,而且对于VxWorks 开发人员也有一定的参考价值。
目 录 #
第 1 章 VxWorks 移植实验 5
实验目的 5
实验内容 5
预备知识 5
实验设备 5
基础知识 5
实验步骤 13
实验报告要求 17
第 2 章 VxWorks 串口驱动程序编写实验 18
实验目的 18
实验内容 18
预备知识 18
实验设备 18
基础知识 18
实验步骤 36
实验报告要求 36
第 3 章 VxWorks 网络驱动程序编写实验 37
实验目的 37
实验内容 37
预备知识 37
实验设备 37
基础知识 37
实验步骤 45
实验报告要求 45
第 4 章 VxWorks 应用程序编写和调试实验 46
实验目的 46
实验内容 46
预备知识 46
实验设备 46
基础知识 46
实验步骤 51
实验报告要求 51
第 5 章 VxWorks 多任务应用程序编写实验 52
实验目的 52
实验内容 52
预备知识 52
实验设备 52
基础知识 52
实验步骤 73
实验报告要求 73
第 6 章 VxWorks 网络通信程序设计 74
实验目的 74
实验内容 74
预备知识 74
实验设备 74
基础知识 74
实验步骤 83
实验报告要求 83
第 1 章 VxWorks 移植实验 #
实验目的 #
- 了解 VxWorks 操作系统的基本功能和特点;
- 掌握 VxWorks 操作系统的移植。
实验内容 #
- 使用 TornadoII 集成开发环境移植 VxWorks 操作系统;
- 测试移植的操作系统。
预备知识 #
- 了解 TornadoII 集成开发环境的基本功能和使用方法;
- 了解 VxWorks 操作系统的组成以及移植方法。
实验设备 #
- JXARM-2410 教学实验箱;
- ADT1000 仿真器和 ADT IDE 集成开发环境。
- TornadoII 集成开发环境
基础知识 #
VxWorks 简介 #
VxWorks 是专门为实时嵌入式系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。在各种 CPU 平台上提供了统一的编程接口和一致的运行特性,尽可能的屏蔽了不同 CPU 之间的底层差异。应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。基于 VxWorks操作系统的应用程序可以在不同 CPU 平台上轻松移植。
VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。WRS 公司组建于 1981 年,是一个专门从事实时操作系统开发与生产的软件公司,该公司在实时操作系统领域被世界公认为是最具有领导作用的公司。
VxWorks 是一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,1997 年 4 月在火星表面登陆的火星探路者上也使用了 VxWorks。
VxWorks 是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。VxWorks 只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。所以,仅仅依靠人工编程调试,很难发挥它的功能并设计出可靠、高效的嵌入式系统,必须要有与之相适应的开发工具。TornadoII 就是为开发 VxWorks 应用系统提供的集成开发环境,TornadoII 中包含的工程管理软件,可以将用户自己的代码与 VxWorks 的核心有效的组合起来,可以按用户的需要裁剪配置 VxWorks内核;vxSim 原型仿真器可以让程序员不用目标机的情况下,直接开发系统原型,作出系统评估;功能强大的 CrossWind 调试器可以提供任务级和系统级的调试模式,可以进行多目标机的联调;优化分析工具可以帮助程序员从多种方式真正地观察、跟踪系统的运行,排除错误,优化性能。
TornadoII 嵌入式开发系统简介 #
TornadoII 开发环境是嵌入式实时领域里最新一代的开发调试环境,是实现嵌入式实时应用程序的完整的软件开发平台,是交叉开发环境运行在主机上的部分,是开发和调试 VxWorks系统不可缺少的组成部分。TornadoII 给嵌入式系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。
TornadoII 开发系统包含三个高度集成的部分:
- 运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;
- 运行在目标机上的高性能、可裁剪的实时操作系统 VxWorks;
- 连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE 或 ROM 仿真器等。
VxWorks 嵌入式实时操作系统主要功能和结构 #
- VxWorks 操作系统的主要功能
目前 VxWorks 操作系统的版本为 VxWorks 5.5,其核心功能主要有:
- 微内核 wind
- 任务间通信机制
- 先进的网络支持
- 功能强大的文件系统和 I/O 管理
- POSIX 标准实时扩展
- C++以及其他标准支持
这些核心功能可以与WindRiver 系统的其他附件和超过 400 个TornadoII 合作伙伴的产品很好的结合在一起。
- VxWorks 操作系统的基本结构
VxWorks 操作系统的基本构成部件主要有以下五个部分:
- 板级支持包 BSP(Board Support Package)
- 微内核 wind
- 网络系统
- 文件系统
- I/O 系统
VxWorks 操作系统包括了板级支持包 BSP(Board Support Package)、进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。VxWorks 只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。
- 板级支持包 BSP(Board Support Package)
板级支持包对各种板子的硬件功能提供了统一的软件接口,它包括硬件初始化、中断的产生和处理、硬件时钟和计时器管理、局域和总线内存地址映射、内存分配等等。每个板级支持包括一个 ROM 启动(Boot ROM)或其它启动机制。
- 高性能的实时操作系统核心 wind
- VxWorks 的核心,被称作 wind,包括多任务调度(采用优先级抢占方式),任务间的同步和进程间通信机制以及中断处理,看门狗和内存管理机制。一个多任务环境允许实时应用程序以一套独立任务的方式构筑,每个任务拥有独立的执行线程和它自己的一套系统资源。进程间通信机制使得这些任务的行为同步、协调。
- wind 使用中断驱动和优先级的方式。它缩短了上下文转换的时间开销和中断的时延。在 VxWorks 中,任何例程都可以被启动为一个单独的任务,拥有它自己的上下文和堆栈。还有一些其它的任务机制可以使任务挂起、继续、删除、延时或改变优先级。
- wind 核提供信号量作为任务间同步和互斥的机制。在 wind 核中有几种类型的信号量,它们分别针对不同的应用需求:二进制信号量、计数信号量、互斥信号量和 POSIX 信号量。所有的这些信号量是快速和高效的,它们除了被应用在开发设计过程中外,还被广泛地应用在 VxWorks 高层应用系统中。对于进程间通信,wind 核也提供了诸如消息队列、管道、套接字和信号等机制。
- 网络设施
- 它提供了对其它网络和 TCP/IP 网络系统的"透明"访问,包括与 BSD 套接字兼容的编程接口,远程过程调用(RPC),SNMP(可选项),远程文件访问(包括客户端和服务端的 NFS机制以及使用 RSH,FTP 或 TFTP 的非 NFS 机制)以及 BOOTP 和 ARP 代理。无论是松耦合的串行线路、标准的以太网连接还是紧耦合的利用共享内存的背板总线,所有的 VxWorks网络机制都遵循标准的 Internet 协议。
- 文件系统
VxWorks 提供的快速文件系统适合于实时系统应用。它包括几种支持使用块设备(如磁盘)的本地文件系统。这些设备都使用一个标准的接口从而使得文件系统能够被灵活地在设备驱动程序上移植。
VxWorks 也支持 SCSI 磁带设备的本地文件系统。VxWorks I/O 体系结构甚至还支持在一个单独的 VxWorks 系统上同时并存几个不同的文件系统。
VxWorks 支持四种文件系统:
- dosFs
- rt11Fs
- rawFs
- tapeFs。
另一方面,普通数据文件,外部设备都统一作为文件处理。它们在用户面前有相同的语法定义,使用相同的保护机制。这样既简化了系统设计又便于用户使用。
- I/O 系统
VxWorks 提供了一个快速灵活的与 ANSI C 兼容的 I/O 系统,包括
- UNIX 标准的缓冲 I/O
- POSIX 标准的异步 I/O VxWorks 包括以下驱动程序:
- 网络驱动
- 管道驱动
- RAM 盘驱动
- SCSI 驱动
- 键盘驱动
- 显示驱动
- 磁盘驱动
- 并口驱动
TornadoII 软件工具包的核心工具 #
TornadoII 软件工具包的核心工具是各个 TornadoII 软件工具包都具有的的开发工具主要包括以下几种:
- 图形化的交叉调试器(Debugger)CrossWind/WDB
这是一个远程的源代码集成调试器,支持任务级和系统级调试,支持混合源代码和汇编代码显示,支持多目标机同时调试。
这个高性能的调试器具有最新的提高生产率的图形化特征。加速器特征包括开发者可以成组地观察表达式的观察窗口;可以在调试器的图形用户界面中迅速改变变量、寄存器和局部变量的值;可以为不同组的元素设定根值数;通过信息规整和分类的方法有效地提供信息;还提供开发者熟悉的 GNU/GDB 调试器引擎,这种调试器引擎采用命令行方式、命令完成窗口和下拉式的历史记录窗口,因而具有很强的灵活性。
开发者可以在目标运行系统上产生和调试任务,也可以将调试器和已经运行的任务连接在一起,这些任务可以是源自应用程序也可以是来自任务级调试环境。
- 工程配置工具(Project Facility/Configuration)
这是一个强有力的图形化工具,提供了可以对 VxWorks 操作系统及其组件进行自动地配置。自动的依赖性分析、代码容量计算和自动裁剪 wizard 大大缩短了开发周期。
工程工具简化了 VxWorks 应用程序的组织、配置和建立工作;同时,还使工程管理和
VxWorks 配置的许多方面实现自动化;这种集成的图形化工程管理环境还增强了开发小组的专业技术:单独的组件可以各自独立开发,然后由小组的其他成员共享和重用。由于建立了与现在流行的源代码控制系统的联系,例如:ClearCase、SCCS、RCS、PVCS、MS Visual SourceSafe 等,所以允许小组中的各个成员可以平行工作而不互相干扰。
- Makefile 自动生成维护
- 软件工程维护
- 自动的依赖性分析
- 代码容量计算
- 自动裁剪
- 集成仿真器(Integrated Simulator)
这种集成仿真器 VxSim 支持CrossWind, WindView, Browser, 提供与真实目标机一致的调试和仿真运行环境。
VxSim 仿真器作为核心工具包含在各个软件包中,因而允许开发者可以在没有 BSP、操作系统配置、目标机硬件的情况下,使用 TornadoII 迅速开始开发工作。
作为核心工具包含在各个软件包中的 VxSim 都是限制版本,也就是说,它并不支持网络仿真;如果想获得全部功能的 VxSim,可以根据所买的软件包的条件从 WindPower 可选工具进行选择。
- 诊断分析工具(WindView for the Integrated Simulator)
WindView 是一个图形化的动态诊断和分析工具,主要是向开发者提供目标机硬件上实际运行的应用程序的许多的详细情况。这种系统级的诊断分析工具可以与 VxSim 一起使用。
嵌入式系统开发者经常因为无法知道系统级的执行情况和软件的时间特性而感到失望,这种全功能版本的 WindView 提供了运行在集成仿真器上的 VxWorks 应用程序的详细的动态行为,图形化显示了任务、中断和系统对象相互作用的复杂关系。还可以选择用于监视目标硬件系统行为的 WindView。
- C/C++编译环境(C/C++ Compilation Environment)
TornadoII 提供交叉编译器、iostreams 类库和一些列的工具来支持 C 语言和 C++语言。交叉编译器进行了许多优化,允许开发者能够迅速产生高效而简洁的代码。
- Diab C/C++ Compiler:唯一获得 Motorola 白金大奖的嵌入式编译器。
- GNU C/C++ Compiler:应用最广泛的编译器。
iostreams 类库支持 C++中的格式化的和类型安全的 I/O,也可以扩展到用户自定义数据类型,这是 C++应用程序开发的工业标准。
TornadoII 提供对 C++全面的支持,包括:异常事件处理、标准模板库(STL:Standard Template Library)、运行类型识别(RTTI:Run-Time Type Identification)、支持静态构造器和析构器的加载器、C++调试器,这些保证了工具与开发环境紧密地结合在一起。
- 主机目标机连接配置器(Launcher)
TornadoII 的主机目标机连接配置器Launcher 允许开发者轻松地设置和配置一定的开发环境,也提供对开发环境的管理和许多管理功能。
- 目标机系统状态浏览器(Browser)
TornadoII 的目标机系统浏览器 Browser 是 TornadoII shell 的一个图形化组件,目标机系统状态浏览器 Browser 的主窗口提供目标系统的全面状态总结,也允许开发者监视独立的目标系统对象:任务、信号灯、消息队列、内存分区、定时器、模块、变量、堆栈等。这些显示根据开发者的选择进行周期性或条件性更新。
- 命令行执行工具(WindSh)
TornadoII 的命令行执行工具 WindSh 是 TornadoII 所独有的功能强大的命令行解释器,可以直接解释执行 C 语句表达式、调用目标机上的 C 函数、访问系统符号表中登记的变量;还可以直接执行 TCL 语言。
- 多语言浏览器(WindNavigator)
TornadoII 的多语言浏览器(WindNavigator)提供源程序代码浏览,图形化显示函数调用关系,快速地进行代码定位,这样大大地缩短了评价 C/C++源代码的时间。
- 形化核心配置工具(WindConfig)
TornadoII 的图形化核心配置工具(WindConfig)使用图形向导方式智能化的自动配置 VxWorks 内核及其组件参数。
- 量加载器(Incremental Loader)
TornadoII 的增量加载器(Incremental Loader)可以动态的加载新增模块并在目标机与内核实现动态链接运行,不必重新下载内核及未改动的模块,加快开发速度。
VxWorks BSP 主要文件目录的组成及主要文件的作用 #
- 目录 target/config/All
这个目录下的文件是所有 BSP 文件共享的,不是特别需要不要更改里面的任何文件。主要包含以下几个文件:
文件 | 描述 |
---|---|
configAll.h | 缺省定义了所有VxWorks 的设置.如果不用缺省的设置,可在BSP 目录下的config.h 文件中用#define 或#undef 方式来更改设置 |
bootInit.c | 在 romInit.s 后,完成 Boot ROM 的第二步初始化.程序从 romInit.s 中的 romInit()跳到这个文件中的 romStart().来执行必要的解压和 ROM image 的放置 |
bootConfig.c | 完成 Boot ROM image 的初始化和控制 |
usrConfig.c | VxWorks image 的初始化代码 |
- 目录 target/config/comps/src
涉及系统核心的 components,主要由 target/config/All 中 usrConfig.c 中函数调用
- 目录 target/config/bspname: 包含系统或硬件相关的 BSP 文件
文件 | 描述 |
---|---|
Makefile | 控制 images 的生成 |
config.h | 包括所有涉及 CPU 主板的设置及定义(includes,definations) |
configNet.h | 网络驱动的主要设置文件,主要对 END 驱动设 |
romInit.s | 汇编语言文件,是VxWorks Boot ROM 和ROM based image 的入口,参见系统启动部分 |
sysALib.s | 汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调 用.VxWorks image 的入口点_sysInit 在这个文件里,是在 RAM 中执行的第一个函数. |
sysLib.c | 包含一些系统相关的函数例程,提供了一个 board-level 的接口,VxWorks 和应用程序可以以 system-indepent 的方式生成.这个文件还能包含目录 target/config/comps/src 的驱动. |
sysScsi.c | 可选文件用于 Scsi 设备设置和初始化. |
sysSerial.c | 可选文件用于所有的串口设置和初始化. |
bootrom.hex | ASIC 文件包含 VxWorks Boot ROM 代码 |
VxWorks | 运行在目标机上,完整的,连结后的 VxWorks 二进制文件 |
VxWorks.sym | 完全的,连结后带有符号表的 VxWorks 二进制文件 |
VxWorks.st | 完全的,连结后,standalone,带有符号表的 VxWorks 二进制文件 |
BSP 用"make"来编译连接生成(Created),而不是用 Tornado 的工具。BSP 和应用程序都可以在"make"或"tornade"上开发(developed),BSP 被设置包括以下驱动:
- 中断控制 interrupt controller;
- 计时器 timer(sys/aux);
- 串口 UART(serial);
- 显示屏 LCD;
- 键盘 Keyboard(opt);
- 触摸屏 touch-screen(opt)。
其中前三个部分是重点,后面的三个部分可以不选用。在本实验的例子代码中也只移植了前三个部分的驱动。
实验步骤 #
-
将光盘中的 BSP 拷贝到 PC 机的某个目录,比如:“E:\VxWorks\S3C2410\BSP”,下面将以该目录为例来说明;
-
启动 TordadoII 集成开发环境;
-
新建一个工程“Create a bootable VxWorks image”,如下图:
- 输入工程的名称、位置等信息,参照下图在 E:\vxWorks\S3C2410\BspTest 下创建一个名叫 BspTest 的工程:
- 选择 BSP 模板
-
点击 Finish 完成工程的创建;
-
通过工程管理器,调整工程的某些属性,比如去掉网络支持,通过在“networks components”选项上按右键并选择“Exclude …”来去掉网络支持;
-
使用“Build”选项来编译该工程;
-
在工程编译完毕后,使用 ADT 将其下载到目标板上(新建一个空的工程,选择用户下载即可);
-
连接教学系统的串口 0,并设置波特率为“115200,8N1”,在 ADT 中使用“go”命令运行下载的程序;下面是看到的运行界面:
-
添加 Shell 功能,在 Tornado 工程管理器中将 Shell 部件添加到工程中,再编译、下载并运行;
下面是添加 Shell 后的运行结果,通过 Shell,在提示符“->”下可以进行一些简单的操作,比如查看进程信息,查看内存等;
注意事项:在两次下载运行之间,需要将教学系统复位,否则会等不到正确的结果。
实验报告要求 #
- 分析 BSP 代码,简要描述 VxWorks 操作系统移植的步骤;
- 说明 VxWorks 的特点及应用领域;