Vous êtes sur la page 1sur 12

VxWork BSP 和启动过程

 开发 BSP 主要的两点:

1. 系统 image 的生成,image 的种类,image 的 download 下载过程,系统的启


动顺序和过程,调试环境的配置及远端调试的方式和方法,相应 BSP 设置
文件的修改(网络,串口..),BSP 各文件的组成和作用.

2. 要对系统底层驱动清楚,也就是对 CPU 及相关的硬件有所了解.主要是 32


微处理器(上电启动过程, download image 的方式方法,读写 ROM,地址空
间分配,MMU,寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮
助.

Tornado 2 开发调试环境协议框图

主机开发(Host Development System) 目标机(Target System)


Tornado 工具

Target Application
Shell Server
  VxWorks OS
Editor Debugger
WTX 协议通信< WDB 协议通信 VxWorks
Project Browser |
==========> <==========> Target
Windview Target
(WDB)Agent
Agent
VxWorks
Target
Simulator

两个主要两个协议
WTX 协议(Wind River Tool eXchange): 用于开发机内部 Tornado 工具与 Target
Server 之间通信.

WDB 协议(Wind DeBug): 用于主机 Target Server 与目标机之间的通信.

一.基本概念

BSP 定义:

Provides VxWorks with primary interface to hardware environment.

作用:

 在通电后,初始化硬件.

 支持 VxWorks 和硬件驱动通信.
 使 hardware-dependent 和 hardware-independent 在
VxWorks 系统中很好的结合.

主要 BSP 主要文件目录的组成及主要文件的作用:

 目录 target/config/All:

这个目录下的文件是所有 BSP 文件共享的,不是特别需要不要更改里面的任何


文件.

configAll.h:

缺省定义了所有 VxWorks 的设置.如果不用缺省的设置,可在 BSP 目录下的


config.h 文件中用#define 或#undef 方式来更改设置.

bootInit.c:

在 romInit.s 后,完成 Boot ROM 的第二步初始化.程序从 romInit.s 中的 romInit()


跳到这个文件中的 romStart().来执行必要的解压和 ROM image 的放置.
bootConfig.c: 完成 Boot ROM image 的初始化和控制.

usrConfig.c: VxWorks image 的初始化代码.

 目录 target/config/comps/src:

涉及系统核心的 components,主要由 target/config/All 中 usrConfig.c 中函数调用

 目录 target/config/bspname:

包含系统或硬件相关的 BSP 文件.

Makefile

一些命令行控制 images 的生成,参见 BSP 设置部分及生成下载

README

BSP 发布纪录,版本,总的文档

config.h

包括所有涉及 CPU 主板的设置及定义(includes,definations),参见 BSP 设置文


件及生成下载

configNet.h

网络驱动的主要设置文件,主要对 END 驱动设置.

romInit.s

汇编语言文件,是 VxWorks Boot ROM 和 ROM based image 的入口,参见 系统


启动部分

sysALib.s
汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调
用.VxWorks image 的入口点_sysInit 在这个文件里,是在 RAM 中执行的第一个
函数.

sysLib.c

包含一些系统相关的函数例程,提供了一个 board-level 的接口,VxWorks 和应用程序可以以

system-indepent 的方式生成.这个文件还能包含目录 target/config/comps/src 的驱动.

sysScsi.c

可选文件用于 Scsi 设备设置和初始化.

sysSerial.c

可选文件用于所有的串口设置和初始化.

bootrom.hex

ASIC 文件包含 VxWorks Boot ROM 代码

VxWorks

运行在目标机上,完整的,连结后的 VxWorks 二进制文件.

VxWorks.sym

完全的,连结后带有符号表的 VxWorks 二进制文件

VxWorks.st

完全的,连结后,standalone,带有符号表的 VxWorks 二进制文件

 BSP 用"make"来编译连接生成(Created),而不是用 Tornado 的


工具.
 BSP 和应用程序都可以在"make"或"tornade"上开发
(developed)

 BSP 被设置包括以下驱动:

中断控制 interrupt controller,计时器 timer(sys/aux),串口 UART(serial),显示屏


LCD,键盘 Keyboard(opt),触摸屏 touch-screen(opt).

前面三个是 BSP 的主要部分.

 BSP 默认的 download VxWorks RAM image 方式是从


ethernet.

 串口电缆需要用来和开发板(COM1)通信,通过协议 WDB.

VxWorks Image 的种类:

 Loadable images.

 ROM-based images---compressed/uncompressed.
 ROM-Resident images.

ROM-resident image 对一些系统内存 RAM 资源较少的情况下,为了节省资源,


只拷贝 image 中的数据部分(data segment)到内存 RAM,留下程序部分(text
segment)在 ROM 中执行。这样空出更多的 RAM 空间给应用程序。
并不是所用得板子都支持这种 VxWorks image.

 VxWorks boot images---A VxWorks image designed to load


another VxWorks images containing application code (often
refer to as "boot code")

 "Burned" into ROM or loaded into Flash.

 Maybe execute in ROM/Flash (ROM-resident).


 Maybe execute out of RAM.
 VxWorks images---A VxWorks image containing "end-user"
code,Sub-types:

 Loadable VxWorks image--VxWorks images loaded by VxWorks boot image.

Loadable VxWorks image 是通过 VxWorks boot image 装载的 VxWorks


images.

 VxWorks ROM image--VxWorks image "burned" into


ROM or loaded into Flash.May execute in Flash.

VxWorks images consist of:

 Text segment---executable instruction.

 Data segment---Initilized global and static varibles.


 BSS.

VxWorks Image 文件类型的说明

Uploaded images(通过网口或串口下载到 RAM):

vxWorks - basic Tornado, shell 和 symbol table 在主机端


vxWorks.st(文件很大)- 独立的 image,包含 shell 和 symbol table 在目标板运

ROM based images(直接烧入 ROM 的 VxWorks):

vxWorks_rom - Tornado in ROM,非压缩, 在 RAM 中运行


vxWorks.res_rom_nosym - Tornado in ROM, 非压缩,在 ROM 中运行
vxWorks.st_rom - Stand-alone in ROM, 压缩, RAM 中运行
vxWorks.res_rom - Stand-alone in ROM, 非压缩, ROM 中运行

 
非 BSP make 文件中包括:

include $(TGT_DIR)/h/make/rules.library

include $(TGT_DIR)/h/make/defs.default(define default value for makefile)

...............

BSP make 文件中包括: include $(TGT_DIR)/h/make/rules.bsp ...

ARM7 做 VxWorks imgage 时,在 makefile 文件中用 MACH_EXTRA 代替


LIB_EXTRA, 这样生成的 VxWorks 时不压缩的在 ROM 中运行的程序
(uncompressed ROM-based VxWorks image),否则就是压缩的在 RAM 中运行
的程序(compressed RAM-based VxWorks image).

启动顺序的一些概念

 The sequence of events which occur as power-up are a function


of type VxWorks image with will run.
 处理器"跳"到再 ROM 或 Flash 中 Boot-strap 程序的起点. 这个程
序主要有以下作用:

 关闭中断(来自处理器)
 初始化目标内存(target memory)
 装载要运行的 VxWorks image segments
 Jumps to code to place target in quiet state

 启动顺序 Boot Sequence--Loadable VxWorks image

 Bootstrap code executes and loads text and data


segments of boot code(from ROM or Flash) into RAM.具
体执行如下:
 Boot code compressed-Decompression during
copy
 Boot code uncompressed-copy
 Boot code is ROM-resident-copy data segment
only

 Boot program executes and loads VxWorks image into


RAM.Jumps to VxWorks load point.
 System initialization code statically linked into loaded
VxWorks image executes and completes initialization.

 Startup Sequence--VxWorks 初始化

做以下工作:

 Place hardware environment in a quiet state.


 Initalize and start the wind kernel
 Spawn a tast to complete system initialization

 System initialization task will initialize support for end-user


specified facilities,and start the end-user's application

二.系统启动顺序

 VxWorks image

分为在 ROM 中运行和在 RAM 中运行两种.两者启动顺序的区别在于 sysInit()函数的调用.该函

数在 RAM 运行的 VxWorks 中初始化 RAM.

 ROM 中运行的 VxWorks


VxWorks 在 ROM 中运行,即写入 ROM 中的 VxWorks 是非压缩的,不需要解压,
系统直接跳到 ROM 的首地址,运行 VxWorks.注意:ROM 运行的 VxWorks 并不
支持所有的主扳,应以主扳手册为准.

文件 romInit.s 中的 romInit()---->文件 bootInit.c 中的 romStart()---->文件


usrConfig.c 中的 usrInit()----->sysHwInit()----->usrKernelInit()-----
>KernelInit(usrRoot,...)

VxWorks 在 ROM 中运行主要是为了节省 RAM 空间,以便应用程序有更大的空间运行.只把

VxWorks image 的 data 段复制到 RAM 的 LOCAL_LOW_ADRS, text 部分留在 ROM 并在 ROM

中执行.

ROM 中运行的 VxWorks 缺点是运行速度慢.

 RAM 中运行的 VxWorks

VxWorks 在 RAM 中运行,即写入 ROM 中的 Boot 或 VxWorks Image 是压缩的,


需要先解压 copy 所有的 text 和 data 到 RAM 的 LOCAL_LOW_ADRS 中,下面
sysInit()主要是初始化 RAM 用的,系统直接跳到 RAM 的首地址,运行 VxWorks

usrInit()前面不压缩,即 romInit(),romStart()不能压缩.

文件 romInit.s 中的 romInit()---->文件 bootInit.c 中的 romStart()---->sysaLib.s 中


的 sysInit()---->文件 usrConfig.c 中的 usrInit()----->sysHwInit()-----
>usrKernelInit()----->KernelInit(usrRoot,...)

RAM 运行的 Boot 或 VxWorks image 的 text 段或 data 段会从 ROM 复制到 RAM,在 RAM 中运

行.

其中 usrRoot()是 VxWorks 启动的第一个任务,由它来初始化 driver,network 等

描述: romInit.s first execute in flash,minal initiliz,then jump to romStart.


romStart() 开始装载和解压 image 到 RAM,sysaLib.s 是在 RAM 中执行的第一
个函数.

 BootROM image

 BootROM image

最少的系统初始化,主要用于启动装载 VxWorks image.一般有压缩和不压缩两种形式,如

bootrom 和 boot_uncmp.与 VxWorks image 的区别在于一个 Bootrom 调用 bootConfig.c,而

VxWorks 调用 usrConfig.c.

文件 romInit.s 中的 romInit()---->文件 bootInit.c 中的 romStart()---->文件


bootConfig.c 中的 usrInit()----->sysHwInit()----->usrKernelInit()-----
>KernelInit(usrRoot,...)

其中 /target/config/all/bootConfig.c 是 Boot ROM 设置模块.用于通过

网络加载 VxWorks image.

usrRoot()---->bootCmdLoop(void)命令行选择,或 autobooting----->bootLoad(pLine, &entry)加

载模块到内存(网络,TFFS,TSFS...)----->netifAttach()---->go(entry)----->(entry)() 从入口开始

执行,不返回.

 各个函数的主要作用

romInit()-----power up,disable interrupt,put boot type on the stack,clears


caches.

romStart()-----load Image Segments into RAM.

usrInit()-----Interrupt lock out,save imformation about boot type,handle all the


Initialization before the kernel is actually started,then starts the kernel
execution to create an initial task usrRoot().This task completes the start up.

sysHwInit()-----Interrup locked,Initializes hardware,registers,activation kernel


KernelInit(usrRoot,...)-----

 Initializes and starts the kernel.


 Defines system memory partition.
 Activates a task tUsrRoot to complete initalization.
 Unlocks inierrupts.
 Uses usrInit()stack.

usrRoot()

 初始化内存分区表(memory partition library)


 初始化系统系统时钟(system clock)
 初始化输入输出系统(I/O system)----可选
 Create devices----可选
 设置网络(Configure network)--------可选
 激活 WDB 目标通信(Activate WDB agent)---------可选
 调用程序(Activate application)

VxWorks Image 在 RAM 中解压的位置

RAM Low Address


VxWorks 运行的位置

RAM High Address Boot image 由 ROM 解压


后 Copy 的位置,即
bootRom 区
RAM Low Address,RAM High Address 和有关定义在 BSP,config.h,makefile 文
件中定义.可参见 BSP 配置文件及生成下载

VxWorks 在 ROM 中的情况

ROM 低高地
址位
压缩的 VxWorks Imgage

  没有压缩的 romInit.s 和
  romStart()在 ROM 的起始
位置,系统 power up 后,从
ROM 低地址 这个起始位开始执行,即执
位 行 romInit(),起始位置由硬
件定义,一般为
0x00000000

注:浅蓝色为整个 VxWorks Image.

其中 RAM_LOW_ADRS, RAM_HIGH_ADRS 等一些地址在 makefile 和 BSP


config.h 中定义.可参见 BSP 配置文件及生成下载

Vous aimerez peut-être aussi