嵌入式操作系统第2章VxWorks及其集成开发环境Tornado嵌入式操作系统主要内容1、VxWorks操作系统2、VxWorks映像及其启动过程3、Tornado集成开发环境嵌入式操作系统•重点掌握–映像的类型及启动顺序–生成映像相关的代码–Tornado集成开发环境搭建–创建映像–动态加载、运行、调试应用程序嵌入式操作系统1、VxWorks操作系统•VxWorks操作系统的体系结构•VxWorks主机与目标机•VxWorks模块库•VxWorks与BSP嵌入式操作系统1.1VxWorks体系结构嵌入式操作系统VxWorks的网络设施VxWorks的网络设施包括:与BSD套接字兼容的编程接口远程过程调用RPC(RemoteProcedureCall可选的简单网络管理协议SNMP(SimpleNetworkManagementProtocol远程文件访问,包括基于client/Server的NFS机制以及使用RSH、FTP或TFTP的非NFS机制远程的登录和telnetTCP/IP协议栈无论是松耦合的串行线路、标准的以太网连接还是紧耦合的利用共享内存的背板总线,所有的VxWorks网络机制都遵循标准的Internet协议以及bootp和ARP代理嵌入式操作系统其他组件•虚拟内存(VxVMI)与共享内存(VxMP)–VxVMI为带有MMU的目标板提供了虚拟内存机制–VxMP提供了共享信号量、消息队列和在不同处理器之间的共享内存区域•加载调试等开发工具组件–提供运行在目标机上的动态加载器Loader、目标机调试代理WDBAgent、TargetShell等嵌入式操作系统1.2VxWorks的主机与目标机•VxWorks的开发使用基于主机/目标机结构的交叉开发环境–主机:运行Tornado集成开发环境,为目标机生成VxWorks和应用程序–目标机:运行VxWorks和应用程序的嵌入式系统–主机与目标机之间通过以太网或串口相连,其通信由Targetserver/Agent方式进行嵌入式操作系统默认方式下,targetserver与targetagent通过网络通信,但用户也可以改变通信方式嵌入式操作系统•目标代理(TargetAgent)–遵循WDB(WindDebug)协议,允许目标机与主机上的Tornado开发工具相连–在目标代理的默认设置中,目标代理是以VxWorks的一个任务tWdbTask的形式运行的–TargetServer向目标代理发送调试请求(断点设置、任务控制等等),调试请求可以决定目标代理对系统中其他任务的控制和处理嵌入式操作系统1.3VxWorks模块库•VxWorks子程序都组织成库,每个库都有一个或多个头文件,如:库函数函数头文件taskLibsemLibtaskSpawnsemTakesemLib.htaskLib.h嵌入式操作系统嵌入式操作系统1.4VxWorks与BSP•BSP由代码、文档和规范组成,用作VxWorks程序和特定硬件之间的接口•BSP代码用于完成系统初始化,设备驱动和其他一些硬件相关的操作•VxWorks提供定制硬件的板级支持包BSP,实现硬件抽象层•VxWorks自带的BSP代码是针对硬件厂商的Demo板定制的,用户可以根据自己的单板对Demo板代码进行修改嵌入式操作系统2、VxWorks映像及其启动过程•VxWorks映像类型•映像相关的文件•VxWorks的启动过程嵌入式操作系统映像格式•ELF格式(ExecutableandLinkingFormat)Executablefile嵌入式操作系统2.1VxWorks映像分类•Bootrom型—常称bootrom或boot–是一个最小化、专用的VxWorks引导映像,实现最少的系统初始化–主要用于启动装载VxWorks映像,其功能类似于PC机的BIOS–运行时也建立起多任务环境–通常存放在ROM或Flash中•Vxworks型—常称Vxworks映像–是系统最终要运行的映像–在运行时至少有一部分需要在RAM中运行嵌入式操作系统•这两大类型的映像都由BSP、VxWorks和Application3个部分组成,可以在其开发工具Tornado上通过建立一个bootableimage获得ApplicationBSPWind内核WDBAgentShellFileSystemVxWorks嵌入式操作系统•BSP(BoardSupportPakage,板级支持包):它由初始化和基本驱动程序两部分组成•初始化是指从系统上电复位开始直到Wind内核和UsrRoot根任务启动的这段时间,系统的执行过程•初始化过程包括:CPUInit、BoardInit、SystemInit。–CPUInit:初始化CPU的内部寄存器–BoardInit:初始化I/O的寄存器–SystemInit:为系统的运行准备数据结构,进行数据初始化嵌入式操作系统•基本驱动程序完成对最小I/O设备的读写访问等驱动操作•VxWorks:包括定制的VxWorks内核和各种外挂功能模块•Application:为用户编写的应用程序•BSP代码位于\target\config\下硬件相关子目录嵌入式操作系统VxWorks映像•当构造VxWorks映像时,可以根据需要构造不同类型的映像,系统把这些映像分成三种类型:–ROM驻留(ROM-Residentimage)的映像•具备自启动功能–基于ROM的映像(ROM-basedimage)–可加载的映像(loadableimage)嵌入式操作系统ROM驻留(ROM-Resident)的映像•它在启动时把数据段拷贝到目标机RAM中•这种类型的映像在启动阶段比较快,但它在目标机上执行的速度比其他类型的映像要慢•升级不方便,适合内存资源有限的场合嵌入式操作系统•执行顺序:嵌入式操作系统基于ROM的映像(ROM-basedimage)•不具备自启动功能,它的执行需要通过bootrom把它从ROM或Flash中装载到目标机RAM中,然后才开始执行•这种类型的映像通常在启动阶段比较慢,但在目标机上执行的速度要快•方便升级•产品发布时,常使用这种映像嵌入式操作系统•执行顺序:嵌入式操作系统可加载的映像(loadableimage)•不具备自启动功能,它的执行需要通过bootrom把它装载到目标机RAM中,然后才开始执行•调试时,一般使用这种映像•加载时需要相关协议支持:串口、网口及其他协议嵌入式操作系统•执行顺序:嵌入式操作系统典型的VxWorks映像•按照VxWorks构造规则可以创建以下多种典型的VxWorks映像–VxWorks—loadableimage,由bootrom加载,在RAM中运行,使用宿主机上的WindSh工具和符号表–VxWorks.st—loadableimage,加载方式同上,但它内置符号表–VxWorks_rom—rom-basedimage,写入rom,自启动,在RAM中运行–VxWorks.st_rom—compressedrom-basedimage,加载方式同上嵌入式操作系统–VxWorks.res.rom—rom-residentimage,代码在ROM中运行–VxWorks.res_rom_nosym—rom-residentimage,代码在ROM中运行,不包含符号表★以上几种均为VxWorks映像–bootrom—基于rom压缩型的引导映像–bootrom_uncmp—基于rom非压缩型的引导对象–bootrom_res—rom驻留型引导映像★以上3种均为bootrom嵌入式操作系统2.2映像相关的文件•映像相关文件主要包含在四个目录下(BSP相关文件):–Tornado\target\config\all:所有BSP的公共部分–Tornado\target\config\comps\vxworks:内核基本模块描述文件(*.cdf)–Tornado\target\config\comps\src:模块配置文件(被usrConfig.c使用)–Tornado\target\config\bspname:与目标板相关的部分嵌入式操作系统•config\all目录下主要有如下几个文件–bootConfig.c:是所有Bootrom的主要初始化与控制文件•BootConfig.c是usrConfig.c的一个子集,所以Bootrom只能提供完整VxWorksImage中的部分功能•BootImage不使用MMU库(SPARC除外)。在集成环境下修改工程相关的配置信息不会影响Bootrom,只有直接修改config.h、configAll.h、bootConfig.c和bootInit.c文件才会影响到Bootrom嵌入式操作系统–bootInit.c:定义了romStart()函数,用于Bootrom的第二阶段初始化。首先把text和data段从ROM拷到RAM中,然后初始化部分RAM,进行解压–usrConfig.c:包含VxWorksImage的主要初始化代码,非常完整。使用命令行编译时才会用到此文件–configAll.h:设置了所有VxWorks映像的默认配置,包括内核配置、组件配置、参数配置、Agent配置等等嵌入式操作系统•config\bspname:在该目录下主要有如下几个文件–makefile:用于命令行下编译,其中定义了一些宏,如:CPU,TOOL,TARGET_DIR,VENDOR,BOARD,ROM_TEXT_ADRS,ROM_BASE_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS;–config.h:包含所有的头文件和与目标板相关的特殊定义,如:BSP版本号和修订版本号、默认引导参数、对Cache和MMU的配置、RAM和ROM的定位以及大小配置、外部总线地址映射,网络设备和中断向量嵌入式操作系统–romInit.s:该文件包含Bootrom和Rom-basedVxWorksImage的初始化入口汇编代码,即实现了romInit()。目标板一上电就开始执行romInit(),主要完成三部分工作:•屏蔽中断,初始化CPU•配置内存系统,通常包括关闭cache,初始化内存控制器•初始化堆栈指针和其它寄存器以执行C语言,然后调用romStart()Note:romInit()函数必须设计成与内存地址无关的代码(PIC),romInit.s只执行一些必要的初始化,其余的初始化工作可放到sysHwInit()中实现嵌入式操作系统–sysALib.s:包含目标板或系统相关的汇编语言函数,即实现了_sysInit()。这是Bootrom起来以后执行的第一段代码,sysALib.s类似于romInit.s完成的工作,但它不必设计成PIC,且可调用其它库中的函数嵌入式操作系统–sysLib.c:包含目标板或系统相关的C语言函数,该文件提供板级接口,通过该接口,VxWorks和应用程序的实现与目标系统无关,sysLib.c包含src\drv目录下的驱动程序子文件,驱动程序的安装和初始化在子文件中完成。它中一般应实现以下几类函数:•系统时钟相关函:sysClkConnect(),sysClkDisable(),sysClkEnable(),sysClkInt(),sysClkRateGet(),sysClkRateSet()嵌入式操作系统•系统硬件初始化函数:sysHwInit(),sysHwInit2();•内存相关函数:sysMemTop()•串口相关函数:sysSerialHwInit(),sysSerialHwInit2(),sysSerialChanGet()•杂项函数:sysBspRev(),sysModel(),sysToMonitor()•其他可选函数:如:辅助时钟中断相关函数,总线相关函数–sysSerial.c:串口驱动程序的安装和初始化–sysNet.c:网络接口设备的安装和初始化嵌入式操作系统–bspname.h:包含与板子相关的宏定义。若要把s