这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » VxWorks基本概念及常见问题

共1条 1/1 1 跳转至

VxWorks基本概念及常见问题

菜鸟
2008-07-22 10:53:41     打赏

 

 BootromBoot image的区别,Boot imageVxWorks image的联系和区别bootrom 是指on-chip

 

bootrom,在CPU芯片内部,内嵌有小的boot程序(bootloader),类似于PC机主板上的BIOS的存储区域

 

。和boot image不是一回事。VxWorks文档中的bootrom区是指boot image存放的位置。

 

  boot image的作用是把VxWorks image 加载到主板。boot image只初始化很少的硬件系统如串口,

 

网口等。为加载VxWorks image做准备,当VxWorks系统下载完毕后,boot image的作用也就完成了。

 

  VxWorks image含有完整的VxWorks OS.是真正运行于目标板上的操作系统。应用程序运行于VxWorks

 

系统之上。

 

   boot image VxWorks image生成在使用BSP文件上的区别在于:在启动顺序中Bootrom调用

 

bootConfig.c,而VxWorks调用usrConfig.c. ROMVxWorks运行的方式(和bootrom编译到一起还是单

 

独固化到ROM中),在ROM中的内存分配?

 

   VxWorks加载到主板运行,分不同的情况,如果VxWorks是压缩的,加载时解压到RAM

 

RAM_HIGH_ADRS.如果是ROM based VxWorksVxWorks imagedata段复制到RAMLOCAL_LOW_ADRS

 

text部分留在ROM并在ROM中执行。

 

  既不压缩又不ROM basedVxWorks直接copyRAM_LOW_ADRS运行。

 

  若在config.h中修改系统设置,如增加网卡等,是否需要重新烧bootrom?如果增加其他oem产品呢

 

 

  如果主板中有Boot image存在则不需要重新烧,用FTPdownload加载VxWorks即可。

 

  VxWorks 系统编程中任务级与中断级的通讯如何实现?

 

  中断是由硬件触发,软件的作用只是将中断服务例程(ISP)与中断事件连接起来。

 

  1.使能中断,函数intEnable()。

 

  2.intConnect()登记中断号,和相应的中断例程ISR.这样一旦有中断发生,系统自动跳转到相

 

应位置执行ISR. Bootloader怎么得到,如果对开发板有些改动,还能使用开发板的bootloader吗?

 

bootloader起到什么作用?

 

  Bootloader相当于PC机主板上的BIOS,是最底层的引导软件,初始化主板的基本设置,为接收外部

 

程序做硬件上的准备。

 

   有些bootloader已经嵌在CPU内了,没有bootloaderCPU可以在片外的eeprom内做bootloader,也

 

可以不要 bootloader,直接通过JTAG口灌入程序,开发板改动基本上不会影响bootloader. VxWorks

 

用程序编译下载时常见问题及原因分析Tornado环境下编译产生的错误:标准C函数或自己的函数,变量

 

不认识(undefined symbol),编译失败。

 

  Tornado支持c c++ ,文件后缀为。cpp时编译器会认为是c++文件,这样有些定义类型为C的函数

 

在编译或下载时不被认可。

 

  解决方法是 1.把如果在c++文件(。cpp)中调用c函数,应该把这些不被认可的c类型函数用语句

 

extern "C"说明一下为c函数。

 

  另外,如果将c文件的后缀小写的。c误写为大写的。C,也会出同样的错误,编译时不会编译这个文

 

件。

 

  Tornado环境应用程序下载产生的错误:函数不认识(undefined symbol),下载失败。

 

   虽然编译通过,可是下载时依然会有这样的问题,仍然是函数或变量没有定义。系统不认识,这是

 

出错的原因基本上时没有定义的错误。查找包含函数或变量的头 文件是否加了进去。如果实在找不到定

 

义的话,简单的办法是先把这他们去掉(当然是没有其他地方用到的情况下)试一试,先down下去,能

 

运行后,然后添 加,再继续查找。

 

  在ARM下不用Boot image,直接烧入VxWorks image的过程有些ARM CPU一般分两种运行方式,一种是

 

Boot方式,一种是normal方式。

 

   在Boot方式下直接烧写VxWorks imageFlash 这种VxWorks image包含有boot的功能(类似

 

VxWorks.rom形式),中间那段烧写到flash的程序是必须的,第一次通过串口下载VxWorks imageDram

 

是一个简单的过渡,有boot loader控制。

 

  当烧写完成后,切换CPUnormal模式,系统启动,开始逐行读Flash中的指令,是由VxWorks BSP

 

制,根据不同的VxWorks image定义,执行不同的操作,例如若VxWorks是压缩的,则解压复制到DRAM

 

高位地址,……。

 

  VxWorks image Boot image中的两次硬件初始化之间的区别Boot imageVxWorks image都对硬件

 

进行了初始化。两次硬件初始化的是不同的。

 

  BootRom映像主要作用是通过网口或串口下载VxWorks系统,所以它只是初始化很少的硬件系统如串

 

口,网口等来满足下载VxWorks的需要,一旦VxWorks下载完毕。这些初始化过的硬件的作用也就完成了

 

 

  VxWorks启动后会从新对几乎所有的硬件设备进行完全的初始化来满足VxWorks操作系统运行的需要

 

 

   汇编语言在VxWorks系统编程的使用:汇编语言主要出现在BSP文件roInit.ssysAlib.s等,这些

 

