版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1/92,第6章 基于VxWorks的嵌入式软件开发,6.1 VxWorks软件开发环境,6.2 Tornado软件开发工具,6.3 VxWorks内核定制,6.4 VxWorks 驱动程序开发,6.5 VxWorks 应用程序开发,6.6 VxWorks调试,2/92,6.1 VxWorks软件开发环境,6.1.1 Tornado开发环境介绍,6.1.2 VxWorks软件开发流程,6.1.3 创建用户工程,3/92,6.1.1 Tornado开发环境介绍,Tornado开发环境简介 Tornado发展历史 Tornado嵌入式集成开发系统结构,4/92,6.1.1 Tornado开发环境介
2、绍,Tornado开发环境简介 Tornado嵌入式集成开发系统结构,5/92,6.1.1 Tornado开发环境介绍,Tornado开发环境简介 Tornado交叉开发调试环境,6/92,6.1.1 Tornado开发环境介绍,Tornado开发环境简介 Tornado开发环境的优势 对于不同目标机,Tornado都可给开发者提供一致的图形接口和人机界面,方便开发者进行跨目标平台快速再开发。 Tornado开发环境各部分功能高度集中,采用图形接口和人机界面与设计者交互,并采用目标服务器和目标代理处理通讯的方式,使嵌入式系统软件开发具有集成性和直观性。,7/92,6.1.1 Tornado开发
3、环境介绍,Tornado开发环境简介 Tornado开发环境的优势 Tornado开发环境功能高度集中却相对独立,又彼此通信的交互式(交叉式)开发结构模式,使连接方式的改变不影响开发工具的使用。 Tornado系统的动态链接和加载功能可为开发者加快开发步骤,节省时间,极大缩短嵌入式软件开发周期。 Tornado开发环境具有丰富强大的开发和调试工具。支持增量式和交互式开发。并可运行在多种操作系统上。,8/92,6.1.1 Tornado开发环境介绍,Tornado开发环境的建立 硬件选型、硬件连接和设置; PC主机上安装Tornado相关软件; 配置主机环境变量,配置主机网络地址等相关环境; T
4、ornado IDE基本工具配置; 启动Tornado 注册器:wtxregd(管理目标服务器的工具); 启动Tornado2.2; 启动和连接目标机。,9/92,6.1.1 Tornado开发环境介绍,Tornado开发环境系统目录组织 .Setup:安装程序; .Host:主机,存放主机端(开发机)工具; .Share:共享XDR代码; .Docs:在线HTML文件帮助; .Target:目标机操作系统、源码、BSP、设备驱动、头文件、配置文件等。,10/92,6.1.2 VxWorks软件开发流程,开发嵌入式系统的步骤 需求分析; 建立嵌入式交叉开发环境; 操作系统内核定制和移植、支持软
5、件和应用程序的设计开发; 系统联调,交付样机。,11/92,6.1.2 VxWorks软件开发流程,VxWorks软件开发主要步骤 建立Tornado交叉开发环境; VxWorks操作系统内核定制和移植、支持软件和应用程序的设计。,Tornado工程类型 Bootable Project :可启动工程; DownLoadable Project :可下载工程。,12/92,6.1.2 VxWorks软件开发流程,VxWorks软件开发流程,13/92,6.1.3 创建用户工程,工程管理器的功能 管理文件; 管理组件; 编译选项:,文件位置; 文件基本操作; 文件依赖关系。,VxWorks组件;
6、 组件状态; 组件属性。,VxWorks映像类型; 可下载工程的编译规则; 编译宏定义。,14/92,6.1.3 创建用户工程,创建定制VxWorks映像 VxWorks映像类型,Loadable image; ROM Based image(Compressed/Uncompressed); ROM Resident image。,15/92,6.1.3 创建用户工程,创建定制VxWorks映像 创建定制一个VxWorks映像,需要建立一个可启动(bootable)的工程。 实验6-1:基于目标板的Bootable工程的创建。 用 Tornado 工具建立基于目标板的 Bootable工程B
7、SPBoot_prj; 编译BSPBoot_prj工程,并生成VxWorks映象文件及其二进制代码。,16/92,6.1.3 创建用户工程,创建可下载应用 创建一个可下载应用,需要建立一个可下载(downloadable)的工程。 实验6-2:基于目标板的Bootable工程的创建。 用Tornado工具建立一个基于目标板的Downloadable工程BSPLoad_prj ; 添加指定名字和路径的测试代码加入工程; 编译BSPLoad_prj工程,并生成.out目标代码文件。,17/92,6.2 Tornado软件开发工具,6.2.1 交叉调试器,6.2.2 目标机系统状态浏览器,6.2.3
8、 命令行执行工具,6.2.4 软件逻辑分析仪,6.2.5 集成仿真器,6.2.6 目标机服务器,18/92,6.2.1 交叉调试器(CrossWind Debugger),启动交叉调试器 常规调试命令 交叉调试器主要功能,19/92,6.2.2 目标机系统状态浏览器(Browser),启动浏览器 浏览器的主窗口功能和包含对象 浏览器窗口信息分类,启动浏览器对话框,浏览器窗口,20/92,6.2.3 命令行执行工具(WindSh),命令解释器主要调试功能 启动命令解释器,启动命令解释器对话框,命令解释器窗口,21/92,6.2.4 软件逻辑分析仪(WindView),软件逻辑分析仪主要功能 启动
9、软件逻辑分析仪,启动逻辑分析仪对话框,逻辑分析仪控制窗口,22/92,6.2.5 集成仿真器(VxSim),集成仿真器主要功能 启动集成仿真器,启动仿真器,仿真器VxSim0窗口,23/92,6.2.6 目标机服务器(Target Server),目标机服务器主要功能 启动目标机服务器,24/92,6.3 VxWorks内核定制,VxWorks5.5的核心功能 VxWorks5.5的基本构成部件 VxWorks系统组成 VxWorks内核定制主要流程 编写自定义板级支持包BSP,或修改BSP模板获得BSP包; 通过Tornado新建可启动工程,选择板级支持包BSP,设置工程名、工程路径、工程说
10、明等信息; 根据应用需求适当裁剪和定制内核功能组件,配置内核; 用编译工具编译可启动工程生成内核映像文件,将其转换为目标代码内核映像文件; 下载目标代码内核映像文件到目标机运行。,25/92,6.3 VxWorks内核定制,6.3.1 VxWorks BSP的移植,6.3.2 内核组件配置,6.3.3 内核映像的生成与下载,26/92,6.3.1 VxWorks BSP的移植,VxWorks BSP的基本概念和功能 板级支持包BSP(Board Support Package)概念 BSP在系统中的层次结构 BSP具体功能 BSP主要特点,27/92,6.3.1 VxWorks BSP的移植,
11、VxWorks BSP的基本概念和功能 板级支持包BSP(Board Support Package)概念 在嵌入式系统开发过程中,用户针对特殊而具体的硬件平台所编写的启动代码和部分设备驱动程序的集合。,28/92,6.3.1 VxWorks BSP的移植,VxWorks BSP的基本概念和功能 BSP在系统中的层次结构,29/92,6.3.1 VxWorks BSP的移植,VxWorks BSP的基本概念和功能 BSP具体功能 系统初始化。 为VxWorks内核提供操作接口,使内核能访问硬件驱动程序。 在系统中集成与硬件相关(Hardware-dependent)软件和部分硬件无关(Hard
12、ware- independent)的软件:使硬件相关和硬件不相关软件在VxWorks系统中能够得到很好的结合。,30/92,6.3.1 VxWorks BSP的移植,VxWorks BSP的基本概念和功能 BSP主要特点 具有硬件相关性与操作系统相关性。 在实现上,BSP是一个介于操作系统和底层硬件之间的软层次,包括了系统中大部分与硬件相关的软件模块。 在功能上主要包含两部分:系统初始化及与硬件相关的设备驱动。 系统初始化完成的基本功能有:对CPU进行低级初始化、对主板的硬件进行初始化、加载操作系统等。,31/92,6.3.1 VxWorks BSP的移植,VxWorks BSP组成 BSP
13、相关程序文件类型 源文件; 头文件; makefile文件; 派生文件。,32/92,6.3.1 VxWorks BSP的移植,VxWorks BSP组成 BSP的主要文件目录组成及主要文件的作用 目录targetconfigAll:所有BSP文件共享。 目录targetconfigcompssrc:VxWorks实时内核模块配置文件目录。 目录targetconfigcompsVxWorks: VxWorks实时内核基本模块描述文件目录。 目录targetconfigbspname: 包含系统或硬件相关BSP文件,用户可根据需要适当修改。,33/92,6.3.1 VxWorks BSP的移植
14、,VxWorks BSP组成 BSP的主要文件目录组成及主要文件的作用 工程目录:当Tornado创建工程时,放置从源文件、头文件、驱动程序源文件以及VxWorks文档库中模块衍生而来的派生文件。 目录targetprojbspname_vx: 包含BSP工程文件和默认构造输出。 目录docvxworksbspbspname: 包含用户帮助系统的HTML文档文件。,34/92,6.3.1 VxWorks BSP的移植,VxWorks BSP组成 VxWorks BSP文件组织目录树,35/92,6.3.1 VxWorks BSP的移植,VxWorks内核映像类型,36/92,6.3.1 VxW
15、orks BSP的移植,内核基本结构和引导原理 可加载类型内核(loadable image),37/92,6.3.1 VxWorks BSP的移植,内核基本结构和引导原理: 可引导类型内核(bootable image),38/92,6.3.1 VxWorks BSP的移植,内核基本结构和引导原理 可引导类型内核(bootable image),39/92,6.3.1 VxWorks BSP的移植,BSP初始化流程,40/92,6.3.1 VxWorks BSP的移植,系统内核的引导过程,41/92,42/92,43/92,6.3.1 VxWorks BSP的移植,BSP移植 BSP开发四个
16、阶段 前期配置工作; 编写BSP初始化的代码,并根据硬件设备情况配置一个最小的内核; 启动最小内核,测试内核运行情况; 编写其他驱动程序。,提高BSP开发效率的方法 BSP开发包; 利用近似BSP。,44/92,6.3.1 VxWorks BSP的移植,BSP移植 移植BSP时涉及的重要部分 BSP移植相关文件: Readme文件、 makefile文件、 config.h文件、 romInit.s文件、 sysALib.s文件、 sysLib.c文件、 sysDev.c文件、 sysSerial.c文件等。 内核前期初始化过程相关函数:romInit、romStart、usrInit、sys
17、Init、kernelInit、usrKernelInit 。 BSP移植相关函数和相关变量。,45/92,6.3.1 VxWorks BSP的移植,移植BSP时涉及的重要部分: BSP移植相关函数:,46/92,6.3.1 VxWorks BSP的移植,移植BSP时涉及的重要部分: BSP移植相关函数:,47/92,6.3.1 VxWorks BSP的移植,移植BSP时涉及的重要部分: BSP移植相关函数:,48/92,6.3.1 VxWorks BSP的移植,BSP移植 移植BSP时涉及的重要部分 BSP移植相关变量:,49/92,6.3.1 VxWorks BSP的移植,BSP移植 BS
18、P调试手段 在线仿真器(ICE)调试; 板载设备调试; 交叉调试器调试。,50/92,6.3.2 内核组件配置,配置文件config.h包含主要内容 BSP版本和版本ID号码; 包含configAll.h文件; 定义缓冲和MMU设置; 定义共享网络存储器设置; 定义板载RAM的起始地址和RAM的大小; 定义板载ROM的起始地址和ROM的大小; 定义NVRAM(非易失性存储器)的参数; 设置启动参数; 设置可选的邮戳定时器驱动; 设置启动参数; 设置网络设备; 定义WDB调试设备。,51/92,6.3.2 内核组件配置,组件描述语言四个部分 代码:构造一个工程使用的代码; 配置信息:提供用于描述
19、组件的特性参数; 集成信息:控制组件集成到可执行目标映像中的方式,定义组件间的依赖关系; 用户介绍:对该组件的功能介绍和参数说明。,52/92,6.3.2 内核组件配置,组件描述语言描述组件规则 以INCLUDE_FOO形式命名组件; 以FOLDER_FOO形式命名文件夹; 以SELECT_FOO形式命名选集; 参数名与其他目标类名不能相同; 以initFoo形式命名初始化群组; 以cdf为后缀的文件表示组件描述文件;,53/92,6.3.2 内核组件配置,组件描述语言描述组件规则 组件描述文件名应形如00 xxxx.cdf,文件名前两位十进制数控制在目录中读取CDF文件的顺序。风河公司保留前
20、50个数字(即00 xxxx.cdf49xxxx.cdf),剩下的数字5099(即50 xxxx.cdf99xxxx.cdf)供第三方使用。同一目录的文件名中,编号越大,读取优先权越高;,54/92,6.3.2 内核组件配置,组件描述语言描述组件规则 组件描述文件在工程建立时被读取,不同目录的读取顺序(优先权)如下: 通用组件目录:.targetconfigcompsVxWorks; 特定体系结构的组件目录: .targetconfigcompsVxWorksarcharch; 特定BSP的组件目录:.targetconfigbsp; 包含工程特定组件的用户工程目录;,55/92,6.3.3
21、内核映像的生成与下载,基于目标板BSP的VxWorks 内核定制方法和流程 实验6-1: VxWorks内核定制实验 确认已正确建立Tornado交叉开发环境。 创建基于目标板的可启动工程BSPBoot_prj。 编译基于目标板的可启动工程BSPBoot_prj,生成二进制内核映像VxWorks.bin。 配置并启动超级终端工具和tftp服务器软件,设置主机服务器和实验目标机IP地址,确保串口和网络正确有效连接,以便后续内核映像的下载。 使用u-boot将VxWorks映像文件二进制代码下载到目标板并运行。 创建基于目标板的可下载工程BSPLoad_prj。 添加指定名字和路径的测试代码加入工
22、程BSPLoad_prj 。,56/92,6.3.3 内核映像的生成与下载,实验6-1: VxWorks内核定制实验 编译BSPLoad_prj工程,生成.out目标代码文件。 配置并启动目标服务器,下载并测试目标应用模块BSPLoad_prj.out。 成功启动目标服务器并下载.out目标应用模块后,可启动交叉调试器CrossWind Debugger,采用断点、单步、全速等多种调试方式,对Downloadable 工程进行调试。 添加测试代码到可启动工程BSPBoot_prj。 实验箱重启,将新二进制内核映像文件vxworks.bin重新下载到目标机并启动运行。 在工程管理器中裁减内核网络
23、PING Client组件,重新编译生成内核并转换为二进制内核映像文件,然后重新下载到RAM中,运行内核并执行PING命令,以检测新内核是否包含PING Client组件功能。,57/92,6.4 VxWorks 驱动程序开发,6.4.1 VxWorks驱动程序开发综述,6.4.2 VxWorks驱动程序相关数据结构,6.4.3 VxWorks驱动程序常用函数,6.4.4 VxWorks驱动程序编写举例,58/92,6.4.1 VxWorks驱动程序开发综述,VxWorks设备种类 字符设备:大多数的传输设备以及显示终端; 随机存储设备:主要指磁盘; 虚拟设备:如task间的管道、套接字Soc
24、ket等; 控制监视设备:指用于控制数/模变换的I/O设备; 网络设备:与网络协议相关的通信设备。,59/92,6.4.1 VxWorks驱动程序开发综述,依据操作系统管理设备方法,分类VxWorks设备及其驱动程序 基于I/O系统的设备: 主要包括字符设备和块设备,系统对这类设备的访问主要通过VxWorks的I/O子系统进行。 非基于I/O系统的设备:主要包括串口、网络设备等特殊设备,这些设备不用I/O接口函数,而使用另一套规范的接口函数。,60/92,6.4.1 VxWorks驱动程序开发综述,VxWorks设备驱动跟应用程序和硬件设备间层次关系,61/92,6.4.1 VxWorks驱动
25、程序开发综述,基于I/O系统的设备及其驱动层次模型,62/92,6.4.1 VxWorks驱动程序开发综述,VxWorks系统中常见设备名,63/92,6.4.1 VxWorks驱动程序开发综述,VxWorks与主机系统I/O区别 设备配置: 这些设备不用I/O接口函数,而使用另一套规范的接口函数; 文件描述字: 在Windows和Unix中,文件描述符fd是进程中唯一的;除了标准I/O和错误输出,VxWorks任何任务可存取I/O设备,文件描述符fd是全局唯一的; I/O控制:Unix和VxWorks中传给ioctl( )的参数可能不同 ; 驱动函数: Unix下的设备驱动执行在系统模式下,
26、并无优先级之分,因此不可抢占;而VxWorks下的设备驱动运行于线程模式下,是可抢占的,VxWorks中任务的优先级会决定它所调用的设备驱动的优先级。,64/92,6.4.1 VxWorks驱动程序开发综述,VxWorks支持的主要设备驱动程序,65/92,6.4.1 VxWorks驱动程序开发综述,VxWorks支持的主要设备驱动程序介绍 终端设备和虚拟终端设备(伪终端设备)驱动 管道设备驱动 虚拟存储设备驱动 网络文件系统(NFS)设备驱动 非NFS网络设备驱动 虚拟磁盘设备驱动 SCSI驱动,66/92,6.4.2 VxWorks驱动程序相关数据结构,VxWorks设备典型类型介绍 字符
27、设备:最常见的设备种类。字符设备指一种以串行方式操作数据的设备。 块设备:块设备指必须以块为单位操作数据的设备; 串口设备:串口设备是一种特殊的字符设备,它具有轮询和中断两种工作模式,通常挂接在系统TTY接口上工作。 网络设备:网络设备和网络协议层属于网络设备,这种设备通常与MUX层接口,用户通过套接字Socket接口访问网络设备。,67/92,6.4.2 VxWorks驱动程序相关数据结构,I/O系统的相关概念及工作原理 VxWorks的I/O系统可提供一个简单、统一、与设备无关的用户接口。该接口是一个标准I/O接口,包含一系列函数,具有很强的实用性和灵活性。,68/92,6.4.2 VxW
28、orks驱动程序相关数据结构,文件描述符表、设备列表、驱动程序描述表 文件描述符表 文件描述符(fd)是一个整数(例如:0,1,2),通过这个数字内核可以推算出文件的访问权限等。或者说,文件描述符是可以将含有文件相关信息的数据结构检索出来的索引。 为实现文件描述符对文件的标识作用,I/O系统提供文件描述符表,以便将文件描述符和为该文件服务的驱动程序,以及设备相关结构建立关联。文件描述符表是I/O系统将文件描述符与驱动程序、设备对应起来的手段,它管理维护三者的对应关系。,69/92,6.4.2 VxWorks驱动程序相关数据结构,文件描述符表、设备列表、驱动程序描述表 文件描述符表,70/92,
29、6.4.2 VxWorks驱动程序相关数据结构,文件描述符表、设备列表、驱动程序描述表 设备列表 设备列表是一个方便添加和管理设备的动态大小的双向链表,用户可以任意向其中添加新设备,每个设备占用链表一个环节。,71/92,6.4.2 VxWorks驱动程序相关数据结构,文件描述符表、设备列表、驱动程序描述表 驱动程序描述表 操作系统I/O子系统中存有的驱动程序列表,I/O系统通过该表存储驱动程序各个函数入口点,以便所有驱动程序都可在表中找到相应操作的入口点。该表每行都对应着一个设备驱动程序,每列对应注册到系统的七个基本I/O操作函数。,设备驱动程序表,I/O系统工作流程 打开设备 用户通过op
30、en()函数或create()函数打开或创建设备文件。I/O系统根据文件名参数到设备列表中查找最匹配设备,找到后,I/O系统根据设备头信息结构DEV_HDR中存储的驱动程序索引号,在驱动程序描述表中查找相应的驱动程序入口,最后系统找到相应设备的驱动程序。找到后返回系统在文件描述符表中为设备文件分配的文件描述符fd,I/O系统将与文件描述符对应的驱动程序索引号和设备号加入到文件描述符表中以便后续的读写或控制等操作使用。 如图6-119(a)所示为设备打开操作流程。,72/92,6.4.2 VxWorks驱动程序相关数据结构,I/O系统工作流程 读写及控制功能操作 打开设备后,系统已将文件描述符、
31、驱动程序索引号、设备号添加到文件描述符表中。在执行读、写、控制操作时,I/O即可把文件描述符fd作为索引,在驱动程序描述表中找到相应程序入口点,以便调用设备对应的驱动程序。 如图6-119(b)所示为设备读/写/控制操作流程。,73/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 字符设备驱动程序相关数据结构 设备列表相关数据结构:设备描述符、设备头结构等。 驱动程序表相关数据结构:包括驱动程序表及表项数据结构等。 文件描述表相关数据结构:包括文件描述表及表项数据结构等。 select机制相关数据结构: 文件描述符集合结构、唤醒链表结构、及唤醒链表结点结构等。,74/9
32、2,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 块设备驱动程序相关数据结构 块设备描述符结构BLK_DEV 。 用户自定义块设备描述符结构xx_DEV 。,75/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 串口设备驱动程序相关数据结构,76/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 串口设备驱动程序相关数据结构 基本串行通道结构SIO_CHAN。 串口驱动函数列表结构SIO_DRV_FUNCS。 自定义串行通道结构xx_CHAN和自定义串口设备结构XX_DRV。,77/92,6.4.2 VxWorks驱动程序相关数
33、据结构,驱动设备数据结构 串口设备驱动程序相关数据结构,78/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 网络设备驱动程序相关数据结构 网络接口层层次。 VxWorks支持两类网络设备驱动:BSD 4.3和SENS网络驱动。,79/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 网络设备驱动程序相关数据结构 VxWorks网络协议栈、MUX、END驱动层次关系,80/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 网络设备驱动程序相关数据结构 MUX层支持两种设备驱动程序: END(Enhanced Network D
34、river):基于帧(数据包+链路层数据)传递数据,VxWorks推荐方式。 NPT(Network Protocol Toolkit):基于包(数据包)传递。,81/92,6.4.2 VxWorks驱动程序相关数据结构,驱动设备数据结构 网络设备驱动程序相关数据结构 END网络设备对象结构指针END_OBJ; 设备控制结构DEV_OBJ; 网络设备驱动程序函数表NET_FUNCS; 网络协议结构NET_PROTOCOL; END错误信息结构END_ERR; 跟踪驱动和协议间数据的结构M_BLK; 跟踪连接信息LL_HDR_INFO; 网络设备表结构END_TBL_ENTRY; 网络设备驱动控
35、制结构XX_DRV_CTRL。,82/92,6.4.2 VxWorks驱动程序相关数据结构,字符驱动程序常见相关函数 标准I/O系统接口相关函数,83/92,6.4.3 VxWorks驱动程序常用函数,字符驱动程序常见相关函数 驱动程序安装和设备创建函数 驱动程序安装函数xxDrv(); 驱动程序设备创建函数xxDevCreate()。 驱动程序入口点函数 设备打开函数xxOpen(); 设备关闭函数xxClose (); 读设备函数xxRead(); 写设备函数xxWrite (); I/O控制函数xxIoctl ()。,84/92,6.4.3 VxWorks驱动程序常用函数,字符驱动程序常
36、见相关函数 设备移除和驱动程序卸载函数 设备卸载函数xxDevRemove (); 驱动程序卸载函数xxDrvUninstall()。 驱动程序相关支持I/O系统函数,85/92,6.4.3 VxWorks驱动程序常用函数,字符驱动程序常见相关函数 驱动程序相关支持I/O系统函数,86/92,6.4.3 VxWorks驱动程序常用函数,字符驱动程序常见相关函数 驱动程序支持SELECT()相关函数 select()函数;,87/92,6.4.3 VxWorks驱动程序常用函数,字符驱动程序常见相关函数 驱动程序支持SELECT()相关函数 select()函数; Select()初始化函数se
37、lWakeupListInit(); xxioctl()函数中实现FIOSELECT和FIOUNSELECT功能的相关子函数selNodeAdd(), selWakeupType(), selWakeup(), selNodeDelete(), selWakeupAll()。,88/92,6.4.3 VxWorks驱动程序常用函数,块设备驱动程序常用函数: 低级驱动程序初始化函数xxDrv (); 块设备创建函数xxDevCreate(); 块设备读写函数: 直接访问设备读函数xxBlkRd (); 直接访问设备写函数xxBlkWrt (); 顺序设备读写函数xxSeqRd ()和xxWrtT
38、ape()。 块设备驱动I/O控制函数xxIoctl(); 块设备复位函数xxReset(); 块设备状态检查函xxStatusChk()。,89/92,6.4.3 VxWorks驱动程序常用函数,串口设备驱动程序常用函数 ttyDrv设备的数据流,90/92,6.4.3 VxWorks驱动程序常用函数,串口设备驱动程序常用函数: ttyDrv和tyLib间关系,91/92,6.4.3 VxWorks驱动程序常用函数,串口设备驱动程序常用函数 tty设备驱动程序支持库函数,92/92,6.4.3 VxWorks驱动程序常用函数,串口设备驱动程序常用函数 tty设备驱动程序(ttyDrv)函数,
39、93/92,6.4.3 VxWorks驱动程序常用函数,串口设备驱动程序常用函数 底层驱动程序相关函数xxDrv,94/92,6.4.3 VxWorks驱动程序常用函数,串口设备驱动程序常用函数 底层驱动程序相关函数xxDrv 串口设备初始化函数xxDevInit(); 串口驱动入口点函数xxIoctl()、xxCallBackInstall() 等。,95/92,6.4.3 VxWorks驱动程序常用函数,网络设备驱动程序常用函数 VxWorks网络协议与MUX接口及网络设备驱动关系,96/92,6.4.3 VxWorks驱动程序常用函数,网络设备驱动程序常用函数 网络协议、MUX和网络设备
40、驱动之间的API关系,97/92,6.4.3 VxWorks驱动程序常用函数,网络设备驱动程序常用函数 协议层函数,98/92,6.4.3 VxWorks驱动程序常用函数,网络设备驱动程序常用函数 MUX层函数,99/92,6.4.3 VxWorks驱动程序常用函数,网络设备驱动程序常用函数 中断模式下网络设备和系统数据交换相关函数 中断模式下数据接收函数netJobAdd(); 中断服务程序xxInt()。,100/92,6.4.3 VxWorks驱动程序常用函数,网络设备驱动程序常用函数 驱动程序层相关函数(END模式) 设备装载函数endLoad() 和设备驱动卸载函数endUnload
41、() ; 设备驱动层发送数据函数endSend(); 启动和停止设备函数endStart()和endStop(); 添加、删除和获得广播地址函数endMCastAddrAdd()、和endMCastAddrDel()和endMCastAddrGet(); 轮询模式数据发送和接收函数endPollSend()和endPollReceive() ; 加入地址信息到数据包和从数据包中取出地址信息函数endAddressForm()和endAddrGet(); 从数据包中分离地址信息和数据函数endPacketDataGet(); endIoctl() 支持多种ioctl命令函数。,101/92,6.
42、4.3 VxWorks驱动程序常用函数,字符设备驱动程序的编写方法 包含系统定义的支持SELECT机制的TTY设备相关结构和函数:如TTY设备描述符TY_DEV、TTY读写函数tyRead()和tyWrite()函数、tyDevInit()初始化函数等; 自定义字符设备描述符数据结构:如字符设备描述符XX_DEVICE; 字符设备相关函数的编写: (1). 加载字符设备驱动: xxDevCreate()和xxDrv(); (2). 字符设备相关处理函数: xxOpen()、 xxRead()、xxWrite()、xxIoctl()、 xxClose()、 xxDelete()、 xxInitH
43、andler()等; (3). 字符设备驱动测试函数: drvTestxx()。,102/92,6.4.4 VxWorks驱动程序编写举例,块设备驱动的编写方法 包含系统定义的基本数据结构:如块设备基本描述符BLK_DEV结构、文件系统定义的相关数据结构等; 自定义块设备描述符数据结构:如块设备描述符XX_DEV; 块设备驱动通用初始化:设备通用初始化函数xxDrv()编写; 创建块设备:创建块设备函数xxDevCreate()编写; 块设备相关处理函数:读写块设备函数xxBlkRd()和xxBlkWrt()、I/O控制块设备函数xxIoctl()、块设备状态检查函数xxStatusCheck
44、()和复位函数xxReset()的编写; 块设备加载和卸载函数:Createxx()函数加载块设备(通过建立相关文件系统来实现块设备的加载和初始化),Deletexx()函数卸载块设备。,103/92,6.4.4 VxWorks驱动程序编写举例,串口设备驱动的编写方法 包含串口设备相关数据结构:SIO_CHAN, SIO_DRV_FUNCS, XX_CHAN等; 初始化串口设备:定义串行通道个数,初始化N个串口设备;涉及到系统硬件初始化函数sysHwInit()、系统串行硬件初始化函数sysSerialHwInit()、串口设备通道初始化函数xxDevInit()、系统串行硬件初始化函数Sys
45、SerialHwInit2()、初始化tty设备函数ttyDrv()、创建tty设备函数ttyDevCreate()等; 编写串口驱动相关处理函数:SIO_DRV_FUNCS结构中入口点函数xxCallBackInstall()、xxIoctl()、xxTxStartup()、xxPollOutput()、xxPollInput()等;输入输出中断函数,如xxIntWr()、xxIntRd(); 串口驱动程序测试函数Testxx():测试串口设备驱动并显示测试结果。,104/92,6.4.4 VxWorks驱动程序编写举例,网络设备驱动的编写方法 包含系统定义的END驱动相关结构:如END_O
46、BJ、NET_FUNCS、END_TBL_ENTRY、DEV_OBJ、NET_PROTOCOL、M_BLK、LL_HDR_INFO、END_ERR; 自定义结构和一些结构初始化:定义网络设备描述信息结构XXEND_DEVICE,初始化设备驱动程序表xxFuncTable, 初始化网络缓冲mbuf配置表xxMclBlkConfig, 初始化网络簇池配置表xxClDescTbl 等;,105/92,6.4.4 VxWorks驱动程序编写举例,网络设备驱动的编写方法 加载网络设备驱动程序:初始化END设备驱动程序入口表endDevTbl,指定END网络设备驱动加载入口;编写网络驱动程序加载程序xxL
47、oad(),初始化XXEND_DEVICE结构(初始化END_OBJ结构)等; 编写驱动程序相关处理函数:启动设备函数xxStart()、停止函数xxStop()、I/O控制请求函数xxIoctl()、收发数据处理函数xxSend()和xxRecv()、卸载设备函数xxUnload ()、广播地址添加、删除和获取函数xxMCastAddrAdd ()、xxMCastAddrDel()和xxMCastAddrGet()、轮询模式下设备启动停止函数xxPollStart()和xxPollStop()等。,106/92,6.4.4 VxWorks驱动程序编写举例,107/92,6.5 VxWorks
48、 应用程序开发,6.5.1 应用程序开发流程,6.5.2 VxWorks应用编程接口,6.5.3 应用程序开发,应用程序开发主要步骤 建立交叉开发环境,创建编译基于目标板的可启动工程,下载并启动VxWorks内核; 创建基于目标板的可下载工程,添加应用程序代码,编译可下载工程; 配置和启动目标服务器,下载并调试应用程序; 将调试好的应用程序添加到VxWorks内核并重新编译; 重新下载新的内核,新建任务运行应用代码,并重新编译转换和下载启动新内核; 在usrAppInit.c中修改初始化用户应用代码,加入自动创建任务执行应用程序功能; 烧写新内核到目标机。,108/92,6.5.1 应用程序开
49、发流程,实验6-4: VxWorks数码管和跑马灯控制演示实验 建立交叉开发环境,创建和编译基于目标板BSP的可启动工程,下载启动VxWorks内核并成功运行(参见实验6-3步骤15)。 创建基于目标板BSP的可下载工程,添加应用程序代码,编译工程(参见实验6-3步骤68)。 配置启动目标服务器;下载应用程序,利用调试工具调试应用程序,获得调试结果(见实验6-3步骤910)。 新建一个C代码文件,合并测试数码管和跑马灯功能,并加上头文件包含语句:#include”taskLib.h”,以便可直接在VxWorks控制台创建任务;将新文件加入可启动工程TestBsp_prj,重新编译内核并转换为二
50、进制内核映像文件(参考实验6-3步骤11)。,109/92,6.5.1 应用程序开发流程,实验6-4:VxWorks数码管和跑马灯控制演示实验 实验箱重启,重新下载并启动新内核,通过sp命令新建任务Test_SegLed,运行获得数码管和跑马灯测试打印结果和规律变化效果。 再次备份内核文件,修改vxWorks系统自启动的用户程序,在usrAppInit.c中加入初始化用户应用代码,自动创建任务SegLedDemo,并重新编译转换和下载启动新内核,内核启动后会自动执行任务Test_SegLed的应用功能,实现步骤5中效果。 烧写调试成功的新内核到目标机(从SDRAMFlash)中。,110/92
51、,6.5.1 应用程序开发流程,任务管理与调度API 创建和初始化任务函数 销毁或删除任务函数,111/92,6.5.2 VxWorks应用编程接口,任务管理与调度API 任务状态转换函数,112/92,6.5.2 VxWorks应用编程接口,任务管理与调度API 任务名和任务ID相关函数,113/92,6.5.2 VxWorks应用编程接口,任务管理与调度API 任务信息获取函数,114/92,6.5.2 VxWorks应用编程接口,任务管理与调度API 任务保护或去除保护函数 任务状态控制函数,115/92,6.5.2 VxWorks应用编程接口,任务管理与调度API 任务管理扩展函数 任
52、务优先级相关函数,116/92,6.5.2 VxWorks应用编程接口,任务管理与调度API 任务调度相关函数,117/92,6.5.2 VxWorks应用编程接口,任务通信API 共享内存相关双向链表操作函数,118/92,6.5.2 VxWorks应用编程接口,任务通信API 共享内存相关环形缓冲操作函数,119/92,6.5.2 VxWorks应用编程接口,任务通信API 互斥相关函数 基本信号函数,120/92,6.5.2 VxWorks应用编程接口,任务通信API 消息队列和管道函数,121/92,6.5.2 VxWorks应用编程接口,看门狗定时器和时钟管理API 看门狗定时器相关
53、函数,122/92,6.5.2 VxWorks应用编程接口,看门狗定时器和时钟管理API 时钟相关函数,123/92,6.5.2 VxWorks应用编程接口,中断管理API,124/92,6.5.2 VxWorks应用编程接口,网络通信套接字相关API,125/92,6.5.2 VxWorks应用编程接口,异常和错误处理API,126/92,6.5.2 VxWorks应用编程接口,watchdog编程 看门狗定时器相关的函数 wdCreate() 函数:创建看门狗定时器。 wdDelete () 函数:删除定时器。 wdStart () 函数:启动定时器。 wdCancel () 函数:取消定
54、时器。,127/92,6.5.3 应用程序开发,watchdog编程 看门狗定时器的使用过程 使用wdCreate()创建定时器; 使用wdStart()指定延时值和服务函数,并启动该定时器; 使用wdCancel()取消看门狗定时器; 使用wdDelete()删除看门狗定时器。,128/92,6.5.3 应用程序开发,watchdog编程 实验6-5:看门狗定时器编程实验 建立交叉开发环境,新建基于目标板BSP(cvtpxa270 BSP)的可启动工程TestBsp_prj(参见实验6-3步骤12),创建的可启动工程呈树形结构。 编译工程,生成内核映像文件,转换内核映像文件为二进制内核文件(
55、参见实验6-3步骤3)。 打开超级终端和TFTP,配置好超级终端相关参数以及TFTP的当前下载目录和主机地址,利用TFTP和go命令下载生成的内核映像文件的二进制代码vxworks.bin到目标机,并运行起来(参见实验6-3步骤45)。,129/92,6.5.3 应用程序开发,watchdog编程 实验6-5:看门狗定时器编程实验 新建一个简单的基于cvtpxa270 BSP的可下载工程Watchdog_prj,将包含测试代码的Timer.c文件加入到可下载工程中,编译该工程(参见实验6-3步骤68)。 配置和启动目标服务器,注意设置好内核文件路径,服务器启动后在Windows任务栏出现 图标
56、。Tornado Launch工具栏下拉列表中出现目标机信息,选择目标机,下载可目标程序Watchdog_prj.out到目标机(参见实验6-3步骤9)。 启动WindSh调试,在控制台进行操作,先后调用init()和task()函数,以便创建看门狗定时器和启动看门狗定时器(参见实验6-3步骤10),执行结果可通过超级终端查看。,130/92,6.5.3 应用程序开发,网络编程 VxWorks网络协议栈,131/92,6.5.3 应用程序开发,网络编程 VxWorks网络组件分类 网络初始化组件:包括基本网络支持、MUX和缓冲池初始化等功能。必须组件; 网络设备组件:包括网络驱动接口模式(BS
57、D和END),链路层协议(如点对点协议PPP),设备驱动组件、共享内存组件等。支持链路层部分为必选组件; 网络协议组件:包括基本协议(IP,TCP,UDP等,提供通信支持)和应用协议(FTP,DHCP等,提供应用支持)组件。,132/92,6.5.3 应用程序开发,网络编程 网络编程相关函数 网络配置函数,133/92,6.5.3 应用程序开发,网络编程 网络编程相关函数 操作路由表函数,134/92,6.5.3 应用程序开发,网络编程 网络编程相关函数 零拷贝缓冲区Zbuf 函数,135/92,6.5.3 应用程序开发,网络编程 网络编程相关函数 收发数据函数,136/92,6.5.3 应用
58、程序开发,网络编程 套接字通信分类 数据报套接字通信:基于UDP协议,提供无连接服务,数据通过相互独立的报文进行传输,数据流特点为双向无序、不保证无重复、无差错和可靠性。无连接的服务一般都是面向事务处理的,一个请求一个应答就完成了客户端与服务端之间的信息交互。 流套接字通信:基于TCP协议,提供可靠的面向连接服务,双向、有序、无差错无重复的顺序数据传输,具有较好可靠性,应用较广泛。面向连接服务比无连接服务处理起来要复杂。,137/92,6.5.3 应用程序开发,网络编程 套接字通信分类 数据报套接字通信 流套接字通信,138/92,6.5.3 应用程序开发,网络编程 流套接字重要数据结构 套接
59、字地址结构:sockaddr ; Internet风格套接字地址结构:sockaddr_in; IP地址结构:in_addr 。,139/92,6.5.3 应用程序开发,网络编程 套接字的重要函数 套接字创建函数: socket(); 套接字绑定函数: bind(); 套接字侦听函数: listen(); 套接字接收连接函数: accept(); 套接字请求连接函数: connect(); 关闭套接字连接函数: shutdown(); 套接字发送数据函数: send(); 套接字接收数据函数: recv()。,140/92,6.5.3 应用程序开发,网络编程 套接字工作过程 服务器端启动,调用socket()创建一个服务器端套接字; 服务器端调用bind()将该套接字和本地网络地址绑定; 服务器端调用listen()使套接字准备监听,并规定请求队列长度;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村生活污水回用系统2025年技术创新可行性研究
- 管理学原理心得体会
- 26年认知障碍老人心理照护
- 《2023年北方区域销售代理合同》
- 蒸发式冷凝器工作原理与选型实操手册
- 护理教学查房:案例研究与讨论
- 肾移植前后患者腹腔镜胆囊切除术的安全性与疗效分析
- 肺腺鳞癌临床病例深度剖析与诊疗策略探究
- 肺纤维化合并肺气肿(CPFE)综合征7例病例深度剖析与文献综览
- 肺癌患者外周血循环肿瘤细胞计数:开启精准医疗新时代
- DL-T825-2021电能计量装置安装接线规则
- 小米SU7 新车上市传播分析报告-营销策划方案培训课件
- RS-485 原理与驱动程序
- 幼儿园游戏观察与介入
- 小学奥数几何模块-等高模型、等积变形、一半模型
- 19.SL-T19-2023水利基本建设项目竣工财务决算编制规程
- 计算机辅助项目管理课程设计
- 年产2亿片的萘普生的车间设计
- 费马点练习题
- 新修水库施工方案
- JJF 1903-2021冲击响应谱试验机校准规范
评论
0/150
提交评论