现在位置:首页 >> 嵌入式操作系统 >> VxWorks
VxWorks基本概念及常见问题
作者:intq 时间:2009/10/11 文章来源:来自网络

Bootrom和Boot image的区别,Boot image和VxWorks 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. 在ROM中VxWorks运行的方式(和bootrom编译到一起还是单
独固化到ROM中),在ROM中的内存分配?

   VxWorks加载到主板运行,分不同的情况,如果VxWorks是压缩的,加载时解压到RAM的
RAM_HIGH_ADRS.如果是ROM based VxWorks,VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS,
text部分留在ROM并在ROM中执行。

  既不压缩又不ROM based的VxWorks直接copy到RAM_LOW_ADRS运行。

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

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

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

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

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

  2.用intConnect()登记中断号,和相应的中断例程ISR.这样一旦有中断发生,系统自动跳转到相
应位置执行ISR. Bootloader怎么得到,如果对开发板有些改动,还能使用开发板的bootloader吗?
bootloader起到什么作用?

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

   有些bootloader已经嵌在CPU内了,没有bootloader的CPU可以在片外的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 image到Flash, 这种VxWorks image包含有boot的功能(类似
VxWorks.rom形式),中间那段烧写到flash的程序是必须的,第一次通过串口下载VxWorks image到Dram
是一个简单的过渡,有boot loader控制。

  当烧写完成后,切换CPU到normal模式,系统启动,开始逐行读Flash中的指令,是由VxWorks BSP控
制,根据不同的VxWorks image定义,执行不同的操作,例如若VxWorks是压缩的,则解压复制到DRAM的
高位地址,……。

  VxWorks image 和Boot image中的两次硬件初始化之间的区别Boot image和VxWorks image都对硬件
进行了初始化。两次硬件初始化的是不同的。

  BootRom映像主要作用是通过网口或串口下载VxWorks系统,所以它只是初始化很少的硬件系统如串
口,网口等来满足下载VxWorks的需要,一旦VxWorks下载完毕。这些初始化过的硬件的作用也就完成了。

 

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

   汇编语言在VxWorks系统编程的使用:汇编语言主要出现在BSP文件roInit.s,sysAlib.s等,这些
汇编指令是系统初始化硬件用的, 硬件系统Power up时硬件特别是内存没有初始化,C函数库没有装入
内存,系统此时不支持C语言程序,只支持它自己的32位汇编指令,所以只能用汇编指令来初始化硬件,
为 后续的操作系统包括C语言支持做准备。在OS正常运行后,就可以用C了。

  Tornado不支持汇编指令,汇编在编译连接BSP,生 成bootrom或VxWorks映像,才被编译。有两种方
法:1.现在可以在Tornado环境下生成bootrom或建 Bootable 的 project 生成 VxWorks 2.传统的方法
,在命令行方式,用make编译生成。

  在Tornado下的downloadable的project,application中不能用汇编。

  不过一般汇编很少用。

  可以与其他bsp文件在tornado下作成bsp或用命令行make. VxWorks 下写驱动需注意的问题1.MMU 对
该硬件的地址映射正确 (改 BSP )

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

   3.查出中断号及中断级别,硬件中断登记 (INTCONNECT ),及 ISR 4.系统任务协调,保证在该
程序执行时,没有其它任务占用 CPU BSP 概念解析Drew在这里按照自己的理解来解释一下BSP( Board
Support Package),仅供参考:BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是
属于操作系统的一部分,主要目的是为了支持操作系统,使 之能够更好的运行于硬件主板。BSP是相对
于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的 BSP相对
于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统
BSP的定义形式来写(BSP的编程过程 大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层
OS保持正确的接口,良好的支持上层OS.例如:在VxWorks中的网卡驱动,首先在 config.h中包含该网卡
,然后将网卡含网卡的信息的参数放入数组 END_TBL_ENTRY endDevTbl [] 中,系统通过函数
muxDevLoad( )调用这个数组来安装网卡驱动。而在Linux中的网卡驱动,是在space.c中声明该网络设
备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup()来完成网卡驱动的安装。

  纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,
串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。

  Tornado中BSP的编译和上层应用程序不同,用命令行或直接在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机上的windows或Linux系统也是有BSP
的。只是PC机均采用统一的X86体系架构,这样一定操作系统 (windows,Linux……)的BSP相对x86架
构是单一确定的,不需要做任何修改就可以很容易支持OS在x86上正常运行,所以在PC机上谈论 BSP这个
概念也没什么意义了。

  而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并存 (PPC,ARM
,MIPS……),为了性能的需要,外围设备也会有不同的选择和定义。一个嵌入式操作系统针对不同的
CPU,会有不同的BSP,即使同一 种CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),
BSP相应的部分也不一样。

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

   BSP和PC机主板上的BIOS区别BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测
、初始化系统设备(设置栈指针,中断 分配,内存初始化……)、装入操作系统并调度操作系统向硬件
发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其 实是为下载
运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。在OS正常运行
后,BIOS的作用基本上也就完成了,这就是 为什么更改BIOS一定要从新关机开机。

  PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化 主板的基本设置,为
接收外部程序做硬件上的准备)。与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设
置(中断端口定 义,……),而Bootloader只是简单的装载系统。

  BSP是和操作系统绑在一起运行在主板上的,尽管BSP的开始部分和 BIOS所做的工作类似,可是大部
分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口……),此外程序
员还可以编程修 改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放
到BSP中。

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

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

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

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

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

  BSP部分在硬件和操作系统,上层应用程序之间。所以这就要求BSP程序员对硬件,软件和操作系统
      都要有一定的了解。这样才能做好BSP编程。熟悉工具方面:电表,示波器,逻辑分析仪。硬件仿真器,仿真调试环境。

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


上一篇:测试CPU空闲率(Vxworks)[返回列表]下一篇: 基于VxWorks的多DSP系统的