汇编指令是系统初始化硬件用的, 硬件系统Power up时硬件特别是内存没有初始化,C函数库没有装入

 

内存,系统此时不支持C语言程序,只支持它自己的32位汇编指令,所以只能用汇编指令来初始化硬件,

 

后续的操作系统包括C语言支持做准备。在OS正常运行后,就可以用C了。

 

  Tornado不支持汇编指令,汇编在编译连接BSP,生 bootromVxWorks映像,才被编译。有两种方

 

法:1.现在可以在Tornado环境下生成bootrom或建 Bootable project 生成 VxWorks 2.传统的方法

 

,在命令行方式,用make编译生成。

 

  在Tornado下的downloadableprojectapplication中不能用汇编。

 

  不过一般汇编很少用。

 

  可以与其他bsp文件在tornado下作成bsp或用命令行make. VxWorks 下写驱动需注意的问题1.MMU

 

该硬件的地址映射正确 (改 BSP

 

  2.中断向量表该中断的定义位置,知道相应中断的中断标志位等信息(改 BSP

 

   3.查出中断号及中断级别,硬件中断登记 INTCONNECT ),及 ISR 4.系统任务协调,保证在该

 

程序执行时,没有其它任务占用 CPU BSP 概念解析Drew在这里按照自己的理解来解释一下BSP Board

 

Support Package),仅供参考:BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是

 

属于操作系统的一部分,主要目的是为了支持操作系统,使 之能够更好的运行于硬件主板。BSP是相对

 

于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorksBSPLinux BSP相对

 

于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统

 

BSP的定义形式来写(BSP的编程过程 大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层

 

OS保持正确的接口,良好的支持上层OS.例如:在VxWorks中的网卡驱动,首先在 config.h中包含该网卡

 

,然后将网卡含网卡的信息的参数放入数组 END_TBL_ENTRY endDevTbl [] 中,系统通过函数

 

muxDevLoad )调用这个数组来安装网卡驱动。而在Linux中的网卡驱动,是在space.c中声明该网络设

 

备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup()来完成网卡驱动的安装。

 

  纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,

 

串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。

 

  TornadoBSP的编译和上层应用程序不同,用命令行或直接在Tornado环境下Build,在Tornado下不

 

能跟踪调试。

 

   用户也可以添加自己的程序到BSP中,但严格来说不应该算BSP.一般来说这种做法不建议。因为一

 

旦操作系统能良好运行于最终的主板硬件后,BSP也就 固定了,不需要做任何改动。而用户自己在BSP

 

的程序还会不断的升级更新,这样势必对BSP有不好的影响,对系统造成影响,同时由于BSP调试编译环

 

较差,也不利于程序的编译调试。

 

  上层程序Tools - Applications I/O System VxWorks Libraries TCP/IP Wind Kernel BSP SCSI

 

Controllerr Controllerr Serial Controller Controller Clock Timer Timer Ethernet Controller

 

Controller …… ……

 

  硬件BSP在嵌入式系统和Windows 统中的不同其实运行与PC机上的windowsLinux系统也是有BSP

 

的。只是PC机均采用统一的X86体系架构,这样一定操作系统 windowsLinux……)的BSP相对x86

 

构是单一确定的,不需要做任何修改就可以很容易支持OSx86上正常运行,所以在PC机上谈论 BSP这个

 

概念也没什么意义了。

 

  而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPURISC)并存 PPCARM

 

MIPS……),为了性能的需要,外围设备也会有不同的选择和定义。一个嵌入式操作系统针对不同的

 

CPU,会有不同的BSP,即使同一 CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),

 

BSP相应的部分也不一样。

 

  所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。

 

   BSPPC机主板上的BIOS区别BSPPC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测

 

、初始化系统设备(设置栈指针,中断 分配,内存初始化……)、装入操作系统并调度操作系统向硬件

 

发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其 实是为下载

 

运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。在OS正常运行

 

后,BIOS的作用基本上也就完成了,这就是 为什么更改BIOS一定要从新关机开机。

 

  PCBIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化 主板的基本设置,为

 

接收外部程序做硬件上的准备)。与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设

 

置(中断端口定 义,……),而Bootloader只是简单的装载系统。

 

  BSP是和操作系统绑在一起运行在主板上的,尽管BSP的开始部分和 BIOS所做的工作类似,可是大部

 

分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口……),此外程序

 

员还可以编程修 BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放

 

BSP中。

 

  而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件

 

驱动。

 

  BSP在嵌入式开发中的位置和作用BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能够

 

正常运行的保证。

 

  大概步骤如下:1.硬件主板研制,测试。

 

  2.操作系统的选定,BSP编程。

 

  3.上层应用程序的开发。

 

  BSP部分在硬件和操作系统,上层应用程序之间。所以这就要求BSP程序员对硬件,软件和操作系统

 

都要有一定的了解。这样才能做好BSP编程。

 

  熟悉工具方面:电表,示波器,逻辑分析仪。硬件仿真器,仿真调试环境。

 

  语言方面:汇编语言,C语言。

 

 




关键词: VxWorks     基本     念及     常见问题     image         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]