DIY编程器网

标题: VxWork BSP 和启动过程 [打印本页]

作者: liyf    时间: 2014-10-5 10:30
标题: VxWork BSP 和启动过程
VxWork BSP 和启动过程

<P style="LINE-HEIGHT: 150%">开发BSP主要的两点: Tornado 2 开发调试环境协议框图
主机开发(Host Development System)

目标机(Target System)

Tornado 工具

 

WTX协议通信<==========>

Editor
Project

Shell
Debugger
Browser
Windview

Target Server


|

Target Agent
VxWorks Target Simulator


WDB协议通信
<==========>

Application
VxWorks OS
VxWorks Target (WDB)Agent


两个主要两个协议
WTX协议(Wind River Tool eXchange): 用于开发机内部Tornado工具与Target Server之间通信.
WDB协议(Wind DeBug): 用于主机Target Server与目标机之间的通信.
 
一.基本概念
BSP定义:
[quote]Provides VxWorks with primary interface to hardware environment.
<P style="LINE-HEIGHT: 150%">作用:  
主要BSP主要文件目录的组成及主要文件的作用:
[quote]这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件.
configAll.h:
[quote]缺省定义了所有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的初始化代码.
[/quote]
[quote]涉及系统核心的components,主要由target/config/All中usrConfig.c中函数调用
[/quote][/quote]
[quote]包含系统或硬件相关的BSP文件.
[/quote]
[quote]Makefile
[quote]一些命令行控制images的生成,参见 [img]http://www.51eda.com/Article/embed_system/armtech/200312/Article_Show.asp?ArticleID=496]BSP设置部分及生成下载
README
BSP发布纪录,版本,总的文档
config.h
包括所有涉及CPU主板的设置及定义(includes,definations),参见 [img]http://www.51eda.com/Article/embed_system/armtech/200312/Article_Show.asp?ArticleID=496]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二进制文件
 
[/quote][/quote]

[quote]中断控制interrupt controller,计时器timer(sys/aux),串口UART(serial),显示屏LCD,键盘Keyboard(opt),触摸屏touch-screen(opt).
前面三个是BSP的主要部分.
[/quote]

[/quote]    VxWorks Image的种类:
[quote][quote]
[/quote][/quote]
[quote]
<P style="LINE-HEIGHT: 150%">VxWorks images consist of:
[/quote]
VxWorks Image文件类型的说明
[quote]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).
 
<P style="LINE-HEIGHT: 150%">启动顺序的一些概念
[/quote]
[quote]
[quote]
[/quote]
<P style="LINE-HEIGHT: 150%">做以下工作:
[/quote] 
<P style="LINE-HEIGHT: 150%">二.系统启动顺序
分为在ROM中运行和在RAM中运行两种.两者启动顺序的区别在于sysInit()函数的调用.该函数在RAM运行的VxWorks中初始化RAM.
[quote]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缺点是运行速度慢.
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中执行的第一个函数.
[/quote]
[quote]最少的系统初始化,主要用于启动装载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)()从入口开始执行,不返回.
[/quote]
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
<P style="LINE-HEIGHT: 150%">KernelInit(usrRoot,...)-----
<P style="LINE-HEIGHT: 150%">usrRoot()
 
VxWorks Image在RAM中解压的位置
 
RAM Low Address

RAM High Address

VxWorks运行的位置
Boot image由ROM解压后Copy的位置,即bootRom区

RAM Low Address,RAM High Address和有关定义在BSP,config.h,makefile文件中定义.可参见[img]http://www.51eda.com/Article/embed_system/armtech/200312/Article_Show.asp?ArticleID=496]BSP配置文件及生成下载
 
VxWorks 在ROM中的情况
 
ROM 低高地址位
 

 

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

注:浅蓝色为整个VxWorks Image.
作者: 李小路    时间: 2021-10-22 10:47
谢谢分享!




欢迎光临 DIY编程器网 (http://diybcq.com./) Powered by Discuz! X3.2