VxWorks的使用绪论这本书的目的不是为你介绍VxWorks入门的详细内容或嵌入式和实时系统的编程。也就是说,本章将介绍关于VxWorks使用的一些基本背景知识和一些相关的工具。本章将主要介绍命令行工具,因为它们对中级或高级用户来说更有用,而风河公司的文件对此也涉及较少。基本工具工具介绍每一个VxWorks安装都自带一些工具。自5.3版以后,他们被称为Tornado;在此之前,他们只是安装的产品的一部分。这些工具的二进制文件可以在主机的安装根目录/host-type/bin(如.../host/sun4-solaris2/bin,...\host\x86-win32\bino或.../host/x86-linux2/bin)中找到。VxWorks提供的最常用的编译器是一种变异的GNU的gccC/C++编译器。在VxWorksAE和VxWorks5.5版本之前通常是2.7.2版本。令人困惑的是,有些版本的Tornado2,进行更大的和2.0版本小于2.2,使用其他版本。要检查您的编译器的版本就调用有版本选择的编译器(注意双波折号前缀)。混合不同版本的VxWorks二进制文件不是一个好方法。二进制文件的规格出现了一些变化,例如:针对某一特定的CPU,修正编译器使其更好的遵守EABI或ABI约定。升级到VxWorksAE或VxWorks5.5后也更改格式为ELF的几乎所有的架构,已经被埃尔夫。偶尔也会改变内部数据结构,这可能会导致旧的二进制文件的兼容性问题。其他一些编译器也可以使用(如GreenHills或Diab,后者现为风河公司所有)。不过总的来讲,这些编译器和GNU编译器相比几乎没有优势。作者强烈建议在仔细评估代码在实际应用的效果后再选择支付这些编译器中的一个。在某些情况下,两者都能够产生比GNU更小且更快的代码,但不是总是如此,而且通常幅度并不大。下表列出了VxWorks提供的具体工具。为明确起见,省略了工具应加的结构名称后缀,例如,当使用PowerPC目标机时将使用cc代替ccppc。如果你不知道的话,在文件中查对你的结构的后缀,。另请注意,并非每个版本的Tornado/VxWorks都带有所有这些,所以如果有一些较含糊的内容在您的安装文件中找不到也不要感到惊讶,ToolPurposeaddr2line将地址转换为一个可执行到目标文件名和行号ar存档工具:用于创建和操做文件asGNU汇编c++C++编译器c++filtC++symboldemanglerutilitycc主要的C编译器(也编译C++文件)cppC预处理器g++c++的别称gaspGNU宏汇编预处理器ld链接nm目标文件的符号列表工具objcopy目标文件操作工具–可以进行目标文件的多种转换objdump目标文件分析工具ranlib过时的工具,用于生成索引存档,现在由ar自动处理readelfELF-具体的目标文件分析工具size报告目标文件中段的实际大小strings从二进制文件中提取可打印的字符串strip去除目标文件中的无用信息(例如,调试信息或符号名)还有一些结构的独立工具放在Tornado安装目录下的bin中。下面的表格为命令行用户介绍一些最重要的工具。其中一些将在以后的几节做详细介绍。工具功能binToAsmTBDdeflate生成压缩ROMimage时使用的压缩工具elfToRelfVxWorksAE工具,将ELF转换为R-ELFexpectTBDmakeGNUmake的一个版本(通常是很旧的版本).memdrvbuild创建memDrvimage的工具munchC++的汇编工具,生成目标C或D的静态阵列refgen文档生成工具(将WindRiver编码的标准头文件和函数生成HTML格式的文档)romsize计算ROMimage的大小,并在其大于给定的ROM驱动器时发出警告smsToBinVxWorksAE工具,为每个bootable域的映像创建一个综合的二进制版本tclshTCLshell.tgtsvr目标服务器,可用命令行工具启动,它允许其他工具和目标机系统通信.torVars.batWindows主机的;在使用任何其他命令行工具之前由每个命令提示符窗口执行一次torVars.cshUnixCshell用户的环境初始化脚本,在使用任何其他命令行工具之前应指明来源(不执行)。torVars.shUnixBourneshell(或bash)用户的环境初始化脚本,在使用任何其他命令行工具之前应指明来源(不执行)vxencrypt版本的Unix隐窝命令生成加密的密码字符串的目标所需要的rlogin和Telnet服务时,验证已启用vxsize计算出的大小VxWorks映像的大小,并确定它是否适合存放在RAM_LOW_ADRS和RAM_HIGH_ADRS之间的内存中,即它是否可由VxWorks启动windsh基于主机的VxWorksshell的命令行版本。要求运行目标服务器以连接目标机系统(参见上面的tgtsvr)windviewWindView运行时的分析工具的独立版本wishTCL/Tk的窗口shellwtxregd目标注册表服务,其中一个必须在由WIND_REGISTRY指定的的作为目标服务器的机子上运行。最常见的本地运行,但可以在另一台机子上运行。中央登记处,允许不同和主机上的多个用户共享目标服务器之间的连接TargetServer目标服务器通过目标服务器将运行在主机上的工具和目标系统联系起来。目标机必须运行WDB代理进行这一工作(在INCLUDE_WDB中查看所有的宏/组件配置,以及WDB_配置参数)。也许不那么众所周知的事实是,目标服务器并不需要和工具运行在同一台计算机上。每个目标服务器有一个名字,而且名字被注册在目标机注册表里(可在文件中查看wtxregd和环境变量WIND_REGISTRY)启动目标服务器,首先请确保WIND_REGISTRY点,一台机器在您的网络上运行的WTX登录守护进程(服务在Windows的术语)。然后用目标机系统的名称或IP地址运行tgtsvr(如果您的主机的文件或LAN的DNS服务器中没有目标机的IP地址,那么您必须使用分配给目标机系统的IP地址)tgtsvr-ntarget-99target-99&tgtsvr-ntarget-99192.168.1.99&请注意,在这些例子中,服务器使用Unixshell在后台运行,其特点是在命令行的结尾增加了'&'符号。Windows用户则可能想要建立一个快捷命令,可以简单地双击来启动服务器,或使用开始命令通过命令提示符在它本身的窗口中启动一个新的目标服务器在所有这些例子中,我们使用了-n选项来为目标服务器指定了一个名称。如果不使用该选项,它会默认为目标机的名字或IP地址。假设主机的全名为host.somecompany.com,那么目标服务器的全名就是target-99@host.somecompany.com。在该主机上的,可使用简写形式target-99;同一域的其他计算机可以使用target-99@host。从理论上讲,如果系统对互联网是开放的,那么世界上任何地方的工具可使用全名连接到目标服务器。注:使一台目标服务器在互联网上可见可能是一个严重的安全风险这种命名方式允许在潜在的任何计算机上运行的工具都可以连接到这个目标服务器,并从那里到目标机系统本身。这样可使多个开发者共享目标机。由于VxWorks不是一个多用户操作系统,所以多个用户同时共用一个目标机是不明智的。也就是说,让另一位也许在一个远程站点工程师使用目标机帮助调试东西可能会有作用。另一个常见的作用是当目标机需要被孤立在自己的子网上时。一台机器可以作为所有目标服务器的主机,从而允许任何机计算机上的工具连接到目标机,而基本上他们对网络的其余部分是不可见的(只要网关没有设置网络之间的数据包转发)。Figure1.1-HidingTargetsfromtheCorporateLAN从公司局域网中屏蔽目标机有效的隐藏专用局域网上的目标机系统这种方式也许是可取的,原因有许多,包括应用中目标系统要产生大量的网络流量,这可能干扰企业局域网的日常使用。可能会用到目标服务器的一些其他选项。如果要查看完整的列表,选择帮助选项开始目标服务器。下表显示的是一些较常见的(请注意,目标服务器的命令行选项是区分大小写的):选项描述-包括局部符号,以及所有模块全局符号。这样,您就可以把你的A代码中声明的符号看做是静态的。自动变量的符号是不可见的(即那些函数内部声明的变量)。-B选择不同的连接后端。默认值为网络的RPC后端,但您的系统可能需要使用别的端口。使用JTAG探针的连接以及到模拟器的连接将需要使用此选项-c指定目标机核心文件(即bootimage)的位置。当目标机运行的是ROM'd版本的内核这一点是非常重要的,但将目标文件从另外一台计算机加载到目标服务器运行的计算机上是也会用到。-n为目标服务器指定一个名称。更多内容请查看上文-N不由由核心文件加载任何符号-Rroot使目标服务器的文件系统关联指定的根目录。-RW读写目标服务器文件系统-V打开详细模式,尤其在启动目标服务器调试问题的时候源文件调试工具TargetShell和loder建立内核映像启动目标机系统要想通过网络启动目标系统,您需要确保您拥有下列内容:一个带有VxWorksbootrom的目标板(其他固件,甚至JTAG工具也可以用来启动VxWorks,但软件开发时使用VxWorksbootrom通常更简单)。一台运行在适当服务器上的主机。FTP,TFTP和Unix系统的RSH可用于bootimage的网络传输。AVxWorksimagetoboot.用于启动的VxWorksimage还有其他方法来启动一个目标系统,包括把内核image直接烧进目标板的Flash或PROM,也可以从本地文件系统中载入,如硬盘或闪存文件系统。如果您正在使用的是COTS硬件或制造商的参考电路板,请查看你的BSP的文件,该文件说明了如何把相应BSP的bootrom烧入到目标板中。现在大部分板子支持板上闪存功能,即可使用网络或串口线把数据传输到目标系统。老的板子可能需要使用额外的编程器件把image拷入到进行编程到flash或EPROM中。对于那些使用自定义硬件的,情况更复杂一点。这时,建议你采用一些外部硬件调试器,如一个基于JTAG的调试器。虽然不是必不可少的,但在为自定义的硬件开发BSP时这将是有益的。一旦你的BSP开始工作,bootrom映像将被烧入到目标的闪存(使用各种可行的方法)。Bootline设置该bootline包含VxWorksbootrom需要的把VxWorks的内核image下载到目标机内存的所有信息。下面的表格描述了参数以及用于实际bootstring的abbeviation。bootstring是存储信息到非易失RAM(假设目标板支持非易失RAM)所用的格式,默认时存储到bootrom的image。bootrom提出的这些更人类可读的格式与p命令。参数BootStringVariable描述BootDeviceN/A启动用的驱动器。这些代表驱动器的缩写名。例如ene,fei或SCSI。UnitNumberN/A目标机上有多个驱动器的情况下驱动器的数目。通常该值是零。ProcessorNumberN/A底板上处理器的数目(不在底板上的目标板不需要此值)HostNameN/A用于网络启动的主机系统名FileNameN/A用于启动的映像的路径名InetonEthernete用于启动目标及系统的以太网接口的IP地址(或从本地盘启动时指定一个地址,如果,但要初始化网络)。或者,该地址可以包含十六进制的网络掩码,如192.168.1.1:ffffff00。InetonBackplaneb背板网络的IP地址(如果使用背板网络)HostIneth网络加载时主机的IP地址GatewayInetg主机和目标机不在同一子网时的网关。。注:此地址是不是用来设置默认路由,它仅